sportsdata-mcp
The sportsdata-mcp server exposes ~500 read-only tools across 28+ sports-data providers, enabling AI agents to compare odds, fetch live scores and stats, analyse racing form, access prediction markets, and retrieve content from official league APIs.
Cross-bookmaker odds comparison – Compare prices across 11+ bookmakers (Sportsbet, TAB, Ladbrokes/Entain, PointsBet, BetR, Unibet, Pinnacle, Betfair Exchange, Dabble, FanDuel) using capability-tagged tools (e.g. sport.event_markets) for direct cross-provider comparison.
Real-time sports data – Fixtures, results, standings, player/team stats, and match details for:
AFL, NRL, NBA, MLB, Premier League, LaLiga, Serie A, NBL, WTA, Cricket Australia
Formula 1 (OpenF1): lap timing, pit stops, telemetry, race control messages
ESPN: scoreboard, standings, news across any sport/league ESPN covers
Racing (thoroughbred, greyhound, harness) – Race meetings, racecards, form guides, tote pools, price fluctuations, market movers, and next-to-jump feeds from Sportsbet, TAB, PointsBet, BetR, Betfair, FanDuel Racing, and Racing and Sports.
Prediction markets – Query Kalshi (CFTC-regulated) and Polymarket (crypto) for market catalogues, order books, price history, and trades.
Fantasy & analytics – SuperCoach projections, ownership, and prices across 7 sports (AFL, NRL, EPL, NBA, NBL, NFL, BBL); Data Golf skill ratings, strokes-gained breakdowns, pre-tournament/in-play predictions, and DFS projections.
Content & social – News, video, photos, and articles from AFL and Cricket Australia APIs; Twitter/X tweet search, user timelines, and trends (requires Bearer token).
Discovery & configuration – Meta-tools (list_available_groups, list_tools_by_capability) let models discover enabled providers and find comparable tools. Enable only the tool groups you need via YAML config or environment variables; specs can be refreshed OTA without reinstalling.
Allows retrieval of Contentful CMS entries (e.g., promotions, major-event navigation) via the Entain/Ladbrokes provider.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sportsdata-mcpcompare AFL odds for Collingwood vs Essendon across Sportsbet and Entain"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sportsdata-mcp
Ask your AI which bookmaker is paying more — and get a real answer.
Free & open source (MIT). ~841 tools across 64 providers in Claude Desktop,
Cursor, or any MCP client. uvx sportsdata-mcp serve and you're done.
You: Which book has the best price on Parramatta v Penrith, and how big is the spread?
Claude queries five books at once and comes back with:
Book | Eels | Panthers |
Betfair | 1.18 | 6.20 |
BetR | 1.17 | 5.00 |
PointsBet | 1.17 | 4.80 |
Pinnacle | 1.17 | 4.78 |
Sportsbet | 1.19 | 4.75 |
Real captured odds. The same bet on Penrith pays $6.20 at Betfair and $4.75 at Sportsbet — a 30% spread on identical risk. That gap is invisible unless something is reading every book at once.
What this one is for: comparing prices, not just fetching scores. Plenty of sports MCP servers will get you fixtures and standings. This one is built around disagreement between books — eleven bookmakers, the Betfair exchange, and two prediction markets (Kalshi, Polymarket) side by side on the same market, plus twenty-seven official league/stats feeds. Deep on AU/NZ books (Sportsbet, TAB, Ladbrokes, PointsBet, BetR, Dabble) and on racing — thoroughbred, greyhound and harness with tote pools and exchange money — which most catalogues skip entirely. Capability tags make providers interchangeable, so "compare odds across books" is one question rather than forty-three integrations.
Is this for you?
Worth being straight about, because it decides whether the first thing you ask works or looks broken.
Best fit — you follow or bet into Australian markets. The cross-book edge above is the reason this exists, and it is built on 159 tools across eight Australian books: Sportsbet, TAB, PointsBet, BetR, Ladbrokes/Neds, Betfair, Dabble, Unibet. Nothing else exposes that, and racing — thoroughbred, greyhound and harness, with tote pools and exchange money — is covered to the same depth.
Also good — you want sport data anywhere in the world. The other 682 tools across 56 providers are not region-locked: MLB, NBA, NFL, NHL, the Premier League, cricket, golf, tennis, F1, UFC, fantasy (ESPN, Sleeper, FPL), plus Pinnacle and the Kalshi and Polymarket prediction markets. 486 of those need no key at all.
Not a fit — you want US sportsbook odds. Those eight books are licensed for Australia and block traffic from outside it. From the US you get Pinnacle, FanDuel, Kalshi and Polymarket for prices; the stats and fantasy side works in full. If cross-book US pricing is what you came for, this is not the tool.
It can now place bets. Read this bit.
Since 0.31.0 the catalogue includes sportsbet_place_bet, tab_place_bet,
entain_place_bet and unibet_place_bet. These stake real money from your own
account, using credentials you supply. Nothing calls them on its own — they are
ordinary tools, so whatever you connect this server to decides when they run.
Two things follow, and neither is optional reading:
An LLM with these tools in scope can place a bet. If that is not what you want, do not enable the account groups; every other group is unaffected, and
list-groupsshows exactly what you have turned on.Only Sportsbet and TAB have been round-tripped against a real account. Unibet and Ladbrokes/Neds have their request shape captured from placements made in a browser, which proves the request and says nothing about whether a stored credential alone is accepted.
The agent workbench applies its own policy on top of this — everything starts in
paper mode and stakes nothing until you opt a book in — but that is the app's
guardrail, not this server's. On its own, this package does what it is asked.
Rather than take that on trust, ask it:
sportsdata-mcp coverageIt probes every provider from your machine and prints what answered, what your location blocks, and what needs a key — so an empty result is never ambiguous between "no data" and "wrong country".
Built on this server
Two live terminals, both open source, both running on nothing but these tools:
sportsdata-ai.com/sports — prediction markets + exchange as a de-vigged sharp line, every book measured against it.

sportsdata-ai.com/board — racing money flow: which runners are firming, fair price vs the field, win%/ROI scorecard.

Try these once it's installed
"Compare head-to-head odds across every book for tonight's NRL games."
"Which AFL games have the biggest price disagreement between bookmakers?"
"What does Betfair imply for the Panthers vs what Sportsbet is offering?"
"Show me Pinnacle's line on every MLB game today."
"Pull the ladder and last five results for Hawthorn."
An MCP server that exposes sports-data APIs (bookmakers, league/governing-body feeds, aggregators) as tools, configurable so you only load the tool groups you need. A capability-tag system makes tools from different providers interchangeable wherever they answer the same question — so the model can compare odds across bookies or stats across data sources with one discovery call.
The catalogue spans bookmakers, league/governing-body feeds, and stats
aggregators, and it keeps growing. New providers are added by dropping a YAML
spec into src/sportsdata_mcp/specs/ — the engine needs no code changes — so
the exact provider and tool counts move over time. Run sportsdata-mcp list-groups for the live inventory, and three meta-tools (group discovery,
capability lookup, resource listing) are always on regardless of what you
enable.
Install
One-liner (any MCP client config, via uv):
uvx sportsdata-mcp serve # or: pip install sportsdata-mcpPrebuilt app (no Python needed): grab the latest
release
(macOS + Windows), unzip, and run sportsdata-mcp setup — it writes the config
for Claude Desktop / Cursor for you. The macOS build is unsigned for now:
right-click → Open the first time.
From source:
git clone https://github.com/DanielTomaro13/sportsdata-mcp.git
cd sportsdata-mcp
pip install -e . # add ".[dev]" for the test + lint toolchainRelated MCP server: Sports Hub MCP Server
Quickstart
sportsdata-mcp version # print version info
sportsdata-mcp list-groups # see every available tool group
sportsdata-mcp lint # validate the packaged specs
sportsdata-mcp doctor # probe enabled groups for reachability + auth
sportsdata-mcp serve # start the MCP stdio server (default command)
sportsdata-mcp update-specs # OTA-refresh provider specs (signed bundle); --clear revertsProvider endpoints drift (e.g. Entain rotates its GraphQL persisted-query hashes).
update-specs fetches a signed spec bundle and applies it into an overlay under
~/.sportsdata/spec-overlay, which the loader prefers over the packaged copy — so a drift
fix doesn't need a whole new app build. The bundle is Ed25519-verified against a baked key
(a product build refuses an unsigned/forged bundle; anti-rollback refuses a stale replay).
Publish one with scripts/publish-spec-bundle.py; point --url / $SPORTSDATA_SPEC_FEED_URL
at the asset. Restart the server after applying.
Enable tool groups with a config file or the SPORTSDATA_MCP_GROUPS env var:
SPORTSDATA_MCP_GROUPS="afl.public.core,sportsbet.racing,entain.graphql" sportsdata-mcp serveSee examples/ for Claude Desktop / Claude Code config snippets,
a worked cross-bookie odds-comparison prompt,
and an NBA shot-chart + box-score walkthrough that
shows the nba_stats_call dispatcher pattern end to end.
Configuration
Config is resolved in this order (first hit wins):
--config <path>flag$SPORTSDATA_MCP_CONFIG./sportsdata-mcp.yaml~/.config/sportsdata-mcp/config.yamlbuilt-in defaults
# sportsdata-mcp.yaml
enabled_groups:
- afl.public.core
- sportsbet.racing
- entain.graphql
providers: # all optional; sensible defaults apply
sportsbet:
request_timeout_seconds: 30
rate_limit_rps: 10 # sustained requests/sec (token bucket)
max_response_bytes: 0 # 0 = no cap (default); set a positive byte count to guard context
secrets: {} # for authenticated providers; prefer env vars in prodA provider whose auth reads env: SOME_VAR is satisfied by the real environment
variable first, then by a secrets: { SOME_VAR: "..." } entry of the same name
(a local-dev convenience — keep real secrets in the environment in production).
Environment variables
Variable | Effect |
| Group selector; overrides |
| Path to a config file (see resolution order above). |
| Global response-size cap in bytes for every provider that doesn't set its own |
| Seconds to cache identical GET responses (default |
| Serve over HTTP instead of stdio (same as |
| Dormant — the product is free; nothing requires a licence. The signed-entitlement machinery remains for anyone self-hosting gated premium feeds (see below). |
| Only relevant with the dormant entitlement gate above. Normally unset. |
The (dormant) entitlement gate
This project used to be a paid product. It's free now — no licence exists or is
needed, and every group serves by default — but the signed-entitlement machinery
(Ed25519-verified feed grants, offline caching, 15-min revalidation) is kept dormant
rather than deleted: it's tested, harmless when unset, and useful to anyone
self-hosting this server who wants to gate premium feeds for their own users. Set
SPORTSDATA_LICENSE + SPORTSDATA_ENTITLEMENT_URL against your own issuing service
to activate it; leave them unset (the default) and nothing changes.
Keyed feeds. A few providers need an upstream credential you supply yourself —
e.g. DATAGOLF_KEY for DataGolf, X_BEARER_TOKEN for Twitter/X. Everything else
needs no key at all.
Meta-tools (list_available_groups, list_tools_by_capability, list_resources)
are always registered regardless of what is enabled, so a fresh install can still
guide the model to turn groups on.
On the response-size cap. There is no cap by default — every tool returns
whatever the upstream API sends. If you want to guard the model's context window you
can opt in to a cap: precedence is providers.<id>.max_response_bytes >
SPORTSDATA_MCP_MAX_BYTES > the default (0, unlimited). Be aware that very large
payloads (e.g. Sportsbet's full *_event_markets firehose, ~2 MB) won't fit in
Claude's ~200 K-token context regardless — for those, prefer a narrower tool such as
sportsbet_sports_card with includeTopMarkets: true.
Tool groups
Run sportsdata-mcp list-groups for live counts and descriptions.
AFL — api.afl.com.au
Group | Tools | Notes |
| 22 | Competitions, seasons, rounds, fixtures, ladders, match stats |
| 9 | Broadcast regions, guides, providers |
| 8 | News/articles, videos, photos |
| 1 | CFS premium ops — needs the anonymous |
| 1 | StatsPro ops — needs the |
| 1 | HLS video URL signing |
Sportsbet — sportsbet.com.au
Group | Tools | Notes |
| 15 | Race meetings, racecards, results, futures, SRMs |
| 14 | Sport events, markets, prices, SGMs |
| 12 | Live status, commentary, ladders, promos, video |
| 2 | Resulted events by date |
| 1 | Persisted GraphQL gateway ( |
Entain / Ladbrokes — ladbrokes.com.au
Group | Tools | Notes |
| 13 | Navigation quick-links and REST surfaces |
| 1 | 127 persisted GraphQL ops ( |
| 1 | Contentful CMS entries (promotions, major-event nav) |
PointsBet — pointsbet.com.au
Group | Tools | Notes |
| 10 | Sports catalogue, competition/event feeds, full event markets, in-play, search |
| 11 | Meetings, racecards, results, futures, SRMs, tips, form |
| 3 | Promotions, promo-code splash, + |
TAB — tab.com.au
Group | Tools | Notes |
| 9 | Dates, meetings, racecards (fixed + parimutuel), form, next-to-go, jackpots, futures |
| 9 | Sports/competitions tree, full match markets + SGM, focused match markets, next-to-go, results, multi-builder |
| 4 | Featured/live recommendations + |
Unibet — unibet.com.au
Group | Tools | Notes |
| 1 |
|
| 3 |
|
BetR — betr.com.au (BlueBet platform)
Group | Tools | Notes |
| 8 | Next-to-jump, today's/grouped racecards, race card, form, fluctuations, movers |
| 7 | Event types, competition categories, event markets, match detail, popular SGMs |
| 4 | Promotions + featured racing + popular market links |
Pinnacle — pinnacle.com (sharp odds)
Group | Tools | Notes |
| 13 | Sports/leagues, full + highlighted + live + per-league matchups, carousel, matchup detail, straight + parlay markets (American-odds prices) |
| 4 | Enums, market-label dictionary, teaser definitions, API status |
Betfair Exchange — betfair.com.au (exchange odds)
Group | Tools | Notes |
| 3 |
|
| 1 |
|
| 5 | Live scores, event details, timeline (single + batch), scores+broadcast |
Dabble — dabble.com.au (iOS app backend)
Group | Tools | Notes |
| 5 | Discover any competition (active list / name lookup / sports), then its fixtures (embedded markets + decimal odds) + the full per-fixture book (400+ markets + Pick'em props) |
The Australian social-betting app's backend, read directly. Reached by posing
as the iOS app — the spec bakes the app's User-Agent + x-device-id +
x-app-version so the public feeds return JSON anonymously. AU-only and
Cloudflare-fronted (403s from non-AU IPs, like the other AU books). Works for
any competition — dabble_active_competitions lists the ~269 currently-bettable
ones across all sports. Read-only odds — no bet placement.
Composes with the other books via sport.event_markets / sport.prices.
SuperCoach — supercoach.com.au (News Corp / Champion Data fantasy)
Group | Tools | Notes |
| 6 | One uniform surface across all 7 games (afl/nrl/epl/nba/nbl/nfl/bbl) × 2 modes ( |
News Corp / Champion Data's salary-cap fantasy game. Every feed lives under
/{year}/api/{sport}/classic/v1/… — pass sport (one of the seven) and year
(the season key: current calendar year for afl/nrl, currently 2025 for the
others, which run across the new year). No auth, not geo-blocked (runs in CI).
The core supercoach_players feed is per-round and large (~1–3 MB); use ppts1
(the real projection), not ppts. Adds the fantasy / projections angle via
stats.fantasy_projections alongside Data Golf. See
documentation/SuperCoach.md.
NBL — nbl.com.au (Australian National Basketball League)
Group | Tools | Notes |
| 14 | Seasons, teams, ladder, schedule (scores), players + rosters, per-player season stats + game-log box scores, team stats, season stat leaders (sortable), and news |
The league's own site data API — a Redis-cached proxy ("rosetta") over Genius
Sports stats at prod.rosetta.nbl.com.au/get/…. No token, but referer-gated
(403s without an nbl.com.au Origin + Referer — both baked into the spec). Every
response is enveloped {type, count, source, data:[…]}. Season-scoped by year
(the season start year: 2025 = NBL26, current); stat-leaders takes the season UUID
from nbl_seasons. Distinct from the SuperCoach nbl fantasy feed — this is the
official box-score source. See documentation/NBL.md.
WTA — wtatennis.com (Women's Tennis Association, official)
Group | Tools | Notes |
| 8 | Official WTA API: singles/doubles rankings, player catalogue + profiles + match history, tournament calendar + per-edition results + entry lists (seeds) |
The WTA's official data API (api.wtatennis.com/tennis/…) — public Spring REST,
no auth/key, no geo-block, runs in CI. Rankings need type+metric
(rankSingles+singles or rankDoubles+doubles); tournaments are keyed by
tournamentGroup.id + year (Australian Open = group 901). Fills the tennis gap on
the stats side, composing with the bookmakers' live tennis markets. See
documentation/WTA.md. (ATP has no equivalent open API —
atptour.com is Cloudflare bot-protected — so it isn't modelled.)
Racing and Sports — racingandsports.com.au
Group | Tools | Notes |
| 3 | Today's race meetings (all codes, verified) + sports match list + per-race odds (token) |
Data Golf — datagolf.com (needs a key)
Group | Tools | Notes |
| 3 | Player list, tour schedule, current event field |
| 11 | DG rankings, pre-tournament (+ archive) + in-play model probabilities, skill + approach-skill ratings, player/live SG decompositions, live strokes-gained, live hole stats, DFS projections |
| 3 | Outright + matchup + all-pairings odds across ~13 books (incl. model line) |
| 9 | Archived raw round data, event-level results (finishes/earnings/points), historical bookmaker odds (outrights + matchups) and DFS results |
Needs a Data Golf API key in the DATAGOLF_KEY env var (a personal subscription
key — sourced via the static_query auth scheme, never stored in the repo).
FanDuel — fanduel.com (US)
Group | Tools | Notes |
| 4 |
|
| 2 |
|
NRL — mc.championdata.com
Group | Tools | Notes |
| 4 | Champion Data match centre: competitions, fixture, per-match player stats, app settings |
Plus the nrl://stats/definitions resource (dictionary of every NRL stat code).
NBA — cdn.nba.com + stats.nba.com
Group | Tools | Notes |
| 5 | Open CDN JSON: today's scoreboard, full schedule, live box score + play-by-play, odds |
| 2 |
|
nba_stats_call fronts the whole stats.nba.com /stats/ analytics surface (player/team
dashboards, box scores v2+v3, shot charts, play-by-play, leaders, standings, draft, hustle,
tracking, …). Browse every operation, its required params and its defaults in the
nba://stats/operations resource.
ESPN — espn.com JSON feeds
Group | Tools | Notes |
| 5 | Site API convenience endpoints: scoreboard, teams, standings, game summary, news |
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
All ESPN tools are parametric over sport + league slugs (e.g. football/nfl,
basketball/nba, soccer/eng.1), so the five groups cover every league ESPN
carries. Browse each dispatcher's operations in its espn://{site,core,web,cdn}/operations
resource.
OpenDota — api.opendota.com (Dota 2 esports, no key)
Group | Tools | Notes |
| 4 | Heroes, hero meta by skill bracket, pro teams, leagues |
| 3 | Pro matches, full match detail, public ladder matches |
| 4 | Profile + rank, match log, win/loss, hero pool |
The catalogue's first esports provider. Sides are Radiant/Dire rather than home/away, and hero stats are paired pick/win counts per skill bracket rather than rates — both documented, both test-pinned. The 4.4 MB pro-player list is deliberately not exposed. See documentation/OpenDota.md.
OpenLigaDB — api.openligadb.de (German football, no key)
Group | Tools | Notes |
| 8 | Bundesliga 1/2/3 + DFB-Pokal: fixtures, results, tables, matchdays |
Fills the big-five hole — you had the Premier League, La Liga and Serie A but no
Bundesliga. Crowd-maintained, so the long tail can lag. Note scores live in
matchResults, which holds both half-time and full-time entries. See
documentation/OpenLigaDB.md.
EuroLeague — api-live.euroleague.net (basketball, no key)
Group | Tools | Notes |
| 7 | EuroLeague + EuroCup: seasons, clubs, rounds, games, box scores |
Completes basketball alongside the NBA and NBL. One letter selects the competition
(E/U), season codes are E2024, home/away are local/road, and box scores carry
PIR rather than an NBA-style efficiency number. See
documentation/EuroLeague.md.
NCAA — ncaa-api.henrygd.me (US college sports, no key)
Group | Tools | Notes |
| 3 | Scoreboards, conference standings, AP/coaches polls across every college sport |
ESPN already gives you college scores; this adds the NCAA's own polls and conference standings in a normalised shape. A third-party mirror of NCAA.com rather than an official feed. See documentation/NCAA.md.
Fantasy Premier League — fantasy.premierleague.com (official, no key)
Group | Tools | Notes |
| 2 | Every player with price, form, ownership, xG/xA; one player in full depth |
| 3 | Clubs with strength ratings, all 38 gameweeks with deadlines, scoring rules |
| 5 | Fixtures with difficulty 1-5, live per-player scoring, dream team, set-piece takers |
| 6 | Any manager's squad, history and picks; classic and H2H leagues; your own team |
The world's most-played fantasy game — 4,085,510 registered squads — and public except for your own squad.
One quirk shapes the whole provider: bootstrap-static is a single 1.37 MB blob whose
player rows alone are ~362,000 tokens, with no server-side field selection. Four tools
hit that one URL and each return one slice, so fpl_players lands at ~58k tokens instead
of being unusable. Nothing is invented or renamed — only removed.
Watch the units: now_cost is tenths of a million (145 = £14.5m), form and the
expected-goals family are strings, and team is FPL's own 1-20 id rather than the
Premier League's. See documentation/FPL.md.
UFC — ufc.com JSON:API (official, no key)
Group | Tools | Notes |
| 3 | Events with per-segment card times and venue, full fight cards, bouts back to UFC 1 |
| 2 | Fighter search and profiles with statistics attached |
| 2 | The FightMetric career statistics table and divisional rankings |
| 2 | Single-round record book, plus the JSON:API resource index |
The obvious source, ufcstats.com, is a dead end — it serves a JavaScript
proof-of-work bot challenge with noindex and zero data rows in the HTML, so reading it
would mean building bot-detection evasion. ufc.com turns out to be better anyway: it runs
Drupal with JSON:API exposed, and athlete_stat carries the same FightMetric dataset,
down to the same fightmetric_id identifiers.
48 statistics per fighter — significant strikes split by position (standing/clinch/ground) and target (head/body/leg), takedowns landed/attempted/accuracy/defence, submission and knockdown averages, strikes landed and absorbed per minute, career records by finish method.
Two traps worth knowing: related records never inline (without include=athlete_stat
a fighter has no statistics at all), and filters silently return 0 rows on the stat
collections rather than erroring — so those parameters are not exposed, and sorting is the
leaderboard mechanism instead. Rate-limited to 0.5 rps because robots.txt asks for
crawl-delay: 15. See documentation/UFC.md.
Football-Data.co.uk — historical results with closing odds (no key)
Group | Tools | Notes |
| 1 | A league season per call: results, shots, cards, and closing prices from ~10 bookmakers, back to the 1990s |
The only source here you can backtest against. Every other football provider tells
you what happened; this one tells you what the market thought would happen, match by
match. Pull a completed season, compare closing prices to results, and you have a CLV
baseline to measure today's live sportsbet/pinnacle/betfair prices against.
Published as CSV — the one provider using the engine's response_format: csv, so the
model still receives ordinary JSON. See
documentation/FootballDataUK.md.
Motorsport beyond F1 — MotoGP, Formula E, NASCAR (no key)
Group | Tools | Notes |
| 6 | MotoGP/Moto2/Moto3/MotoE back to 1949: events, sessions with track conditions, classifications, championships |
| 5 | Formula E from 2014-15: calendar, driver and team championships with per-race points |
| 2 | Cup/Xfinity/Truck: full season summaries and weekend feeds with practice, qualifying and race results |
With openf1 (live telemetry) and jolpicaf1 (history), the motorsport preset now
covers five series. Each has a structural quirk documented in its page — MotoGP needs a
four-level uuid walk, Formula E wraps races but not standings, and NASCAR's results
array is unsorted and includes non-starters at position 0, so results[0] is not
the winner. See MotoGP.md,
FormulaE.md, NASCAR.md.
Jolpica F1 — api.jolpi.ca (F1 history 1950 →, no key)
Group | Tools | Notes |
| 4 | Seasons, drivers, constructors, circuits |
| 1 | Race calendars with per-session times |
| 5 | Race, qualifying and sprint results, lap timings, pit stops |
| 2 | Drivers' and constructors' championships |
The community successor to Ergast, deprecated at the end of 2024. Complements
openf1 rather than overlapping it: OpenF1 is live telemetry from 2023 onward,
Jolpica is every race since 1950. "Who won the 1976 Japanese GP" and "what lap is
Verstappen on" are different providers. Responses use Ergast's double MRData
envelope and return all values as strings — see
documentation/JolpicaF1.md.
Chess — lichess.org + api.chess.com (no key)
Group | Tools | Notes |
| 6 | Per-time-control ratings, leaderboards, user status, daily puzzle, arenas |
| 7 | Profiles, ratings by format, leaderboards, titled players, monthly game archives |
Both major chess platforms. Note that ratings are not comparable across them — different pools and formulas — and only Chess.com serves game history as JSON, because Lichess streams its exports as NDJSON. See Lichess.md and ChessCom.md.
Squiggle — squiggle.com.au (AFL prediction models)
Group | Tools | Notes |
| 6 | 41 independent AFL forecasting models: what each tipped, its confidence and margin, plus actual and projected ladders |
Not another results feed — the market of opinions about AFL games, which is the
natural counterpart to a bookmaker's price. Pull a round's tips, pull the same games
from the books, de-vig the prices, and you're comparing a 41-model consensus against
the market. squiggle_ladder also carries swarms, the simulated finishing-position
distribution behind each projection. One volunteer's server, so the provider ships an
honest contact User-Agent and a deliberately gentle rate limit — see
documentation/Squiggle.md.
NHL — api-web.nhle.com (official web API, no key)
Group | Tools | Notes |
| 3 | Seasons, club rosters by position group, player bio/draft/career |
| 2 | League schedule by week, and a club's full season game log |
| 3 | Live scoreboard, box scores with per-player ice time, scoring summaries |
| 3 | Standings with division/conference/wildcard sequencing, skater and goalie leaders |
The league's own API — the one nhl.com reads (the old statsapi.web.nhl.com is dead).
The espn.* groups already answer "what's the NHL score"; this is the depth layer.
Two conventions worth knowing: season ids are concatenated years (20242025), and
/now paths 307-redirect. See documentation/NHL.md.
Sleeper — api.sleeper.app (fantasy football, fully public)
Group | Tools | Notes |
| 3 | Season/week state, username → user id, platform-wide trending adds/drops |
| 8 | Settings, rosters, managers, weekly matchups, transactions, playoff bracket, traded picks |
| 3 | League drafts, draft settings, and every pick with player names |
The other major fantasy platform, and the easier of the two to reach: Sleeper's read
API needs no key and no cookie — a league id is enough. Joins espnfantasy on the
fantasy.* capabilities, so "show me my league" works across both. The 15 MB player
catalogue is deliberately not exposed; draft picks carry player names instead. See
documentation/Sleeper.md.
ESPN Fantasy — your own fantasy league
Group | Tools | Notes |
| 6 | Games catalogue (resolves the current season + week), season status, pro teams + bye weeks, player universe, scoring presets, player news |
| 14 | Settings, teams, rosters, standings, matchups, draft board, transactions, message board, league history, plus the undocumented |
| 5 | Box scores (lineups with actual and projected points), matchup scores, scoreboard, live scoring, positional ratings |
| 2 | Free-agent / waiver pool with ownership and projections; deep per-player stat splits |
The fantasy platform, not the ESPN scoreboard (that's espn.* above) — one URL per
league whose payload is chosen by a repeatable view param, covering all five games
(ffl football, flb baseball, fba basketball, fhl hockey, wfba WNBA) via a
game param on every tool. Public leagues need no credentials; set
ESPN_FANTASY_COOKIE to espn_s2=…; SWID={…} and the same tools reach your private
leagues. Fantasy playerIds are ESPN athlete ids, so rosters here join straight to the
real-world espn.* feeds. See documentation/ESPNFantasy.md
for the view catalogue, the x-fantasy-filter cookbook and the id decoder tables.
OpenF1 — api.openf1.org (Formula 1, no key)
Group | Tools | Notes |
| 3 | Grand Prix weekends (meetings), sessions (the fixtures feed), driver roster |
| 5 | Session classification, starting grid, drivers'/constructors' championship standings, overtakes |
| 5 | Per-lap sector + speed-trap timing, pit stops, tyre stints, live gaps/intervals, track position |
| 2 | Car telemetry (speed/throttle/brake/gear/RPM/DRS) + (x,y,z) location at ~3.7 Hz |
| 3 | Race-control messages (flags/SC/incidents), team-radio clips, weather |
Free, no-auth public REST surface (auth: none). Scope feeds by session_key /
meeting_key (both accept the literal latest) and driver_number; discover keys
with openf1_sessions / openf1_meetings first.
Cricket Australia — cricket.com.au (no key)
Group | Tools | Notes |
| 7 | Fixtures (the |
| 3 | Full scorecard (innings batting/bowling/wickets), run-graph series, live video streams |
| 2 | Pulselive CMS: video/text/audio/playlist content list + curated playlists |
Two no-auth hosts (apiv2.cricket.com.au/web + the Pulselive CMS). The apiv2
endpoints carry jsconfig=eccn:true by default so they return the documented
camelCase shape; flow is cricketaustralia_fixtures → cricketaustralia_scorecard?fixtureId= →
cricketaustralia_players?playerIds=.
MLB — statsapi.mlb.com (official Stats API, no key)
Group | Tools | Notes |
| 22 | Sports/leagues/divisions/conferences, teams (+ single, affiliates, history, uniforms), rosters, alumni, coaches, personnel, players (profile, batch, search, season catalogue, changes feed), venues, seasons (current + full history) |
| 5 | Games by date / range / team, plus postseason (schedule, series, tune-in) and tied games |
| 10 | Boxscore, linescore, play-by-play, v1.1 |
| 9 | Standings, season stats, one-player stats, league + team leaders, team-season stats, game pace, high/low records |
| 15 | Draft (+ prospects), awards (catalogue + recipients), attendance, transactions, free agents, jobs (umpires/datacasters/scorers), Home Run Derby, All-Star ballots |
| 1 |
|
The official MLB Stats API the MLB-StatsAPI library wraps, read directly (no key) —
comprehensive coverage of the public surface. sportId=1 is MLB; discover ids
with mlb_teams / mlb_schedule / mlb_player_search, then drill into a game or
player. Most tools accept the API's hydrate string to embed related objects in one
call.
Premier League — premierleague.com (no key)
Group | Tools | Notes |
| 7 | Competitions, season structure, awards, the league table, current gameweek, geo |
| 10 | Teams (+ batch), squads, form (single + all-teams), team stats, next fixture, club metadata |
| 8 | Fixtures/results feed + match centre: detail, events, lineups, team stats (~200 Opta metrics), officials, commentary |
| 8 | Player directory, profiles (basic/career/season), batch lookup, season + competition stats, metadata |
| 2 | Player + team stat leaderboards (sort by any Opta metric) |
| 8 | Editorial content/search, latest+popular news/video, broadcasting schedule |
The private JSON APIs that power premierleague.com, read directly (no key,
no cookies) across three hosts (the SDP stats platform, the editorial/
broadcast api.premierleague.com, and static config on resources.premierleague.com).
Underlying data is Opta. Premier League = competition 8; season id is the
starting year (2025 = 2025/26). Flow: pl_teams → pl_matches → a match id →
pl_match/pl_match_stats; pl_standings for the table. Unofficial/undocumented —
respect the ~5 rps rate limit. The SDP wire params (_limit, _sort,
kickoff>/kickoff<) are exposed under clean tool names (limit, sort,
kickoff_after/kickoff_before).
LaLiga — apim.laliga.com (public key shipped)
Group | Tools | Notes |
| 6 | Competitions, season instances (subscriptions), league table, rounds/matchweeks |
| 3 | Season team list, single team, club squad |
| 3 | Every-player season stats (≈749, full Opta metrics), player profile + stats |
| 2 | Matches feed + single-match detail |
The private JSON API behind laliga.com (Azure APIM), read directly. Underlying
data is Opta. A public Ocp-Apim-Subscription-Key is shipped as a
working default, so it runs out of the box — but the key rotates; override it
with LALIGA_SUBSCRIPTION_KEY (env or secrets:) when reads start 401-ing
(re-harvest from laliga.com's __NEXT_DATA__). A "subscription" is a season
instance (slug laliga-easports-2025 = 2025/26); detail endpoints are keyed by
slug. Pairs with the Premier League provider for cross-league football
comparison via the shared stats.ladder / sport.fixtures_by_date /
stats.player_season tags.
Serie A — api-sdp.legaseriea.it (no auth)
Group | Tools | Notes |
| 3 | All competitions, the 41-season catalogue, single-season detail |
| 6 | League table (overall/home/away), the 20 teams, every-player + team Opta stats (paginated), all 380 matches, match lineups |
The public SDP JSON API behind legaseriea.it, read directly (no auth).
Underlying data is Opta. The Serie A competition id is baked in, so you only
ever supply a seasonId (discovered from seriea_seasons; seasonName like
2025/2026). Player stats return identity and ~279 Opta metrics in one call
(no squad endpoint), paginated 30/page with category=General|Goalkeeping.
Completes the big-three football leagues alongside Premier League + La Liga via
the shared stats.ladder / sport.fixtures_by_date / stats.player_season tags.
Kalshi — kalshi.com (prediction markets, no key)
Group | Tools | Notes |
| 6 | Market catalogue + detail, order book, public trades, OHLC candlesticks (single + batch) |
| 9 | Events, series catalogue (by category), single series, milestones, MVE combo collections, entity registry |
| 3 | Exchange status, trading schedule, announcements |
The CFTC-regulated US event-contract exchange. Market data is public — no
key required; optionally set KALSHI_API_KEY_ID + KALSHI_PRIVATE_KEY(_PATH)
and every request is RSA-signed for Kalshi's higher authenticated rate limits
(needs pip install "sportsdata-mcp[kalshi-auth]"). Trading surfaces stay out
of scope (read-only provider). Id chain:
kalshi_series_list(category) → kalshi_events → kalshi_markets →
orderbook/trades/candles by ticker. Prices are dollar-denominated.
Polymarket — polymarket.com (prediction markets, no key, geo-gated)
Group | Tools | Notes |
| 9 | Markets/events/series/sports/tags catalogue + site search (the discovery plane) |
| 6 | Order book, best price, midpoint, spread, price history, CLOB catalogue |
| 2 | Public trade tape + top holders |
The largest crypto prediction market. All read endpoints are anonymous —
the wallet keys Polymarket's SDKs use are for order placement only (out of
scope). ⚠️ Geo-gated: Polymarket drops connections at the network edge
from restricted jurisdictions (verified: AU IPs time out on every host) — run
from an unrestricted region or VPN. Flow: polymarket_events → a market's
clobTokenIds → polymarket_book / polymarket_price_history.
X (Twitter) — api.x.com (needs a Bearer token)
Group | Tools | Notes |
| 7 | 7-day search, volume counts, post lookup (batch + single), quote/repost/like engagement |
| 6 | Profile lookup (handle/id, batch), user timelines, mentions |
| 2 | Trends by location (WOEID) + project usage/cap monitor |
The X API v2 read surface — no anonymous tier, so a Bearer token is
required: env X_BEARER_TOKEN first (an operator can ship a deployment-wide
token for all its users), then the config secrets: block (each user their
own). The env var holds the bare token; the spec adds Bearer . Mind your
tier's monthly read cap (twitter_usage); the spec throttles ~0.5 req/s and
never auto-retries 429s. Write/user-context surfaces (posting, DMs, follows)
are out of scope. Flow: twitter_user_by_username("AFL") → id →
twitter_user_tweets; search with X operators ("Storm" lang:en -is:retweet).
Bring your own key
Seventeen providers need a key you sign up for yourself. They are excluded from the free
preset and from the default group set, so nothing here changes unless you opt in — set
the environment variable and add the group.
Provider | Env var | Tools | What it adds that nothing else here has |
|
| 20 | Ten sports on one key — and the only rugby-union coverage here |
|
| 6 | Odds from ~40 international books, with historical snapshots for CLV work |
|
| 5 | 274 bookmakers across 34 sports, down to padel, bandy and gaelic football |
|
| 7 | Player props with stable market ids you can join across books and time |
|
| 9 | DFS salaries and projections (DraftKings/FanDuel), which no official feed publishes |
|
| 8 | Football lineups, events and per-player stats on a genuinely free tier |
|
| 10 | College-football analytics: SP+, Elo, advanced box scores, historical lines |
|
| 10 | European competitions with no official feed here — UCL, Eredivisie, Championship |
|
| 10 | One consistent shape across NBA, NFL, MLB and EPL |
|
| 8 | Esports beyond Dota 2 — CS2, LoL, Valorant, R6 |
|
| 7 | ATP and ITF draws, H2H and rankings ( |
|
| 8 | International and franchise cricket ( |
|
| 7 | Highlight video across five sports — the only video surface here that isn't single-league |
|
| 5 | US majors on a free non-commercial tier, with clean per-game player logs |
|
| 5 | Asian-handicap odds across Asian books |
|
| 5 | Cricket ball-by-ball commentary (deeper than |
|
| 2 | 30k+ golf courses with per-hole par, yardage and stroke index |
export THE_ODDS_API_KEY=...
sportsdata-mcp serve --groups "free,theoddsapi.*"Two things to know before you rely on these
Their response shapes are documented, not verified. We hold no key for any of them,
so the shapes in each spec come from the vendor's own documentation rather than from a
live probe. Every one of these tools carries an explicit note telling the model to
inspect the payload it actually received rather than trusting the sketch. Elsewhere in
this catalogue the shapes were probed and corrected — roughly one in three turned out to
differ from what the docs implied — so treat this tier as the lower-confidence one until
you have run it with your key. If you do, a PR flipping shapes_verified: true with the
corrections is the single most useful contribution available.
Four of them report failures with HTTP 200. apitennis answers a bad key with
200 {"error":"1", …}, cricketdata with 200 {"status":"failure","reason":"Invalid API Key"}, isportsapi with 200 {"code":2,"message":"Invalid [api_key]…"}, and apisports
returns 200 with a populated errors object and an empty response when you
exhaust the daily quota. That last one is the nastiest: a
model asking for today's fixtures gets an empty list and reports "no matches today", so
a blown quota is indistinguishable from a quiet Tuesday. All four specs declare
error_signals, and the engine raises a real error naming the variable to set. If you
consume these APIs outside this server, check the body — the status code will lie to
you.
Odds-API.io is /v3/, not /v2/. The vendor's own pages advertise v2 paths; every
one of them 404s. Caught by probing before the spec was written — otherwise all five
tools would have shipped broken.
Not included
Three candidates were probed and rejected rather than shipped broken:
SportDevs — as of 2026-08-10 sportdevs.com, api.sportdevs.com and
rugby.sportdevs.com have no DNS record at all. The service is gone, so the
rugby/volleyball/handball coverage it advertised is not available from it. (Rugby union
is instead covered by apisports.)
Live Golf API — use.livegolfapi.com resolves, but every path including the root
returns 404 {"message":"Application not found"}. The host is up; the application
behind it is not deployed.
Fighting Tomatoes — the documented API paths under fightingtomatoes.com/API/…
return the site's 404 page. The domain serves a web app, not the API it advertises.
TheSportsDB's free tier returns silently truncated data — an EPL table comes back with 5 rows of 20, with nothing marking it as partial. A provider that quietly answers with a fifth of the table is worse than no provider, so it is excluded rather than shipped with a warning.
Telemetry
Nothing is transmitted unless you turn it on. There is no default that sends, no first-run prompt that defaults to yes, and consent is readable only from an environment variable — never from a config file, because a config file can be committed to a repo or baked into someone else's Docker image.
What IS always on is local recording, which is yours:
sportsdata-mcp statsPer-tool call counts, error rates, error codes and empty-result counts, worst first. A
model can read the same thing mid-session via sportsdata_session_stats — usually the
fastest way to tell a missing key (100% errors, code AUTH_REQUIRED) from an upstream
with no data (no errors, high empty).
To share it, two deliberate acts are required, and neither alone transmits:
export SPORTSDATA_TELEMETRY=1
export SPORTSDATA_TELEMETRY_ENDPOINT=https://your/collectorTool arguments are never recorded, and that guarantee is structural rather than a
filter: Telemetry.record() has no parameter that could accept them. This matters here
more than in most projects — an ESPN Fantasy league id identifies a league and its
members, and a Sleeper username is a username.
sportsdata-mcp telemetry --show-payloadprints the exact JSON a transmission would contain, so the claims are checkable rather than promised. Full detail, including what the one free-text field does: docs/TELEMETRY.md.
For adoption numbers that touch no user at all — PyPI downloads, unique cloners,
referrers — python scripts/metrics.py reads public data about the package instead.
Cross-provider comparison
Every tool is tagged with provider-agnostic capability slugs (e.g.
sport.event_markets, racing.race_card). Tools sharing a slug answer the same
question and are directly comparable across providers. The discovery flow:
list_tools_by_capability("sport.event_markets")→ every enabled tool exposing itCall each provider's tool concurrently with the resolved event ids
Compare the raw snapshots (schemas are not normalised — the model reconciles them)
See examples/comparator-prompt.md for a full
"compare Storm v Cowboys odds across bookies" walkthrough.
Per-provider notes
Sportsbet — anonymous public APIs; no secrets needed. REST events are keyed by integer
eventId; a persisted-GraphQL gateway is exposed viasportsbet_graphql_call(browsesportsbet://graphql/operations).Entain / Ladbrokes — a persisted-GraphQL gateway; the model supplies an operation name + variables (discover them in
entain://graphql/operations). Hashes can drift when the front-end bundle ships; refresh them withsportsdata-mcp refresh-hashes entain.AFL —
afl.public.*is anonymous.afl.premium.*mints an anonymousx-media-mis-tokenautomatically; some premium endpoints still return 401 for anonymous callers.NRL — the anonymous Champion Data match-centre CDN (
mc.championdata.com), the same static JSON the official nrl.com match centre reads. No secrets, no cache-buster params needed. Resolve acompetitionIdfromnrl_competitions(e.g. 12999 = 2026 NRL Premiership), amatchIdfromnrl_fixture, then pull per-player match stats fromnrl_match; decode stat codes vianrl://stats/definitions.NBA — two surfaces, no secrets.
cdn.nba.comis wide open (it even serves JSON astext/plain, which the client accepts).stats.nba.comsits behind Akamai, which black-holes any request missing a full browser header bundle — the spec ships that bundle inprovider.default_headers, so it just works. Akamai also rate-limits hard, so the spec'sdefaultsblock throttles NBA to ~1 req/2.5 s, sets a 45 s timeout, and retries transient429/5xxwith exponential backoff (all overridable viaproviders.nba.*). The/stats/family is one dispatcher (nba_stats_call): pick anoperation(the path segment, e.g.leaguedashplayerstats) and passquery_params— each operation already carries NBA's full default param set, so you override only what matters. Most responses are column-oriented (resultSets:[{name, headers, rowSet}]}); v3 box scores are nested.ESPN — four public hosts, no auth, no API key:
site.api.espn.com(scores, teams, standings, news, summaries),sports.core.api.espn.com(the canonical$ref-linked model — odds, win-probability, plays, venues, drafts, coaches),site.web.api.espn.com(search + athlete views) andcdn.espn.com(the live core feed, needs?xhr=1). Nearly every URL is.../sports/{sport}/{league}/{resource}, so the tools takesport+leagueas parameters and cover every ESPN league parametrically — NFL, NBA, MLB, NHL, college, soccer (eng.1,esp.1, …), golf, racing, tennis, MMA and more. Discovery:espn_scoreboard(sport, league)→ aneventid →espn_game_summaryor the deepespn_core_call(event_*)ops. The spec throttles to ~5 req/s and retries transient429/5xx(overridable viaproviders.espn.*). Note the core API path usesleagues/{league}(plural); core list responses are lazy{count, items:[{$ref}]}envelopes — follow the refs for detail.PointsBet — anonymous public APIs, no secrets.
api.au.pointsbet.comserves the sportsbook (sports + racing);pointsbet.com.auserves static CMS/nav assets via thepointsbet_content_calldispatcher. Sports discovery:pointsbet_sport_competitions(sportKey)→ a competition key →pointsbet_event(eventKey)for the full market book. Racing:pointsbet_racing_meetings(startDate, endDate)→ araceId→pointsbet_racing_race. Many feeds return a top-level JSON array.TAB (Tabcorp) — anonymous public data, no secrets.
api.beta.tab.com.ausits behind Akamai (the spec ships a browser header bundle + ~2.5 rps throttle, like NBA);cmsapi.tab.com.auserves CMS feeds viatab_cms_call. Every endpoint needs ajurisdiction(defaults toNSW). The API is HATEOAS and name-based — paths embed sport/competition/match/venue names with spaces (…/AFL Football/competitions/AFL/matches/Adelaide v Geelong), which the HTTP layer percent-encodes; pass raw names. Racing:tab_racing_meetings(date)→raceType+venueMnemonic→tab_racing_race. Sports:tab_sport→tab_competition→tab_matchfor the full market book.Unibet — anonymous AU data, no secrets, two surfaces. Racing is persisted-GraphQL (
unibet_racing_call, thegraphql_persisteddispatcher) atrsa.unibet.com.au— race ids areeventKeys like202606040200.T.AUS.hawkesbury.1; the endpoint enforces Apollo CSRF so aContent-Type: application/jsonheader is sent. Sport is the Kambi offering API (unibet_kambi_callover*.kambicdn.com, market AU): group tree, events, bet offers, in-play, bet-builder. Browse ops inunibet://{racing,sport}/operations.BetR — anonymous AU data, no secrets. BetR runs on the BlueBet platform, so the API is
web20-api.bluebet.com.au— a flat REST surface covering racing (next-to-jump, grouped racecards, race cards, form, fluctuations) and sport (event types → categories → markets, SGMs). Thebetr.com.auNext.js_next/data/{buildHash}blobs are skipped (fragile per-deploy hash; the API serves the same data).Racing and Sports —
www.racingandsports.com.auracing/form data, no auth.racingandsports_todays_racing(/todays-racing-json-v2) is the verified feed — today's meetings across thoroughbred/harness/greyhound, by country. The site is behind Cloudflare, which whitelists that feed but JS-challenges the other paths from datacenter IPs (they work from a residential/browser IP); the form/fields/ results are HTML pages, andGetOddsneeds a per-race token, so only the JSON feeds are modelled.Betfair Exchange — anonymous, the open read-only web APIs keyed by the public
_akquery param. The crown jewel isbetfair_market_prices(ero …/bymarket) — exchange back/lay prices, the sharpest reference odds. Discover market ids by walkingbetfair_navigation(scan …/bynode, e.g.EVENT_TYPE:7= Horse Racing) down to MARKET nodes; live scores/details come from theipsin-play service.string_csvid params take a list. (Theapiedsracing widgets are Cloudflare-gated from datacenter IPs and theappsyncGraphQL needs a session, so they're out of scope — racing is covered via navigation→bymarket.)Pinnacle — anonymous, no key. The Arcadia "guest" API (
guest.api.arcadia.pinnacle.com) — the open feed the web sportsbook reads. Sports only (sharp-odds book, no racing); prices are American odds. Flow:pinnacle_sports→pinnacle_sport_matchups(sportId)→pinnacle_matchup_markets(matchupId). The provider sends Pinnacle's public web-clientX-API-Key, which unlocks the full per-sport + per-league matchup lists and the parlay markets.FanDuel (US) — anonymous US data, no secrets, two surfaces under one provider. Racing is the first full-query GraphQL provider:
fanduel_racing_callPOSTs the literal query text (thegraphql_querydispatcher kind, sibling to the persisted-hashgraphql_persisted), with boilerplate variables (brand/product/device/profile) baked as per-opdefault_variables— most calls need none, override only what varies ({results: 12},{trackCode, raceNumber}). Sportsbook is REST (fanduel_sb_call) keyed by the static public_akweb key, region NJ. The two halves need differentOriginheaders, so the sportsbook dispatcher overridesOrigin+x-sportsbook-regionover the racing-origin provider default. Browse ops infanduel://{racing,sportsbook}/operations. (US data — composes with other US sources via capability tags.)
CLI reference
Command | Purpose |
| Start the MCP stdio server (default when no subcommand) |
| Print every group with tool count + description |
| Validate specs against the schema + capability catalogue (nonzero on failure) |
| What works from your location: reachable providers, what your region blocks, what needs a key |
| Per-provider reachability + auth + REST-contract probe (nonzero on failure) |
| Refresh persisted-query hashes from the live front-end bundle ( |
| Print version info |
-v / --verbose enables DEBUG logging (and un-silences httpx/httpcore).
Contributing
See documentation/ADDING_A_PROVIDER.md for
the full guide, with separate playbooks for adding a bookmaker vs a sports website /
data API. In short, adding a provider is a spec-only change in the common case:
Write
src/sportsdata_mcp/specs/<provider>.yaml(copy an existing spec).Tag each tool with capability slugs from
specs/_capabilities.yaml; add a new slug there if none fits (two providers sharing a slug makes them comparable).sportsdata-mcp lint— must pass.sportsdata-mcp doctor(with the new groups enabled) — probes it live.pytest -m "not live"— offline suite; drop the marker filter to run live tests.Add a row to
tests/contract/test_api_contracts.pyso the new provider's documented response shape is verified live on every PR (see below).
pip install -e ".[dev]"
pytest -m "not live" # offline suite (the CI gate)
pytest -m contract # live response-contract checks (see below)
ruff check .CI
Every push/PR runs three jobs (.github/workflows/ci.yml):
test — ruff,
sportsdata-mcp lint, and the offline suite (pytest -m "not live") across Python 3.11–3.13. The deterministic gate.contract —
pytest -m contract: live response-contract checks that hit each upstream API and assert it still returns the documented shape (top-level keys, and the documented keys on list items). It is resilient by design — it skips on anything outside our control (network errors,5xx,401/403/429, geo-blocks, a missingDATAGOLF_KEY, or an empty feed) and only fails on a genuine shape regression or a broken spec (wrong path/params →4xx). Bookmaker APIs that geo-block GitHub's runners simply skip there.package — builds the wheel and proves the CLI loads the packaged specs from a clean install.
Support this project
sportsdata-mcp is free, MIT-licensed, and has no paid tier — every provider and every tool is in the box. Keeping 62 provider specs working against APIs that change without notice is the ongoing cost. If it saves you time, you can chip in at ko-fi.com/danieltomaro.
Entirely optional, and nothing is gated behind it. Starring the repo, filing a good bug report, or adding a provider spec helps just as much.
License
MIT. Copyright (c) 2026 Daniel Tomaro. Free to use, copy, modify and
distribute, with the copyright notice and permission notice retained — see
LICENSE.
mcp-name: io.github.DanielTomaro13/sportsdata-mcp
Available Tools
829 toolsafl_broadcast_channelsARead-onlyIdempotent
List broadcast channels (272) with media types (VIDEO/AUDIO/TEXT).
Returns: {pageInfo, content:[{id, name, abbreviation, broadcaster, channelTypes:[{name, mediaType}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and open-world. The description adds valuable context by stating 'Auth: none needed' and specifying the exact return structure, which goes beyond the provided annotations. It does not mention pagination behavior or rate limits, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: one sentence for purpose, one for return format, and one for auth. It is front-loaded with the core action and includes only essential information, with clear line breaks separating sections for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two pagination parameters and no output schema, the description covers the essential elements: purpose, return structure, and authentication. The schema and annotations fill in most remaining gaps, making the description sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (page and pageSize) having descriptive details. The tool description does not add any additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'List' and the resource 'broadcast channels', with additional details about media types (VIDEO/AUDIO/TEXT) and the count of 272. This unambiguously identifies the tool's purpose and distinguishes it from related broadcast tools such as regions or events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is stated clearly enough that usage is implied (to list broadcast channels). However, there is no explicit guidance on when to prefer this over sibling tools or any exclusions, leaving room for ambiguity in edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcasters_listARead-onlyIdempotent
List broadcasters (49: Foxtel, Channel 7, BBC, ESPN, …).
Returns: {pageInfo, content:[{id, name, abbreviation, logo, restrictedCountries}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds value by noting auth is not needed and specifying the exact return shape (pageInfo + content array with fields). It does not discuss pagination or restrictedCountries semantics, but the annotations reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-sentence purpose with examples, a return type line, and an auth line. Every part earns its place and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description covers purpose, return format, and auth. It omits pagination behavior and the meaning of restrictedCountries, but these are minor given the tool's simplicity and the schema's coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter pageSize, which is described as 'Rows per page.' The description does not add further parameter details, but the schema already carries the meaning, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List broadcasters' with specific examples (Foxtel, Channel 7, BBC, ESPN) and shows the return structure, making it distinct from sibling tools that handle regions, channels, or events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like afl_broadcast_channels or afl_broadcast_events. The description only states what it does, without any context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcast_event_getARead-onlyIdempotent
Get a single broadcast event by id.
Returns: {id, name, startDateTime, channels:[...], contentReference}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Broadcast event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a return shape ({id, name, startDateTime, channels:[...], contentReference}) and explicitly states 'Auth: none needed', which are behavioral details beyond the annotations. No contradictions, and the description does not repeat annotation data. A solid contribution given the low complexity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact: one main sentence for the action, plus two short lines for return shape and auth. Every sentence provides necessary information, and the primary purpose is front-loaded. There is zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-get tool with one parameter and rich annotations, the description covers the return fields and auth, which are the main operational details. It does not mention error handling (e.g., what happens if eventId not found) but that is not essential for a straightforward get-by-id. The low complexity and annotation coverage keep this adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single parameter 'eventId' with a description including that it is required and part of the URL path. The description only says 'by id', which adds nothing beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get a single broadcast event by id' with a specific verb and resource, clearly distinguishing it from the sibling list tool 'afl_broadcast_events' and 'afl_broadcast_match_events'. The singular 'by id' makes the tool's scope unambiguous, so an agent can pick it apart from alternatives even without seeing sibling descriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It implies usage through the phrase 'single ... by id' (suggesting you use it when you have a specific eventId), but it does not mention alternatives like afl_broadcast_events or any conditions for selection. This falls under 'implied usage' at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcast_eventsBRead-onlyIdempotent
Broadcast schedule — one entry per match per channel.
Returns: {pageInfo, content:[{id, name, startDateTime, channels:[...], contentReference:{id, type}}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| round | No | Round number within the competition season. | |
| toDate | No | ISO 8601 upper bound | |
| fromDate | No | ISO 8601 lower bound, e.g. 2026-05-25T07:00:00Z | |
| pageSize | No | Rows per page. | |
| compseason | No | Competition-season id (from afl_compseasons_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds value by disclosing 'Auth: none needed' and documenting the exact return shape, including lazy fields like pageInfo and the nested channels/contentReference arrays — useful context the annotations don't provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and well-structured: a one-line purpose, a precise return-type sketch, and an auth note. The main intent is front-loaded and every sentence earns its place. Slightly trimmed from a 5 only because the return shape could be one line tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly carries return-type documentation, and it covers auth. But it does not explain the semantics of the contentReference object or the relationship to sibling broadcast tools, which an agent needs to fully interpret results or choose this tool. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all five parameters individually documented in the input schema (round, toDate, fromDate, pageSize, compseason with defaults and ISO 8601 notes). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Broadcast schedule') and adds a distinguishing detail ('one entry per match per channel') that explains the data granularity. However, it does not explicitly differentiate itself from closely-named siblings like afl_broadcast_match_events or afl_broadcast_event_get, which remain ambiguous in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the sibling broadcast tools: afl_broadcast_match_events, afl_broadcast_event_get, afl_broadcast_channels, or afl_broadcast_regions. The description provides no exclusions or selection context (e.g., 'use this for schedule-level queries, use X for match-level details'), leaving an agent to guess which sibling fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcast_match_eventsBRead-onlyIdempotent
Broadcast events scoped to one (compseason, round).
Returns: {pageInfo, content:[{id, name, startDateTime, channels}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| round | Yes | Round number within the competition season. | |
| pageSize | No | Rows per page. | |
| compseason | Yes | Competition-season id (from afl_compseasons_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds 'Auth: none needed' and the return structure, which is useful but does not disclose any other behavioral nuances (e.g., pagination behavior, data freshness). It adds moderate value beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one short sentence plus a return structure and auth note. It front-loads the essential scope and provides the key information without fluff. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with rich annotations, the description is sufficient. It provides the return schema, auth requirement, and scoping parameters. It could mention the source of compseason IDs (already in schema) or pagination behavior, but these are either covered elsewhere or minor. Overall, an agent can call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all parameters (compseason, round, pageSize) are already described in the schema. The description adds no extra parameter meaning; it only repeats 'compseason, round' in the first sentence, which is redundant with the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (broadcast) and resource (match events) scoped to a compseason and round. It clearly conveys the tool's function, but does not differentiate it from sibling tools like afl_broadcast_events or afl_broadcast_event_get, leaving some ambiguity about when to choose this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as afl_broadcast_events (which may cover broader scopes) or afl_broadcast_event_get. The description simply states what it does without context on selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcast_region_getARead-onlyIdempotent
Get a single broadcast region by id.
Returns: {id, name, timezone}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| regionId | Yes | Broadcast region id (from the broadcasting region list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safe read-only nature is covered. The description adds behavioral context beyond annotations by specifying the return fields ('Returns: {id, name, timezone}') and explicitly stating 'Auth: none needed', which are not in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences and a return line. Every piece of information (verb, resource, return shape, auth) earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with strong annotations, the description is complete. It states what is returned, mentions auth requirements, and the schema provides the parameter source. No output schema exists, but the return format is explicitly listed, covering the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single parameter 'regionId' is fully documented in the input schema. The description only says 'by id', which adds no new meaning beyond the schema. Baseline of 3 is appropriate since the schema handles the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Get a single broadcast region by id') and the resource ('broadcast region'). It distinguishes itself from the list sibling tool (afl_broadcast_regions) by emphasizing 'single' and 'by id'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: it is used to fetch a specific broadcast region by its ID. The ID source is described in the schema ('from the broadcasting region list'), which implies the workflow of listing first then getting. No explicit alternatives or exclusions, but enough context for a simple get-by-id tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_broadcast_regionsARead-onlyIdempotent
List broadcast regions (26) with timezones.
Returns: {pageInfo, content:[{id, name, timezone}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral details by specifying the return structure and that authentication is not required, which goes beyond the annotation fields and helps the agent understand side effects (none) and access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: one line for the main action, one for the return shape, and one for auth. Every sentence adds value and the structure is front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with optional pagination, the description covers the core functionality, return format, auth requirement, and the fact that there are exactly 26 regions. The absence of an output schema is compensated by the explicit return shape. Only minor gaps exist, such as whether pageSize has a maximum or how pagination works, but the schema and pageInfo hint are sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents both 'page' and 'pageSize' with descriptions, achieving 100% coverage. The description does not add additional parameter semantics beyond what the schema already provides, so it matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists broadcast regions and includes the count (26) and that each region has a timezone. The verb 'list' plus resource 'broadcast regions' distinguishes it from sibling tools like afl_broadcast_region_get (single region) and afl_broadcasters_list (broadcasters, not regions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative exclusions are provided. However, as a list endpoint, it's implied that this is the right tool when you need all regions, while a specific region would use afl_broadcast_region_get. But this is not stated in the description, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_cfs_callARead-onlyIdempotent
Call any of the AFL CFS premium operations (api.afl.com.au/cfs/afl/...). Requires the anonymous x-media-mis-token (minted automatically). Path params use provider IDs (CD_M*/CD_R*/CD_S*/CD_I*/CD_T*) — map integer ids via the idmap endpoints/resources. Read afl://cfs/operations for the full op list.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: the automatic minting of the anonymous x-media-mis-token, the pattern of provider IDs (CD_M*/CD_R*/...), and the need to map integer IDs. It also explicitly states 'Auth: none needed,' aligning with the readOnlyHint and idempotentHint annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. It uses four short sentences to convey scope, token behavior, ID mapping, and reference to the operations list. The 'Returns:' and 'Auth:' lines are terse but informative, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic call tool with no output schema, the description covers the essentials: what it calls, how to discover operations, how to handle path params, and the token requirement. It stops short of explaining error cases or return structure beyond 'JSON object,' but given the openWorldHint and reference to the catalogue, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already documents the three parameters (operation, path_params, query_params) with 100% coverage, the description enriches them by explaining that operation names come from the catalogue resource, path_params use provider IDs, and query_params are documented in the catalogue. This adds practical meaning beyond the dry schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Call any of the AFL CFS premium operations' with a specific URL base. It distinguishes itself from sibling tools by being a generic call tool for premium operations, while siblings like afl_competitions_list or afl_match_get target specific AFL resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete guidance: 'Read afl://cfs/operations for the full op list' and explains how to map integer IDs via idmap endpoints. However, it does not explicitly say when to prefer this tool over the dedicated AFL sibling tools, though the 'premium operations' scope implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_club_getARead-onlyIdempotent
Get a single club by id.
Returns: {clubs:[{id, providerId, name}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| clubId | Yes | Club id (from afl_clubs_list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, so the description only needs to add extra context; it does so by specifying the return shape and that no auth is required. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: purpose, return shape, and auth. No filler or repetition; every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with no output schema, the description covers the return fields and auth requirement, and the schema covers the id source. It is nearly complete, though it omits error/not-found behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema (clubId, required, from afl_clubs_list, URL path), so the description need not repeat it. The description adds no parameter details beyond 'by id', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single club by id', identifying the action, resource, and scope. It distinguishes itself from sibling tools like afl_clubs_list, which lists clubs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a club id is known, but does not explicitly contrast with list/idmap tools or mention when not to use it. The schema notes the id comes from afl_clubs_list, but the description itself offers no alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_clubs_listARead-onlyIdempotent
List AFL/AFLW clubs (32).
Returns: {clubs:[{id, providerId, name, abbreviation, nickname}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds context beyond annotations by specifying the return shape ({clubs:[...]}) and auth requirement (none needed), which is useful for invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, delivering purpose, return structure, and auth in three short lines. It is front-loaded and contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description is nearly complete: it covers what, returns, and auth. The schema handles pagination parameters, and annotations cover safety. The only missing piece is explicit guidance on when to use this over sibling tools, but that is not critical given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter names and clear descriptions (page: 'Zero-based page number.', pageSize: 'Rows per page.'). The tool description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists AFL/AFLW clubs with a specific resource and a count of 32. It does not explicitly differentiate from the sibling afl_teams_list, which could be similar, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as afl_teams_list or afl_club_get, and no exclusions are mentioned. For a simple read-only list, this is a gap but not fatal given the name implies its scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_competition_compseasonsARead-onlyIdempotent
List comp seasons within one competition.
Returns: {meta, compSeasons:[...]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Rows per page. | |
| competitionId | Yes | Competition id (from afl_competitions_list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying the return structure ({meta, compSeasons:[...]}) and clarifying that no authentication is needed. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by return format and auth requirement. Every sentence provides useful information with no redundancy. Three short lines cover what is needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple list operation with two parameters, full schema coverage, and beneficial annotations. The description includes the return shape and auth requirement, making it largely complete. It does not explain pagination behavior, but pageSize parameter implies this and is documented in the schema. Overall, it is sufficiently complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: competitionId and pageSize both have descriptions. The tool description does not add meaningful extra context beyond the schema; it only restates the resource. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'comp seasons within one competition', clearly scoping the tool to a single competition. This inherently distinguishes it from sibling tools like afl_compseasons_list, which likely lists all comp seasons. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need comp seasons for a specific competition and notes that competitionId comes from afl_competitions_list, providing a prerequisite. However, it does not explicitly state when to use this tool over alternatives like afl_compseasons_list, nor does it provide exclusion criteria. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_competition_getARead-onlyIdempotent
Get a single competition by integer id.
Returns: {meta, competitions:[{id, providerId, code, name}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Competition id (e.g. 1 = AFL) Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds valuable behavioral context: it specifies the return format ('{meta, competitions:[...]}') and explicitly states 'Auth: none needed', which is not covered by the annotations. This goes beyond the minimum and provides useful operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose in the first line. The return type and auth requirement are each given in a short, distinct line, making it highly scannable. Every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID lookup tool, the description is nearly complete: it covers the purpose, return structure, and authentication. The schema fully documents the parameter. Minor gaps include potential error behavior (e.g., when ID not found) and the contents of 'meta', but these are not critical given the simplicity and the presence of sibling tools for broader context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single parameter 'competitionId' with a description and example. The tool description only repeats that it uses an integer id, adding no new meaning beyond the schema. With 100% schema coverage, a baseline of 3 is appropriate, and the description does not compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a single competition by integer id' uses a specific verb (get) with a clear resource and scope (single by integer id), which clearly distinguishes it from the sibling 'afl_competitions_list'. It also provides the expected return shape, removing any ambiguity about what the tool retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: you need an integer competition ID, and it returns a single competition. However, it does not explicitly mention when to use this tool over alternatives like 'afl_competitions_list' or any exclusions. Guidance is only implicit through the word 'single', so it falls short of explicit 'when to use vs 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.
afl_competitions_listARead-onlyIdempotent
List all AFL competitions (AFL, AFLW, VFL, SANFL, …).
Returns: {meta:{pagination}, competitions:[{id, providerId, code, name}]}
Example: All 16 competitions {"pageSize": 50}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page index (0-based) | |
| pageSize | No | Items per page (≤50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety and idempotency. The description adds useful behavioral context by showing the return structure ({meta, competitions}), stating 'Auth: none needed' and giving a concrete example, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one sentence for purpose, a single line for return shape, an example, and auth note. Every part earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list tool, the description is complete enough. It provides the return shape, an example invocation, and auth requirements. The schema and annotations cover safety and parameters, leaving no significant gaps for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both page and pageSize having descriptions, defaults, and constraints, so the schema already handles parameter semantics. The description's example with pageSize adds minimal value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List all AFL competitions', which is a specific verb and resource, and gives concrete examples (AFL, AFLW, VFL, SANFL). This clearly distinguishes it from sibling tools like afl_competition_get and similar lists from other sports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states what the tool does ('List all AFL competitions') and provides an example with pageSize, making the context obvious. However, it does not explicitly mention when to use this vs. alternatives like afl_competition_get, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_compseason_getARead-onlyIdempotent
Get a single comp season (embeds its full rounds array + currentRoundNumber).
Returns: {meta, compSeasons:[{id, providerId, name, shortName, season, rounds:[...], currentRoundNumber}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| compSeasonId | Yes | Comp season id (e.g. 85 = 2026 AFL) Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, openWorld), the description adds 'Auth: none needed' and the exact return shape, which is valuable for an agent to anticipate the response. This goes well beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main action. The return block and auth note are directly useful and contain no redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (single parameter, read-only, getter), the description is complete: it covers the return structure, auth requirement, and the distinguishing 'embeds full rounds array'. No output schema exists, so the described return shape helps fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a complete description for compSeasonId, including an example and note that it's part of the URL path. The tool description adds no additional parameter semantics, so the baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and specific resource ('single comp season'), and clearly differentiates from siblings by noting it embeds the full rounds array and currentRoundNumber. This distinguishes it from list-style tools like afl_compseasons_list or afl_rounds_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys that this tool is for retrieving a specific comp season by ID, and the mention of embedded rounds implies use cases where round data is needed. It does not explicitly name alternative tools or state exclusions, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_compseasons_listARead-onlyIdempotent
List comp seasons across all competitions (2012–present).
Returns: {meta:{pagination}, compSeasons:[{id, providerId, name, competition, season}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing the return shape (meta.pagination and compSeasons fields) and stating 'Auth: none needed'. It also specifies the data range 2012–present. These details complement the readOnlyHint and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one purpose sentence, one return-shape line, and one auth line. Every part is essential and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and rich annotations, the description covers purpose, scope, date range, return structure, and auth. No output schema exists, but the description compensates by listing the return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides 100% coverage with descriptions for both page and pageSize, including defaults. The description adds no extra parameter-level information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List comp seasons across all competitions' with a specific verb and resource, and adds a date range (2012–present). This distinguishes it from siblings like afl_compseason_get and afl_competition_compseasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the global listing tool by saying 'across all competitions'. However, it does not explicitly mention alternatives (e.g., afl_competition_compseasons for a single competition) or exclusion criteria, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_photo_getARead-onlyIdempotent
Get a single photo content item by id.
Returns: {id, type:'photo', title}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Content item id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe read operation. The description adds value beyond this by specifying the return shape '{id, type:'photo', title}' and stating 'Auth: none needed.' These details help the agent anticipate the response and confirm no authentication barriers, complementing the annotation-provided safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences plus a return line—with no wasted words. The key action is front-loaded, and every line adds relevant information: what it does, what it returns, and auth requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and no output schema, the description is sufficiently complete. It provides the return format and auth status, which partially compensates for lacking an output schema. It does not describe error behavior or edge cases, but these are less critical for a read-only fetch by id. Sibling tools exist, but the core purpose and call pattern are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the 'id' parameter is described as 'Content item id. Required — part of the URL path.' The description does not add further meaning beyond what the schema already states; it only repeats 'by id.' Since the schema fully documents the parameter, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific: 'Get a single photo content item by id.' It clearly identifies the resource (photo content item) and the verb (get). It distinguishes from sibling tools like afl_content_photo_list (list vs single) and afl_content_video_get/text_get by the explicit 'photo' type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you have a content id and need a single photo item. However, it does not explicitly state when to use this versus alternatives, nor does it mention any exclusions or prerequisites beyond having an id. There is no direct guidance about selecting this over list or other content getter tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_photo_listARead-onlyIdempotent
List photo content.
Returns: {pageInfo, content:[{id, type:'photo', title, leadMedia}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return. | |
| offset | No | Rows to skip — this CMS surface pages with offset/limit, not page/pageSize. | |
| tagNames | No | Tag names to match (comma-separated). | |
| tagExpression | No | Pulse tag filter expression, e.g. 'AFL_MATCH:1234'. | |
| referenceExpression | No | Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable context beyond that by specifying 'Auth: none needed' and outlining the response shape ({pageInfo, content:[{id, type:'photo', title, leadMedia}]}), which is especially useful since no output schema exists. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: a single action sentence plus a compact return structure and auth note. Every line provides useful information with zero waste, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 5 optional parameters, the schema fully documents the parameters and annotations cover safety, while the description fills gaps with auth requirements and return format since no output schema exists. The only missing element is explicit guidance on when to choose this over the photo 'get' sibling, but overall the description is sufficiently complete for a well-scoped list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with detailed descriptions (e.g., 'Rows to skip — this CMS surface pages with offset/limit, not page/pageSize'), so the baseline is 3. The description itself adds no parameter information, leaving semantics entirely to the schema, which is adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('photo content'), making the tool's purpose unambiguous. It distinguishes from sibling tools like afl_content_text_list and afl_content_video_list by specifying the photo content type, and also provides the return structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied usage context by naming the operation ('List photo content') but does not explicitly state when to use this tool versus alternatives, such as afl_content_photo_get for fetching a single photo. It does not mention exclusions or prerequisites, relying on the tool name and sibling list for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_promo_getARead-onlyIdempotent
Get a single promo content item by id.
Returns: {id, type:'promo', title, links:[...]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Content item id. Required — part of the URL path. | |
| limit | No | Maximum rows to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the description supplements this by specifying the return shape and confirming no authentication is required. It does not detail error handling or pagination, but the annotation coverage reduces the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise lines: purpose, return shape, and auth requirement. It is front-loaded and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with rich annotations and full schema coverage, the description is complete. It adds return structure (not available via output schema) and auth requirements, making it adequate for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters. The description only echoes 'by id' and adds no extra meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get a single promo content item by id' with a specific verb and resource, clearly distinguishing it from the sibling list tool. It precisely scopes the operation to a single item retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by id' implies the condition for use, and 'Auth: none needed' gives clear context. However, it does not explicitly mention that afl_content_promo_list should be used for fetching multiple promos or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_promo_listARead-onlyIdempotent
List promo / marketing cards (each embeds a links[] of CTAs).
Returns: {pageInfo, content:[{id, type:'promo', title, links:[{promoUrl, linkText}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return. | |
| tagNames | No | e.g. lineups-sponsor | |
| referenceExpression | No | Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description doesn't need to re-state safety. It adds valuable context by specifying the exact return shape ({pageInfo, content:[{id, type:'promo', title, links:[{promoUrl, linkText}]}]}) and explicitly noting that authentication is not required ('Auth: none needed'). This goes beyond the annotations by describing the response structure and access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one clarifying sentence about the resource, a returns block, and an auth note. Every sentence adds value without redundancy. It is fully front-loaded with the purpose and gives essential technical details in a scannable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with 3 optional parameters and no output schema, the description provides enough context: purpose, return shape, and auth. The schema covers the parameters, so the description completes the picture by telling the caller what to expect in the response and that no auth is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage: all three parameters (limit, tagNames, referenceExpression) have descriptions. The tool description does not add extra parameter context, but the schema already provides sufficient meaning. Therefore, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'promo / marketing cards' and the action as 'List', which is specific and distinct from sibling tools like afl_content_promo_get, afl_content_text_list, and afl_content_video_list. The added detail about embedded CTAs (links[]) further clarifies what these cards contain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving promo/marketing content, but does not explicitly state when to prefer it over alternatives or provide exclusions. There is no mention of when NOT to use this tool or what other tools might be better suited for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_text_getARead-onlyIdempotent
Get a single text article by id.
Returns: {id, type:'text', title, body, author, references, tags}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Content item id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and open world, covering safety. The description adds useful behavioral context by specifying the return shape (id, type, title, body, author, references, tags) and explicitly stating no authentication is needed. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short lines plus a return line, front-loaded with the purpose, and every sentence adds value. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-get tool with one parameter, the description covers purpose, return format, and auth requirements. Since there is no output schema, explaining the returned fields is essential and done. Nothing meaningful is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the id parameter with clear semantics (Content item id, required, part of URL path) at 100% coverage. The description adds no further parameter detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get a single text article by id,' which uses a specific verb (get) and resource (text article) and clearly distinguishes from sibling list/photo/video tools. It is unambiguous about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single ... by id' clearly implies this is for fetching one specific article when you have its id, distinguishing from list/collection tools. It gives clear context for when to use it, though it does not explicitly name alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_text_listARead-onlyIdempotent
List text articles (news) with reference/tag filters.
Returns: {pageInfo, content:[{id, type:'text', title, date, tags, references, body, author}]}
Example: AFL+AFLW news index {"referenceExpression": "(AFL_COMPETITION:1) or (AFL_COMPETITION:3)", "tagExpression": "("News")", "limit": 17}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| sort | No | Sort direction. | |
| limit | No | Maximum rows to return. | |
| offset | No | Rows to skip — this CMS surface pages with offset/limit, not page/pageSize. | |
| pageSize | No | Rows per page. | |
| tagNames | No | Tag labels CSV | |
| references | No | TYPE:id shorthand CSV, e.g. AFL_MATCH:8130 | |
| tagExpression | No | Tag expr, e.g. ("News") | |
| referenceExpression | No | Boolean ref expr, e.g. (AFL_COMPETITION:1) or (AFL_COMPETITION:3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond this by detailing the return structure, noting auth is not required, and giving an example request. Such details help the agent understand expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: purpose, return format, example, and auth note. Each sentence contributes meaningful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by specifying the return shape. It covers purpose, example, and auth. However, it could further clarify pagination semantics (e.g., offset/limit vs page/pageSize) beyond the schema, though the schema already documents this. Overall, it is adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline. The description adds value by illustrating how to use referenceExpression and tagExpression in a realistic example, clarifying which parameters are primary for filtering. This goes beyond the schema's per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists text articles (news) with reference/tag filters. It distinguishes itself from siblings like afl_content_video_list (video) and afl_content_text_get (single item retrieval) by specifying the resource type and filter options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use (listing news articles with filters) and provides a concrete example with AFL/AFLW news. However, it does not explicitly name alternatives or state when not to use this tool, which would be needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_video_getARead-onlyIdempotent
Get a single video content item by id.
Returns: {id, type:'video', title, duration, onDemandUrl}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Content item id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by specifying 'Auth: none needed' and detailing the exact return fields. This goes beyond the structured hints and provides practical invocation context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three short sentences, each serving a purpose: action, return shape, and auth. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-id get operation with rich annotations, the description is sufficient: it names the resource, return format, and auth. It lacks error-handling notes, but these are not essential for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is already well-documented in the schema. The description adds no additional parameter semantics beyond the verb 'by id', so it does not go beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a single video content item by id') with a specific verb and resource. It distinguishes from siblings like afl_content_video_list and other content-type get tools by explicitly scoping to a single video item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool (when you have an id and need a specific video item). It does not explicitly mention when not to use or name alternatives, but the context is clear given the sibling list tool and the id parameter requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_content_video_listARead-onlyIdempotent
List video content (highlights, replays, press conferences).
Returns: {pageInfo, content:[{id, type:'video', title, duration, onDemandUrl, additionalInfo}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return. | |
| offset | No | Rows to skip — this CMS surface pages with offset/limit, not page/pageSize. | |
| tagNames | No | e.g. ProgramCategory:Match Replays | |
| references | No | e.g. AFL_MATCH:8130 | |
| tagExpression | No | Pulse tag filter expression, e.g. 'AFL_MATCH:1234'. | |
| referenceExpression | No | Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, and the description does not contradict them. It adds beyond-annotation value by stating 'Auth: none needed' and disclosing the exact return shape ({pageInfo, content:[...]}), which helps the agent set expectations. Rate limits or result caps are not mentioned, but the added context is adequate for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three terse, front-loaded segments: purpose, return shape, and auth. Every sentence earns its place with no filler, repetition of schema data, or redundant annotation restating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description properly takes on return-value disclosure ('Returns: {pageInfo, content:[{id, type:'video', title, duration, onDemandUrl, additionalInfo}]}'). Combined with 100% schema coverage and strong annotations, the tool is mostly complete for a list operation; only usage guidance versus sibling content/live-video tools is left underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies — the schema already documents all six optional parameters with clear descriptions and examples (e.g., 'Rows to skip — this CMS surface pages with offset/limit, not page/pageSize'). The tool description itself adds no parameter-level meaning, relying entirely on the rich schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'List video content (highlights, replays, press conferences).' It enumerates concrete content types and shows the return shape, clearly distinguishing it from sibling list tools like afl_content_text_list, afl_content_photo_list, and afl_content_promo_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by enumerating the covered content types (highlights, replays, press conferences) but never explicitly states when to use this tool versus alternatives such as afl_content_video_get, afl_live_video, or entain_video_channels. No exclusions or preferred-alternative guidance is provided, which is a gap given the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_keyserver_url_signingARead-onlyIdempotent
Sign an AFL HLS video URL for playback (returns a token-signed CDN URL).
Returns: {signedUrl} (anonymous tokens may return {code: KEYSERVER001, status: 401})
Auth: none needed.
Also answers this: cricketaustralia_streams, entain_video_channels, pointsbet_inplay_streaming.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The unsigned HLS .m3u8 URL to sign. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds valuable context beyond that: it mentions the return value {signedUrl}, potential 401 error for anonymous tokens, and explicitly states 'Auth: none needed.' This clearly discloses behavioral traits and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and includes useful return/auth info, but the line 'Also answers this: ...' is cryptic and not immediately clear, reducing overall conciseness. It could be tightened by removing or explaining that note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the main functionality, return value, auth requirements, and an error case. It is mostly complete, though it could benefit from explicit guidance on when to use it instead of sibling streaming tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single 'url' parameter as 'The unsigned HLS .m3u8 URL to sign.' The description adds minimal extra meaning (e.g., 'AFL HLS video URL'), so it does not significantly improve parameter semantics beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Sign an AFL HLS video URL for playback') and the resource (AFL HLS video URL), with a specific result (token-signed CDN URL). This distinguishes it from sibling streaming tools by focusing on the URL signing function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when an unsigned HLS URL needs signing for playback. However, there is no explicit when-to-use vs alternatives, and the line 'Also answers this: cricketaustralia_streams, entain_video_channels, pointsbet_inplay_streaming' is vague and does not clarify selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_ladders_getARead-onlyIdempotent
Competition ladder up to a comp season's current round.
Returns: {compSeason, round, ladders:[{entries:[{position, team, played, thisSeasonRecord}]}]}
Example: 2026 AFL ladder {"compSeasonId": 85}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| compSeasonId | Yes | Competition-season id (from afl_compseasons_list) — a season WITHIN a competition, not a calendar year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds 'Auth: none needed' and the return format, which are useful behavioral context beyond the annotations. It does not contradict annotations, and it clarifies that the data reflects up to the current round (i.e., changes over time).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, a return type line, a concrete example, and an auth note. Every sentence adds value and there is no redundant fluff. The example is particularly useful for demonstrating the parameter usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, the description is complete: it explains the purpose, provides the return shape, shows an example call, and states auth requirements. Given the strong annotations and schema coverage, no additional context is necessary. It fully equips an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage for the single parameter compSeasonId, with a thorough explanation (competition-season id, not calendar year, required). The description only shows an example value (85) without adding new semantics. Since the schema carries the full burden, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a competition ladder for a specific AFL competition season up to the current round. It uses a specific verb+resource, and the return structure is explicitly outlined. It distinguishes itself from sibling AFL tools by focusing on ladder data as opposed to matches, teams, or seasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need the current or in-progress ladder for a competition season. It does not explicitly list alternatives or exclusions, but it provides clear context through the example and the 'up to a comp season's current round' qualifier. No misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_live_audioARead-onlyIdempotent
Live AFL audio streams (empty when no game is live).
Returns: {pageInfo, content:[{id, name, channels:[...]}]}
Auth: none needed.
Also answers this: openf1_team_radio.
| Name | Required | Description | Default |
|---|---|---|---|
| round | No | Round number within the competition season. | |
| pageSize | No | Rows per page. | |
| compseason | No | Competition-season id (from afl_compseasons_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behaviors beyond the annotations: empty when no game is live, return structure with pageInfo and content containing id/name/channels, and no auth needed. This complements the readOnlyHint/idempotentHint annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose, followed by return format and auth. It avoids unnecessary detail, though the 'Also answers this: openf1_team_radio' line is an odd addition that somewhat disrupts the clean structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description provides essential context: live-only availability, empty result condition, return shape, and auth requirements. It doesn't explain the channels array contents, but the schema and return structure make it largely self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters (round, pageSize, compseason) with 100% description coverage, so the baseline of 3 applies. The tool description itself adds no additional parameter semantics beyond what's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing live AFL audio streams and notes that it returns empty when no game is live. This distinguishes it from siblings like afl_live_video (video vs audio), though it lacks an explicit verb and the 'Also answers this: openf1_team_radio' note adds a confusing cross-domain capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: it's for live AFL audio, with the caveat that it's empty when no game is live. However, there is no explicit 'when to use vs alternatives' guidance, and the note about openf1_team_radio is a routing hint rather than a clear usage policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_live_videoARead-onlyIdempotent
Live AFL video streams (empty when no game is live).
Returns: {pageInfo, content:[{id, name, channels:[{streamUrl, type:'LIVE'}]}]}
Auth: none needed.
Also answers this: cricketaustralia_streams, entain_video_channels, pointsbet_inplay_streaming.
| Name | Required | Description | Default |
|---|---|---|---|
| round | No | Round number within the competition season. | |
| pageSize | No | Rows per page. | |
| compseason | No | Competition-season id (from afl_compseasons_list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses that no authentication is needed, returns empty when no game is live, and provides the exact return structure. These are valuable behavioral facts not covered by annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the core purpose, followed by return structure, auth, and sibling alternatives. Every sentence adds value and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with well-documented parameters, the description covers all essential context: return shape, auth, empty behavior, and related tools. It is complete without needing an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter names and descriptions for round, pageSize, and compseason. The tool description does not add extra parameter semantics, so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides live AFL video streams, with the key behavior of returning empty when no game is live. It distinguishes itself from siblings like afl_live_audio by specifying video, and it even names alternative tools it can answer for (cricketaustralia_streams, entain_video_channels, pointsbet_inplay_streaming).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool (needing live AFL video streams) and notes the 'Also answers this' alternatives, which helps route mental queries. It does not explicitly state when not to use it, but the context is sufficient given the tool's simplicity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_matches_idmapARead-onlyIdempotent
Map every match providerId (CD_M*) to its integer id (~48 KB).
Returns: {entityType:'match', idMapResponse:{ids:{'CD_M20260141201':8139, ...}}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context beyond those hints: the payload size (~48 KB), the exact return structure, and the fact that no authentication is required. This is meaningful additional behavioral disclosure that helps set expectations for a read-only mapping operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, leading with the core purpose in the first line, then providing a clear return example and an auth note. Every sentence carries information, and the format is well-structured with 'Returns:' and 'Auth:' labels. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only mapping tool, the description is fully sufficient. It explains exactly what data is returned (including an example entry), the approximate size, and that no auth is needed. Combined with the annotations, the agent has all necessary context to invoke the tool correctly without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description is not required to explain parameter meanings. With no parameters, a baseline of 4 is appropriate. The description does refer to 'every match providerId', which clarifies the scope of the mapping and the format of the keys (CD_M*), effectively adding semantic clarity that the schema cannot provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps every match providerId (CD_M*) to its integer id, which is a specific verb (map), specific resource (match providerIds), and the target distinction from sibling idmap tools like afl_teams_idmap and afl_players_idmap. The return format is also illustrated with a concrete example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Although the description implies the tool should be used when a match providerId (CD_M*) needs to be converted to an integer id, it does not explicitly state when to use this versus alternative tools like afl_teams_idmap or afl_players_idmap, nor does it give any exclusions or prerequisite conditions. There is no direct usage guidance beyond the obvious mapping purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_matches_listARead-onlyIdempotent
List matches with filters (competition, season, round, team, status, date).
Returns: {meta:{pagination}, matches:[{id, providerId, round, home, away, venue, utcStartTime, status}]}
Example: Live + upcoming AFL matches from a date {"status": "L,U", "startDate": "", "competitionId": "1"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| sort | No | Sort direction. One of: asc, desc. | |
| status | No | Status CSV: U,L,C,P,B,S | |
| teamId | No | Team id(s), e.g. 11,9 | |
| endDate | No | Upper bound YYYY-MM-DD | |
| pageSize | No | Up to 300 | |
| startDate | No | Lower bound YYYY-MM-DD | |
| roundNumber | No | Round number within the competition season. | |
| compSeasonId | No | Comp season id | |
| competitionId | No | Competition id(s), comma-list ok |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral details: 'Auth: none needed', the exact return shape (meta.pagination and matches array with key fields), and an example combining status, startDate, and competitionId. These go beyond the annotations and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence function overview, a return shape, a concrete example, and an auth note. Every line earns its place with no redundancy or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 optional parameters and no output schema, the description compensates well by documenting the return shape, providing a realistic example, and stating auth requirements. It doesn't explain pagination defaults or sort behavior, but those are adequately covered by the schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all 10 parameters (100% coverage), so the description does not need to explain each parameter. The example shows a practical combination of status, startDate, and competitionId, which adds some usage context, but it does not add semantic meaning beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List matches with filters' which is a specific verb+resource and clearly indicates the tool's list/filter purpose. It distinguishes itself from siblings like afl_match_get (singular match) and afl_matches_idmap (id mapping) by emphasizing filters and listing the filter dimensions (competition, season, round, team, status, date).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Live + upcoming AFL matches from a date' provides concrete context for a common use case, implying when to use this tool (filtering matches by status/date). However, there is no explicit mention of alternatives or when not to use it, which keeps it just shy of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_match_getARead-onlyIdempotent
Get a single match by integer id (teams, venue, time, score when started).
Returns: {meta, matches:[{id, providerId, home, away, venue, utcStartTime, status, score?}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id (NOT providerId) Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context: score is only included 'when started', auth is 'none needed', and the matchId is explicitly 'NOT providerId'. These enrich understanding 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the verb+resource in the first sentence. It includes a clear return structure and auth note in two additional lines, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter tool, the description is fully complete: it explains the return payload, conditional score field, auth requirements, and the ID type distinction. The annotations cover safety and idempotency, so no additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already explains that matchId is the required URL path parameter and not providerId. The tool description adds no additional parameter semantics beyond restating 'integer id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single match by integer id' with specific contents (teams, venue, time, score). This distinguishes it from sibling list tools like afl_matches_list and afl_matches_idmap, and the return shape is explicitly outlined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool implies use when you have an integer match ID and need one match, but it does not explicitly contrast with alternatives such as afl_matches_list or afl_matches_idmap. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_player_getARead-onlyIdempotent
Get a single player by id (bio, draft, height/weight).
Returns: {players:[{id, providerId, firstName, surname, draftYear, debutYear, recruitedFrom}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Player id (from afl_players_list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: 'Auth: none needed' and the exact return structure, which is not included in structured fields. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with just two sentences covering purpose, return format, and auth. Every element is useful and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter lookup tool, the description covers essential aspects: what it does, the return shape, and authentication requirements. No output schema exists, but the inline return format compensates. The description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter schema fully explains playerId's source and requirement. The tool description adds no additional parameter semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a single player by id' and specifies the content areas (bio, draft, height/weight). This distinguishes it from sibling tools like afl_players_list, which are for bulk retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context for fetching a single player, and the parameter schema mentions 'from afl_players_list', indicating a prerequisite. However, it does not explicitly state when to use this tool over alternatives or provide exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_players_idmapARead-onlyIdempotent
Map every player providerId (CD_I*) to its integer id (~98 KB, 17k+).
Returns: {entityType:'player', idMapResponse:{ids:{...}}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, openWorldHint, and idempotentHint, so the description's additional details—payload size (~98 KB), auth requirement (none), and the exact return structure—are valuable. This goes beyond the annotations and helps the agent anticipate a potentially large response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by concise Returns and Auth lines. Every sentence serves a purpose without unnecessary detail, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description provides purpose, scale, return format, and auth. It is nearly complete, though it could mention whether the map is exhaustive or if there are any caveats about coverage of historical players. The 'every player' wording implies completeness, so this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% vacuously. The description adds meaning by specifying the output shape (`{entityType:'player', idMapResponse:{ids:{...}}}`), which is useful for parsing the response, even though no parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps every player providerId (CD_I*) to its integer id, using a specific verb ('Map') and resource ('every player providerId'). This distinguishes it from sibling tools like afl_players_list or afl_player_get, which likely provide player details rather than an ID mapping. The scale (~98 KB, 17k+) also adds precise context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for translating CD_I* provider IDs to integer IDs, which is clear from the context of sibling idmap tools (afl_teams_idmap, afl_matches_idmap). However, it does not explicitly state when to prefer this over alternatives or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_players_listARead-onlyIdempotent
List players (17k+ all-time catalogue).
Returns: {players:[{id, providerId, firstName, surname, dateOfBirth, draftYear, heightInCm}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints. The description adds useful context beyond annotations: 'Auth: none needed' and a concrete return structure. This gives agents confidence about access and expected response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: a one-line purpose statement, a return format block, and an auth note. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the description covers purpose, return shape, and auth. The '17k+ all-time catalogue' note hints at the need for pagination, and the schema provides the necessary parameters. It lacks explicit mention of ordering or limits, but these are not critical for a basic list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions for 'page' and 'pageSize'. The description adds no additional parameter guidance, but does not need to since the schema already documents them fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List players', a specific verb with the resource, and adds '17k+ all-time catalogue' to specify scope. This distinguishes it from single-player tools like afl_player_get and mapping tools like afl_players_idmap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the name and description: use this to get a bulk list of players. However, it does not explicitly mention when to use this over alternatives like afl_player_get or how to navigate pagination beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_rounds_listARead-onlyIdempotent
List rounds for a comp season (incl. byes, start/end times).
Returns: {rounds:[{id, providerId, roundNumber, abbreviation, byes, utcStartTime, utcEndTime}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Rows per page. | |
| roundNumber | No | Filter to a single round | |
| compSeasonId | Yes | Competition-season id (from afl_compseasons_list) — a season WITHIN a competition, not a calendar year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying the exact return fields (including byes and times) and stating 'Auth: none needed,' which gives useful context beyond the annotations. It does not describe pagination behavior, but the schema covers pageSize.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action, followed by the return format and auth note. Every sentence provides useful information without redundancy, making it easy to scan and process.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the annotations and schema, gives an agent enough context to invoke the tool correctly. It includes the return shape and a clear statement of what is returned, while safety and idempotency are covered by annotations. Minor gaps like pagination defaults are handled in the schema, making this a well-rounded description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with clear descriptions at 100% coverage, so the baseline is 3. The tool description adds no additional parameter meaning beyond the schema; it simply references 'a comp season,' which is already captured in the compSeasonId parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists rounds for a comp season, including byes and start/end times. It uses a specific verb and resource, and the name aligns. However, it does not explicitly distinguish it from sibling tools like afl_compseason_get, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by identifying the resource ('rounds for a comp season') but provides no guidance on when to prefer it over alternatives, nor any exclusions. The note about auth is minor and does not help with tool selection. It is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_season_getARead-onlyIdempotent
Get a single calendar-year season by id.
Returns: {meta, seasons:[{id, year}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| seasonId | Yes | Season id (from afl_seasons_list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds valuable context beyond annotations by specifying the return shape ('{meta, seasons:[{id, year}]}') and auth requirements ('Auth: none needed'). This is helpful and consistent 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short sentences covering purpose, return value, and auth. Every sentence adds essential information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with one parameter, the description is fully complete. It explains the resource, the return shape, and auth. The rich annotations and schema cover the remaining context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter, including a clear description and provenance ('from afl_seasons_list'). The tool description itself adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a single calendar-year season by id.' It uses a specific verb and resource, and distinguishes from siblings like afl_seasons_list (which lists all seasons) and afl_compseason_get (which gets competition seasons) by focusing on a calendar-year season.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the parameter description 'Season id (from afl_seasons_list)', indicating a workflow of listing seasons first. It clearly identifies the tool as a single-item fetch but does not explicitly mention when NOT to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_seasons_listBRead-onlyIdempotent
List calendar-year season records.
Returns: {meta, seasons:[{id, year}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds the return format and the fact that no auth is needed, which is useful but does not elaborate on pagination behavior or the contents of 'meta'. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with the core purpose in the first line and return/auth details in two short lines. Every sentence provides useful information, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description adequately covers the return shape and auth requirements. However, it leaves 'meta' undefined and does not mention any ordering or default behaviors, which are minor gaps given the low complexity and rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'page' and 'pageSize' both described clearly. The description adds no additional parameter information, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with resource 'calendar-year season records', and defines the return shape as {meta, seasons:[{id, year}]}. This clearly states what the tool does, though it does not explicitly contrast with sibling tools like afl_compseasons_list or afl_season_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g., afl_compseasons_list for competition-specific seasons or afl_season_get for a single season). The phrase 'calendar-year season records' provides an implicit hint, but no explicit usage context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_statspro_callARead-onlyIdempotent
Call any of the AFL StatsPro operations (api.afl.com.au/statspro/...). Requires the anonymous x-media-mis-token (minted automatically). Path params use provider IDs (CD_S*/CD_R*/CD_I*). Read afl://statspro/operations for the list.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating readOnlyHint, idempotentHint, and openWorldHint, the description adds useful context: the anonymous x-media-mis-token is minted automatically, path params use provider IDs (CD_S*/CD_R*/CD_I*), and it points to a catalogue resource. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. Every sentence provides distinct value: the API base path, token requirement, provider ID convention, catalogue pointer, and return type. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic dispatcher tool with high complexity, the description covers the essentials: what it calls, where to find the operation list, token requirements, and path parameter conventions. It does not describe error behavior or response schema, but the input schema and catalogue resource fill those gaps, and no output schema exists to require more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds specific guidance that path params use provider ID formats (CD_S*/CD_R*/CD_I*), and references the catalogue resource for discovering valid operation names, which enriches the parameter understanding beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it calls 'any of the AFL StatsPro operations' with the specific API base path, making the verb and resource explicit. It distinguishes itself from dedicated AFL tools (like afl_competition_get) by being a generic dispatcher, and directs users to a catalogue resource for operation names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage through 'Call any of the AFL StatsPro operations' and 'Read afl://statspro/operations for the list,' giving context on how to discover operations. However, it does not explicitly say when to use this tool instead of the many dedicated AFL sibling tools, nor does it mention exclusions or preferred alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_team_getARead-onlyIdempotent
Get a single team by id (incl. social/home-venue metadata).
Returns: {teams:[{id, providerId, name, club, teamType, metadata}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team id (e.g. 1 = Adelaide Crows) Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond those flags: 'Auth: none needed' and a concrete return shape '{teams:[...]}', which help the agent understand what to expect without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one sentence for purpose, one for return format, one for auth. Every sentence earns its place with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with one parameter, strong annotations, and no output schema, the description covers the essential aspects: purpose, return shape, and auth. It lacks explicit error behavior or field-level explanations, but these are not critical for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the teamId parameter is already well described with an example ('e.g. 1 = Adelaide Crows') and a URL path note. The description only echoes 'by id' without adding new meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single team by id, with a specific verb ('Get') and resource ('a single team by id'). It adds 'incl. social/home-venue metadata' to differentiate from list/mapping siblings like afl_teams_list and afl_teams_idmap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: use when you have a specific teamId and need a single team's details, including metadata. However, it does not explicitly name alternatives or exclusion cases (e.g., use afl_teams_list for multiple teams), so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_teams_idmapARead-onlyIdempotent
Map CD_T* team providerIds to integer aflapi ids (and vice versa).
Returns: {entityType:'team', idMapResponse:{ids:{'CD_T10':1, ...}}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and side effects. The description adds useful behavioral context beyond these annotations, including the return shape ('Returns: {entityType:'team', idMapResponse:{ids:{'CD_T10':1, ...}}}') and authentication requirements ('Auth: none needed'). This enriches the agent's understanding without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the main purpose is stated in the first sentence, followed by the return format and auth note. Every sentence provides distinct value with no redundant fluff, making it efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless ID mapping tool, the description is complete. It explains the bidirectional mapping, provides an example return structure, and states authentication requirements. The annotations and schema cover the rest, making the description sufficient for an agent to know when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and the description correctly implies no inputs are required. With no parameters to document, the baseline of 4 is appropriate; the description adds value by noting the tool takes no arguments, which is consistent with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Map CD_T* team providerIds to integer aflapi ids (and vice versa).' This identifies the specific resource (team provider IDs) and the operation (mapping to integer AFL API IDs), distinguishing it from sibling ID mapping tools like afl_matches_idmap and afl_players_idmap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a user needs to convert between CD_T* team provider IDs and integer aflapi IDs, but it does not explicitly state when to use this tool over alternatives or provide exclusion criteria. The intended use is clear from the purpose, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_teams_listARead-onlyIdempotent
List teams (150 incl. AFL men, AFLW, state leagues, historical).
Returns: {teams:[{id, providerId, name, abbreviation, nickname, club, teamType, metadata}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description does not need to repeat that. It adds useful context by stating 'Auth: none needed' and providing the return structure, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, covering purpose, scope, return shape, and auth in just two short sections. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description is complete: the schema documents pagination, annotations cover safety, and the description provides return shape and auth. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (page and pageSize) with defaults and descriptions at 100% coverage. The description adds no extra parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List teams' with a specific scope (150 incl. AFL men, AFLW, state leagues, historical), which distinguishes it from related team tools like afl_teams_idmap or afl_clubs_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as afl_teams_idmap or afl_clubs_list. The description only lists what the tool does and auth requirements, not when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_venue_getARead-onlyIdempotent
Get a single venue by id.
Returns: {venues:[{id, providerId, name, location, state, timezone}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| venueId | Yes | Venue id (from afl_venues_list). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the return structure '{venues:[{id, providerId, name, location, state, timezone}]}' and 'Auth: none needed', which are behavioral traits beyond the readOnlyHint/idempotentHint annotations. It does not disclose error cases or rate limits, but for a simple read tool, it is sufficient. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three short sentences covering purpose, return format, and auth. Every sentence adds information, with no filler or redundancy. Front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explicitly lists the return fields, making the output contract clear. With one well-documented parameter and annotations covering safety, this is complete for the tool's complexity. The auth note and return format fill the gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for the single parameter, including its source and URL path mention. The tool description adds no additional parameter semantics beyond restating 'by id', so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single venue by id' — a specific verb and resource. It distinguishes from the sibling afl_venues_list and other getters by focusing on a single venue. The return format is also included, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by matching the parameter description 'from afl_venues_list', indicating the venueId comes from a prior list call. There is no explicit alternative or exclusion, but for a simple get-by-id tool, this is clear enough context. It lacks explicit 'when not to use' guidance, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
afl_venues_listARead-onlyIdempotent
List venues (191) incl. location, state, timezone, landOwner.
Returns: {venues:[{id, providerId, name, location, state, timezone, landOwner}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds useful context: 'Auth: none needed' and the exact return structure `{venues:[{id, providerId, name, location, state, timezone, landOwner}]}`. This discloses the response shape and access requirements, adding value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: it leads with the core action, then provides the return shape and auth requirement in a structured format. Every sentence earns its place without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with optional pagination parameters, the description is largely complete: it states the resource, fields, return structure, and auth. It could optionally mention pagination behavior, but the schema already covers that. The absence of an output schema is mitigated by the inline return type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for both parameters (page: 'Zero-based page number.', pageSize: 'Rows per page.'). The description adds no parameter-specific information beyond what is in the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List venues (191) incl. location, state, timezone, landOwner.' The verb 'List' plus the resource 'venues' makes the purpose explicit. It also distinguishes from the sibling afl_venue_get by indicating this is a bulk list operation with specific fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like afl_venue_get. It only states 'Auth: none needed', which is not usage guidance. No mention of pagination or when the list is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_baseball_gamesARead-onlyIdempotent
Baseball games (MLB, NPB, KBO and others) by date or league.
Returns: {response:[{id, date, status, league, teams, scores:{home:{hits, errors, innings:{'1','2',…, extra}, total}, away:{…}}}]} — SHAPE FROM VENDOR DOCS. Innings are keyed by NUMBER-AS-STRING. For MLB itself, the keyless official mlb provider is deeper.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": "2024-07-04"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world, but the description adds critical behavioral context: the return shape is from vendor docs and unverified, innings are keyed by number-as-string, and the tool requires an API key. These disclosures go well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized but every part earns its place: purpose, return shape, caveat about unverified shape, example, and auth requirement. The return shape is lengthy but justifiable given there is no output schema. Could be slightly tighter, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, filtering, return shape, authentication, and an example, which is quite complete for a read-only tool with no output schema. It also highlights a key caveat about data reliability and points to the deeper official MLB provider. It lacks details on error handling or rate limits, but these are not critical for a simple query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description adds a concrete example ({"date": "2024-07-04"}) and reinforces that the tool filters by date or league, but it does not add new meaning to team, league, or season parameters beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Baseball games (MLB, NPB, KBO and others) by date or league.' It names specific leagues and the filter dimensions. It also differentiates this tool from the official `mlb` provider, making it distinguishable from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: for baseball games by date or league. It also provides an alternative recommendation by noting that the keyless official `mlb` provider offers deeper data for MLB. However, it does not explicitly enumerate exclusions or edge cases, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_basketball_gamesARead-onlyIdempotent
Basketball games worldwide (NBA, EuroLeague, NBL and many more) by date or league.
Returns: {response:[{id, date, status:{long, short}, league:{id, name, season}, teams:{home, away}, scores:{home:{quarter_1, quarter_2, quarter_3, quarter_4, over_time, total}, away:{…}}}]} — SHAPE FROM VENDOR DOCS. Note season is a '2023-2024' STRING here; the football host uses an integer year.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": "2024-01-15"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season as a SPAN for this sport, e.g. '2023-2024' — not a single year like football. | |
| timezone | No | IANA zone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints, but the description adds substantial behavioral context: the detailed return shape, the caveat that the shape is unverified and approximate, the season field being a string rather than integer, and the API key requirement. This exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long due to the return shape and caveats, but it is logically structured: purpose, return shape, verification warning, example, auth. Every sentence serves a purpose, though the return shape block could be considered verbose. It is concise for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only games listing tool, the description is quite complete: it explains purpose, parameters, return structure, auth, and even disclaims the unverified shape, compensating for the lack of an output schema. Minor gaps exist, such as behavior when no parameters are supplied, but overall it is well-rounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all five parameters with meaningful descriptions, so the baseline is 3. The description adds an example and reinforces the date/league query modes, but it does not materially extend beyond the schema's parameter definitions. No parameter explanation is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns basketball games worldwide from multiple leagues ('NBA, EuroLeague, NBL and many more') and highlights the two primary query dimensions ('by date or league'). This differentiates it from sibling tools like apisports_basketball_standings and other sports' games tools, even though a verb like 'list' is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete context for when to use the tool: to fetch basketball games by date or league, with an example date payload. It does not explicitly name alternatives or exclusion criteria (e.g., when not to use it vs. basketball standings), but the scope is unambiguous enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_basketball_standingsARead-onlyIdempotent
Basketball standings for a league and season.
Returns: {response:[[{position, team, league, group:{name}, games:{played, win:{total, percentage}, lose:{…}}, points:{for, against}, form}]]} — SHAPE FROM VENDOR DOCS. Double-nested like football's.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A league table {"league": 12, "season": "2023-2024"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One team's row. | |
| league | Yes | League id. | |
| season | Yes | Season span, e.g. '2023-2024'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a caveat that the return shape is from vendor docs and unverified, plus notes the auth requirement. Since annotations already declare read-only and idempotent hints, this description builds on them by adding a critical data-quality warning without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and front-loaded with the main purpose. The example, caveat, and auth note each serve a purpose, though the return shape snippet adds some verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only standings tool, the description covers purpose, parameters, auth, and return shape with a caveat. It does not document pagination or precise response behavior, but the annotations and simple nature make this adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all three parameters (team, league, season) with types and examples. The description provides a concrete example of league and season values but adds little semantic value beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes the tool as returning basketball standings for a league and season, which is a specific verb+resource. The basketball scope clearly distinguishes it from other standings tools, and the return shape example further clarifies its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to choose this over sibling standings tools like balldontlie_nba_standings or apisports_football_standings. The description implies usage for basketball data from API-Sports but lacks exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_fixturesARead-onlyIdempotent
Football fixtures and results by date, league or team. Give at least one filter.
Returns: {results, response:[{fixture:{id, date, timestamp, venue:{name, city}, status:{long, short, elapsed}}, league:{id, name, country, season, round}, teams:{home:{id, name, winner}, away:{…}}, goals:{home, away}, score:{halftime, fulltime, extratime, penalty}}]} — SHAPE FROM VENDOR DOCS. goals is the 90-minute score; score.penalty decides a shootout, so a cup tie needs both.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's fixtures {"date": "2024-08-17"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One fixture id. | |
| date | No | YYYY-MM-DD (all leagues that day). | |
| last | No | The N most recent finished fixtures. | |
| next | No | The N upcoming fixtures. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season starting year — REQUIRED whenever you pass `league` or `team`. | |
| status | No | Short status codes, e.g. NS, 1H, FT (comma-separated). | |
| timezone | No | IANA zone, e.g. Australia/Melbourne. Default is UTC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent. The description adds important context: authentication requirement ('needs your own key in API_SPORTS_KEY'), the unverified nature of the payload shape, and the domain nuance that `goals` is the 90-minute score while `score.penalty` decides shootouts. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and information-dense: purpose, return shape, caveat, example, and auth note. Each section earns its place, and the caveat about unverified vendor docs is crucial transparency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates with a detailed return shape and key semantics (penalty vs goals). It also explains the approximate nature of the shape. However, it does not mention combination rules (e.g., season required with league/team) or pagination, though the schema covers the season requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 9 parameters with descriptions (100% coverage), so baseline is 3. The description adds value by requiring 'at least one filter' (since all params are optional in schema) and provides a concrete example using the `date` parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Football fixtures and results by date, league or team', providing a specific resource and scope. It differentiates from sibling tools like apisports_football_leagues and apisports_football_standings by focusing on fixtures/results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Give at least one filter', which is a key usage constraint. The example shows a valid date filter call. It does not explicitly compare with alternatives, but the filter guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_fixture_statisticsARead-onlyIdempotent
Team match statistics for one fixture — shots, possession, corners, and expected goals where covered.
Returns: {response:[{team:{id, name}, statistics:[{type:'Shots on Goal'|'Ball Possession'|'expected_goals'|…, value}]}]} — SHAPE FROM VENDOR DOCS. NOTE this is LONG format keyed by a HUMAN-READABLE type string, and value is sometimes a string with a percent sign ('54%'). Do not assume a numeric type.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One fixture's team stats {"fixture": 1035037}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Only this team's column. | |
| fixture | Yes | Fixture id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, openWorld, idempotent), the description discloses the long-format return structure, potential string values with percent signs, the unverified nature of the vendor-documented shape, and the need for an API key. These warnings significantly help the agent handle unexpected payloads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, return shape, format caveat, verification warning, example, and auth requirement. It is compact yet information-dense, with the essential purpose front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (two params, one required), and the description covers the return format with an example, warns about data reliability, notes the optional team param's behavior, and clarifies auth. This is complete for its complexity, especially for a read-only, idempotent operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters well (fixture: 'Fixture id.', team: 'Only this team's column.'). The description adds an example using fixture but no new semantics beyond what the schema provides. Baseline 3 applies due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Team match statistics for one fixture — shots, possession, corners, and expected goals where covered.' This clearly states the tool's scope and distinguishes it from sibling tools like apisports_football_fixtures or apisports_football_predictions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly contextualizes when to use the tool: when team match statistics for a single fixture are needed. It does not explicitly name alternatives or exclusions, but its focused scope makes the use case unambiguous. The example input reinforces this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_h2hARead-onlyIdempotent
Every past meeting between two clubs.
Returns: {response:[{fixture, league, teams, goals, score}]} — same fixture shape as apisports_football_fixtures. SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Two clubs' history {"h2h": "33-34", "last": 10}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| h2h | Yes | Two team ids joined by a dash, e.g. '33-34'. | |
| last | No | Only the N most recent meetings. | |
| league | No | Restrict to one competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations stating read-only and idempotent behavior, the description discloses the return shape, warns that the shape is unverified from vendor docs and not tested against live data, and notes that the caller must supply their own API key. This is valuable context that helps an agent set expectations and handle potential surprises.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with distinct sections: the core purpose line, return shape, vendor caveat, example, and auth note. Each section earns its place with no fluff, and the structure front-loads the most important information for fast scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description provides the expected response shape, an illustrative example, and an honest caveat about its reliability. Combined with the annotations, this gives an agent sufficient context to call the tool and interpret results, making it complete for a read-only fixture-history endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with 100% coverage, so the description does not need to compensate. The example {'h2h': '33-34', 'last': 10} adds a concrete illustration but does not introduce semantically unique information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Every past meeting between two clubs,' which is a specific verb+resource statement that clearly defines the tool's purpose. It also distinguishes itself from sibling tools like apisports_football_fixtures by referencing 'same fixture shape,' which contextualizes the output while making the h2h specialization clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use case unambiguous ('Every past meeting between two clubs') and provides a concrete example for invoking the tool. It does not explicitly name alternatives or state when not to use it, but the purpose is clear enough that an agent can select it appropriately among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_leaguesARead-onlyIdempotent
Football leagues and cups worldwide, with the seasons available on your plan.
Returns: {response:[{league:{id, name, type:'League'|'Cup', logo}, country:{name, code, flag}, seasons:[{year, start, end, current, coverage:{fixtures:{events, lineups, statistics_fixtures}, standings, players, odds, predictions}}]}]} — SHAPE FROM VENDOR DOCS. coverage matters: it tells you which of the tools below will actually return anything for that league.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: English competitions {"country": "England"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One league id. | |
| season | No | Season starting year. FREE PLANS ARE RESTRICTED to a few older seasons. | |
| country | No | Country name, e.g. England. | |
| current | No | Only leagues whose season is running. One of: true, false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the need for an API key, warns that the returned shape is unverified and approximate, and explains the significance of coverage. It also notes plan restrictions via the schema, adding valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: purpose, return shape, caveat, example, auth. Every section adds necessary information without verbosity. The shape block is long but essential given no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool without an output schema, the description covers the return shape, coverage guidance, example usage, and auth requirements. It lacks pagination or rate-limit details, but these are not critical for this read-only discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the 4 parameters already have clear meanings. The description adds a concrete example with country and mentions 'FREE PLANS are restricted to a few older seasons' in the schema, but doesn't provide additional parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Football leagues and cups worldwide, with the seasons available on your plan.' This specifies the resource (leagues/cups) and scope, and distinguishes it from sibling tools like fixtures, standings, and teams by noting that coverage tells you which tools will return data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a discovery tool: 'coverage matters: it tells you which of the tools below will actually return anything for that league.' This provides context for when to use it before calling other apisports tools. However, it doesn't explicitly state exclusions or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_oddsARead-onlyIdempotent
Pre-match odds from many bookmakers for a fixture or league.
Returns: {response:[{fixture, league, update, bookmakers:[{id, name, bets:[{id, name:'Match Winner', values:[{value:'Home', odd:'1.85'}]}]}]}]} — SHAPE FROM VENDOR DOCS. ODDS ARE STRINGS, not numbers. For AU markets the direct providers here (sportsbet, tab, pointsbet) are deeper and live.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One fixture's odds {"fixture": 1035037}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| bet | No | One bet/market id. | |
| page | No | Paginated — check `paging.total`. | |
| league | No | League id (pair with season). | |
| season | No | Season starting year. | |
| fixture | No | One fixture id. | |
| bookmaker | No | One bookmaker id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses critical behavioral traits: the return shape is from vendor docs and unverified (no key held), odds are strings, and the actual payload should be inspected before relying on field names. This is honest and valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for return shape, caveat, example, and auth. It is a bit long, but every part adds necessary value, especially the unverified-shape warning. The front-loaded purpose is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey the return structure, which it does with an explicit shape example. It also covers auth, parameter usage via example, and the reliability caveat. This is complete for a read-only odds tool with an approximate vendor schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds an example using 'fixture' and explains the two main query modes (fixture or league), which enriches parameter understanding beyond the schema's per-field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Pre-match odds from many bookmakers for a fixture or league', which identifies both the resource and the scope. It differentiates from sibling tools by focusing on odds and pre-match, but lacks an explicit imperative verb like 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'For AU markets the direct providers here (sportsbet, tab, pointsbet) are deeper and live.' This names alternatives and the condition for preferring them over this tool, which is exactly the kind of when-to-use vs alternatives guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_playersARead-onlyIdempotent
Player season statistics for a team or league. season is required.
Returns: {paging:{current, total}, response:[{player:{id, name, age, nationality, height, weight, injured, photo}, statistics:[{team, league, games:{appearences, lineups, minutes, position, rating}, goals:{total, assists, conceded, saves}, shots, passes, tackles, duels, dribbles, fouls, cards, penalty}]}]} — SHAPE FROM VENDOR DOCS. statistics is a LIST — one entry per competition — so a player in a league and a cup has two.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A club's squad statistics {"team": 42, "season": 2023}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One player id. | |
| page | No | Results are paginated at 20 — check `paging.total`. | |
| team | No | Team id. | |
| league | No | League id. | |
| search | No | Name search (4+ characters); needs `team` or `league`. | |
| season | Yes | Season starting year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial value beyond these: it specifies the auth requirement (API_SPORTS_KEY), warns that the documented response shape is unverified and approximate, and explains that `statistics` is a list with one entry per competition. This is excellent behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: a one-sentence purpose, a detailed return shape, a caveat about unverified vendor documentation, a concrete example, and an auth note. Every sentence earns its place, and the critical caveat is clearly highlighted. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a comprehensive return shape including paging, a clear explanation of repeated entries, an example, and auth requirements. For a 6-parameter tool, this is more than sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with individual descriptions, so the baseline is 3. The description adds practical value by reinforcing that `season` is required and by presenting a concrete example (team:42, season:2023) that demonstrates how the parameters are used together. This lifts it above baseline but doesn't add deep semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Player season statistics for a team or league,' identifying the resource and scope. It distinguishes itself from sibling tools like apisports_football_teams (team info) and apisports_football_fixtures (match data) by focusing on player stats. A minor deduction for lacking an explicit verb like 'get' or 'list', though the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: when player season statistics are needed, filtered by team or league. It explicitly notes that `season` is required and provides a concrete example. It does not explicitly mention exclusions or alternatives, but the sibling tool names make the differentiation obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_predictionsARead-onlyIdempotent
The vendor's own model prediction for a fixture, with the comparison data behind it.
Returns: {response:[{predictions:{winner:{id, name, comment}, win_or_draw, under_over, goals:{home, away}, advice, percent:{home, draw, away}}, league, teams, comparison:{form, att, def, poisson_distribution, h2h, goals, total}, h2h:[…]}]} — SHAPE FROM VENDOR DOCS. percent values are STRINGS with a % sign. This is a vendor model, not a market price: compare it against squiggle-style model output, not against a bookmaker's line.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A fixture's prediction {"fixture": 1035037}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| fixture | Yes | Fixture id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial value beyond the annotations (readOnly, openWorld, idempotent). It warns that the return shape is from vendor docs and unverified, notes that percent values are strings with '%', explains the response structure, requires an API key, and explicitly states it's a vendor model rather than a market price. This is rich behavioral context that 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured: it starts with the core purpose, then presents the return shape, then notes caveats (unverified shape, string percent, auth), and an example. Each sentence earns its place; the front-loading of the purpose and the clear separation of the notes make it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only one parameter and no output schema, the description is quite complete: it provides a detailed return shape, a warning about its unverified nature, auth requirements, and an example. The only minor gap is that it doesn't describe error or empty-response behavior, but that's not essential for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'fixture' with a clear description, so baseline is 3. The description adds a concrete example input ('{
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'The vendor's own model prediction for a fixture, with the comparison data behind it.' This is a specific, distinct purpose that differentiates it from siblings like apisports_football_odds (market prices) and squiggle-style models, and it even explicitly contrasts it with a bookmaker's line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context on when to use this tool by clarifying it's a model prediction, not market price, and suggests comparing it against 'squiggle'-style model output. It lacks an explicit 'use this when' or 'don't use for X' statement, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_football_standingsARead-onlyIdempotent
League table. Both league and season are required.
Returns: {response:[{league:{id, name, standings:[[{rank, team:{id, name}, points, goalsDiff, group, form, status, description, all:{played, win, draw, lose, goals:{for, against}}, home:{…}, away:{…}}]]}}]} — SHAPE FROM VENDOR DOCS. NOTE the DOUBLE nesting: standings is a list OF TABLES (one per group in a group stage), each a list of rows.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Premier League table {"league": 39, "season": 2023}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Only this team's row. | |
| league | Yes | League id. | |
| season | Yes | Season starting year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds meaningful context by revealing the unverified return shape, explaining the double nesting of tables, and warning that field names should be treated as approximate. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief opening, a compact return-shape block, and clear notes. It is somewhat lengthy due to the detailed shape, but every section serves a purpose, and the caveat is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description thoroughly documents the return structure, including nested arrays and potential grouping. It also covers required parameters, an example, and auth requirements, making it fairly complete for a read-only standings tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully describes league, season, and team parameters. The description provides an example and repeats requiredness but doesn't add substantive new meaning beyond the schema's existing descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'League table' clearly identifies the resource and implies a read operation for football standings. It specifies required parameters and provides an example, but it doesn't use a verb like 'get' and doesn't explicitly differentiate from sibling standings tools such as pl_standings or laliga_standing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that both 'league' and 'season' are required, gives a concrete example, and mentions the need for an API key, providing clear usage context. However, it does not explicitly describe when to use this tool over alternatives 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.
apisports_football_teamsARead-onlyIdempotent
Clubs, by league/season, country, or name search.
Returns: {response:[{team:{id, name, code, country, founded, national, logo}, venue:{id, name, address, city, capacity, surface}}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Search a club {"search": "Arsenal"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One team id. | |
| league | No | League id (pair with season). | |
| search | No | Name search (3+ characters). | |
| season | No | Season starting year. | |
| country | No | Country name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide read-only, idempotent, and open-world hints, so the description doesn't need to restate those. The description adds valuable, non-obvious behavioral context: that the return shape is from vendor docs and unverified against a live response, and that an API key is required. This is beyond the annotations and helps set agent expectations about reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose statement, a return shape block, a caveat, an example, and an auth note. Every section earns its place and is easy to parse. It's not bloated but provides necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's no output schema, the description provides the full return shape and flags it as approximate. It also covers auth requirements and a usage example. For a read-only team-list tool with 5 parameters all described in the schema, this is complete and practical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters with descriptions (100% coverage), so the schema does the heavy lifting. The description adds examples and clarifies that 'search' is for names, but it doesn't add detail beyond the schema. Baseline 3 is appropriate since the schema is fully descriptive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves clubs/teams by league/season, country, or name search, which matches the tool name and distinguishes it from sibling tools like fixtures or standings. It also provides a concise summary of the return shape, reinforcing what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists the primary filter modes (league/season, country, name search) and gives an example, which helps an agent choose the right parameters. It doesn't explicitly contrast with sibling tools, but the name and description make it clear this is the teams endpoint among many apisports tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_formula1_racesARead-onlyIdempotent
Formula 1 races and sessions for a season.
Returns: {response:[{id, competition:{id, name, location}, circuit:{id, name}, season, type, laps:{current, total}, distance, timezone, date, status}]} — SHAPE FROM VENDOR DOCS. jolpicaf1 (keyless) covers F1 history back to 1950 and openf1 (keyless) covers live telemetry — prefer those unless you need this one key to span sports.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A season's races {"season": 2023}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| next | No | The N upcoming sessions. | |
| type | No | Session type, e.g. Race, Qualifying, '1st Practice'. | |
| season | No | Season year. | |
| competition | No | Grand Prix id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior. The description goes further by issuing a critical credibility warning: the response shape is 'from the vendor's documentation and has NOT been verified against a live response' and advises to 'treat it as approximate — inspect the actual payload.' It also discloses the auth requirement. These add meaningful context beyond what annotations provide, though it stops short of describing pagination or default parameter behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the main purpose ('Formula 1 races and sessions for a season'). It includes a return shape outline, alternative tool guidance, a caveat, an example, and auth note—all in a structured order. Slightly verbose due to the multiple caveats, but every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description provides a predicted response shape (albeit unverified), gives an example input, names alternatives, and notes auth requirements. It covers the essential aspects for a tool with 4 optional parameters, though it does not clarify the outcome when all parameters are omitted (e.g., does it return all races across all seasons?). Sufficiently complete for a user to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with each parameter ('next', 'type', 'season', 'competition') having a concise semantic definition. The description adds an example usage with `{"season": 2023}` and mentions 'races and sessions', but does not materially enhance the schema's parameter explanations. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Formula 1 races and sessions for a season', identifying the specific resource and scope. It distinguishes from sibling tools like jolpicaf1 and openf1 by explaining their different coverage (history/live telemetry) and the unique multi-sport key requirement, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names alternatives ('`jolpicaf1` (keyless) covers F1 history back to 1950 and `openf1` (keyless) covers live telemetry') and gives a clear directive: 'prefer those unless you need this one key to span sports.' This provides both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_handball_gamesARead-onlyIdempotent
Handball games (EHF Champions League, Bundesliga, LNH and others) by date or league.
Returns: {response:[{id, date, time, status, league, teams, scores:{home, away}, periods:{first, second}}]} — SHAPE FROM VENDOR DOCS. Handball scores run to 25-35 per side; a value under 10 usually means the match is still in the first half, not a low-scoring game.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": ""}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints, but the description adds substantial context: a detailed return shape, score interpretation guidance (handball scores run 25-35 and under 10 usually indicates first half), an explicit warning that the shape is unverified from live responses, and an auth requirement. This goes well beyond what annotations provide and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: the first sentence states the core purpose, followed by essential return shape, practical notes, a concrete example, and auth info. Every sentence provides value—no filler or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description takes on the burden of explaining return values and does so thoroughly with the response shape and field-level hints. It also covers score interpretation, unverified shape caveat, a usage example, and authentication. For a 4-parameter read-only sports data tool, this is complete and highly informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all four parameters (date, team, league, season). The description only adds an example for 'date' and mentions 'by date or league', which doesn't meaningfully extend the schema's parameter documentation. Baseline 3 is appropriate when the schema handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides handball games from specific leagues (EHF Champions League, Bundesliga, LNH and others) by date or league. It distinguishes itself from sibling sports game tools by naming the sport and leagues, and includes return shape details that remove ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use it (for handball games, filtered by date or league) with a concrete example. However, it does not explicitly mention alternatives or exclusionary guidance (e.g., 'for football use apisports_football_fixtures'), so it doesn't fully meet the 'when-not/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_hockey_gamesARead-onlyIdempotent
Ice-hockey games (NHL, KHL, SHL and others) by date or league.
Returns: {response:[{id, date, status, league, teams, scores:{home, away}, periods:{first, second, third, overtime, penalties}}]} — SHAPE FROM VENDOR DOCS. For the NHL itself the keyless official nhl provider is deeper and live.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": "2024-01-15"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds valuable behavioral context: the return shape is explicitly unverified and approximate, the user must supply their own API key, and the NHL provider alternative is noted as deeper/live (implying this provider may be less detailed). This goes beyond the annotations by disclosing reliability caveats and authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the primary purpose. It includes a return shape, a critical verification caveat, a concrete example, and an auth note—each sentence earns its place. It is concise without being terse, and the caveats are clearly separated. No irrelevant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a return shape (albeit tagged as approximate), an example, auth requirements, and a comparison with the NHL provider. This covers essential information for invoking the tool. However, it does not specify whether parameters are required (none are), how multiple parameters interact, or any pagination/limits, leaving some operational uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 4 parameters with brief descriptions (e.g., 'YYYY-MM-DD', 'Team id.'), achieving 100% schema coverage. The description adds an example for the `date` parameter and mentions 'by date or league', but does not resolve ambiguity about parameter combinations (e.g., can `team` and `league` be combined with `date`? Does `season` require `league`?). Thus it adds some value but does not fully compensate for potential combination confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Ice-hockey games (NHL, KHL, SHL and others) by date or league' which is a specific verb (retrieve/list) + clear resource (ice-hockey games) + scope (by date or league). It also distinguishes the tool from the official NHL provider by noting it is 'deeper and live' for the NHL itself, helping differentiate among similar sports tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit alternative for NHL data ('the keyless official `nhl` provider is deeper and live'), which serves as a when-not-to-use for NHL-specific queries. It also implies usage context via 'by date or league' and provides an example. However, it does not clarify when to use the `team` or `season` parameters or how they combine with date/league, leaving some usage ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_mma_fightsARead-onlyIdempotent
MMA fights (UFC and others) by date or season.
Returns: {response:[{id, date, slug, category, status, is_main, fighters:{first:{id, name, winner}, second:{…}}}]} — SHAPE FROM VENDOR DOCS. winner is null until the fight is resulted, and BOTH may be false on a draw or no-contest — do not infer the loser from one flag.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A card {"date": "2024-03-09"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One fight id. | |
| date | No | YYYY-MM-DD. | |
| season | No | Season year. | |
| category | No | Weight class. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses valuable behavioral traits: the winner field being null until resulted, both fighters possibly false on a draw/no-contest, and the unverified nature of the return shape from vendor docs. It also clearly states the auth key requirement, adding practical context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Returns, NOTE, Example, Auth) and includes only relevant caveats. It is not overly verbose, though the example card is minimal and could be slightly more illustrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by providing the return shape and important caveats about its reliability. It also mentions auth. However, it does not address potential interactions between the four optional parameters or pagination/limitations, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well-documented. The description adds only a minimal usage example (date string) but no deeper parameter semantics or nuances, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving MMA fights (UFC and others) by date or season, which is specific enough. However, it lacks an explicit action verb (e.g., 'list' or 'get'), and it does not explicitly distinguish from sibling tools, though the MMA resource is unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for MMA fight queries when filtering by date or season, but it does not mention alternatives or when-not-to-use scenarios. It also does not explain how multiple parameters interact (e.g., whether id and date can be combined). The auth requirement is mentioned, but that is a prerequisite, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_nfl_gamesARead-onlyIdempotent
American-football games (NFL, NCAA) by date, season or team.
Returns: {response:[{game:{id, stage, week, date:{date, time, timezone}, status}, league, teams, scores:{home:{quarter_1,…, total}, away:{…}}}]} — SHAPE FROM VENDOR DOCS. NOTE this host wraps the identity under game, unlike the basketball and hockey hosts.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week of NFL {"league": 1, "season": 2023}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id (1 = NFL, 2 = NCAA). | |
| season | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond that: the response shape is unverified from vendor docs and should be treated as approximate, the identity is wrapped under `game`, and an API key is required. This is a meaningful disclosure of uncertainty and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-line purpose, followed by a code-block response shape, relevant caveats, an example, and auth note. Each section earns its place; while somewhat long, it is well-structured and avoids redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed (though unverified) response shape, an example query, and explicit caveats plus auth requirements. It lacks pagination and error details, but the core information an agent needs to invoke and parse this tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter meanings are already documented. The description adds a concrete example ({"league": 1, "season": 2023}) demonstrating how to filter for a week of NFL games, which clarifies the use of league and season together beyond the basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches American-football games (NFL, NCAA) by date, season, or team. The resource and verb are explicit, and it naturally distinguishes from soccer or basketball siblings by naming the sport and leagues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an implied usage context (NFL/NCAA games) and a helpful example query, but no explicit comparison to alternative NFL/NCAA data sources like balldontlie_nfl_games or sportsdataio_nfl_scores. The note about the basketball/hockey hosts only addresses response shape, not when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_rugby_gamesARead-onlyIdempotent
Rugby games (Six Nations, Super Rugby, NRL, Premiership) by date or league. The catalogue's only rugby-union coverage.
Returns: {response:[{id, date, time, status, league, teams, scores:{home, away}, periods:{first, second, overtime}}]} — SHAPE FROM VENDOR DOCS. For the NRL specifically, the keyless nrl provider is official and deeper.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": "2024-03-09"}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: the return shape is disclosed with field names, but explicitly warned as 'from the vendor's documentation' and 'NOT been verified against a live response,' advising to inspect actual payload. It also discloses the auth requirement (API_SPORTS_KEY) and provides an example payload shape. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately structured with sections: summary, return shape, NRL note, warning, example, and auth. It is somewhat lengthy but every section earns its place, especially given the important caveat about unverified response shape. The first sentence is a clear front-loaded purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a return shape, a usage example, auth instructions, and a caution about unverified data. It does not describe pagination, sorting, or detailed error behavior, but for a simple read-only query tool with 4 optional parameters, the coverage is solid. The warning about unverified shape is a notable transparency addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces usage of 'date' and 'league' via the phrase 'by date or league' and a date example, but adds little for 'team' or 'season' beyond the schema's terse descriptions. It does not clarify how parameters combine or whether they are mutually exclusive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it retrieves rugby games by date or league, listing specific competitions (Six Nations, Super Rugby, NRL, Premiership). It also distinguishes itself with 'The catalogue's only rugby-union coverage,' making it unique among siblings. The action is implicit but unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: 'The catalogue's only rugby-union coverage' implies when to use it. It explicitly advises using the 'keyless nrl provider' for NRL-specific needs, which is a when-not-to-use guidance. It also includes a concrete example, but does not exhaustively enumerate alternatives or state exact conditions for choosing between this and similar sports tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_statusARead-onlyIdempotent
Your subscription and how much of today's quota is left. Costs no quota — call it first when something returns empty.
Returns: {response:{account:{firstname, lastname, email}, subscription:{plan, end, active}, requests:{current, limit_day}}} — SHAPE FROM VENDOR DOCS. requests.current vs limit_day is the check worth making before blaming the data.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Quota check
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, openWorld, and idempotent. The description adds valuable context beyond that: it costs no quota, the response shape is from vendor docs and unverified, and it warns to inspect the actual payload. It also discloses auth requirements (API_SPORTS_KEY). This is meaningful supplemental information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, return shape, caveat, example, and auth. It is longer than strictly necessary, but every part adds value—especially the reliability warning about the unverified shape. It is front-loaded with the core purpose and usage guidance, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by detailing the return shape, including nested fields, and noting it's approximate. It also covers auth, quota cost, and when to use it. This is a complete picture for a no-parameter tool, enabling correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is complete by default. The description doesn't need to explain parameter semantics, and it doesn't; it appropriately focuses on the response and usage. The baseline of 4 for zero parameters applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns subscription details and remaining daily quota, which is a distinct purpose from the many data-fetching siblings. It identifies the resource (API Sports account status) and the intent is unmistakable, even without an explicit verb like 'get' or 'check'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Costs no quota — call it first when something returns empty.' This tells the agent exactly when to invoke this tool, and the 'Example: Quota check' reinforces the diagnostic use case. While it doesn't name alternatives, none are relevant for a quota check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apisports_volleyball_gamesARead-onlyIdempotent
Volleyball games (Italian SuperLega, Polish PlusLiga, CEV and others) by date or league.
Returns: {response:[{id, date, status, league, teams, scores:{home, away}, periods:{first, second, third, fourth, fifth}}]} — SHAPE FROM VENDOR DOCS. scores is SETS WON (best of 5), not points; the per-set point totals are in periods. Reading scores as points is the usual mistake.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": ""}
Auth: needs your own key in API_SPORTS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| team | No | Team id. | |
| league | No | League id. | |
| season | No | Season — a SPAN string for this sport, e.g. '2023-2024'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/idempotent annotations by disclosing the critical semantic trap (scores is sets won, not points), warning that the return shape is unverified from vendor docs, and stating auth requirements. This is exceptional context that prevents misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with labeled sections (Returns, NOTE, Example, Auth). Every sentence adds value, including the trap warning and the vendor-verification caveat. Front-loaded with the most important usage information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully compensates by providing the return shape, field meanings, the sets-vs-points trap, and an authentication requirement. It also flags the unverified nature, which is crucial for an agent. Complete for a read-only sports data tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with descriptions (100% coverage). Description adds a usage example and mentions 'by date or league' but does not elaborate on team or season beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States clearly it returns volleyball games, specifying leagues (Italian SuperLega, Polish PlusLiga, CEV) and the filtering dimensions (by date or league). This distinguishes it from sibling apisports_* tools for other sports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context: use for volleyball games by date or league, with a concrete example for date. Does not explicitly exclude other tools, but the sport-specific scope is obvious given siblings. Lacks explicit 'when not to use' guidance, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_eventsARead-onlyIdempotent
Event types the API covers (ATP singles, WTA doubles, ITF, …).
Returns: {success:1, result:[{event_type_key, event_type_type:'Atp Singles'}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Event types {"method": "get_events"}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_events |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior. The description adds valuable context: it requires the user's own API key, and it explicitly warns that the response shape is from vendor docs and unverified against a live response, advising the agent to inspect the actual payload before relying on field names. This is strong 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose, response shape, reliability warning, example, and auth. It is slightly longer than necessary but every section adds distinct value, especially the unverified shape warning and the example call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter and no output schema, the description is highly complete. It provides the expected return shape, an example invocation, auth requirements, and a reliability caveat. The agent has all necessary context to invoke the tool correctly and interpret the response cautiously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'method', is fully described in the schema with 'Leave as-is.' and a default of 'get_events'. The description reinforces this by showing the example '{"method": "get_events"}' and the auth requirement, adding practical instruction beyond the schema's concise note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Event types the API covers' with examples like ATP singles and WTA doubles, and the returned shape confirms it lists event types. It lacks an explicit verb like 'list' or 'get', but the response shape and example make the purpose clear. It is distinguishable from siblings like apitennis_fixtures and apitennis_livescore which cover different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this tool when you need the event types the API supports, and the example shows the method to use. However, it does not explicitly state when to use this over sibling tools like apitennis_fixtures 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.
apitennis_fixturesARead-onlyIdempotent
Matches in a date range, with scores and set-by-set detail once played.
Returns: {success:1, result:[{event_key, event_date, event_time, event_first_player, first_player_key, event_second_player, second_player_key, event_final_result:'2 - 0', event_status, tournament_name, tournament_round, scores:[{score_first, score_second, score_set}], pointbypoint:[…]}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's matches {"method": "get_fixtures", "date_start": "2025-01-20", "date_stop": "2025-01-20"}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_fixtures |
| date_stop | Yes | YYYY-MM-DD. | |
| date_start | Yes | YYYY-MM-DD. | |
| player_key | No | Restrict to one player. | |
| event_type_key | No | Restrict to one event type. | |
| tournament_key | No | Restrict to one tournament. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly, openWorld, and idempotent annotations, the description discloses that the output shape is from vendor documentation and has not been verified against a live response, urging caution. It also mentions the authentication requirement. These are valuable behavioral details not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-sentence purpose, followed by the return shape, a critical caveat, an example, and auth note. Each section earns its place, though the return shape block adds length. It is well-structured and information-dense without being rambling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description provides a detailed (if unverified) return shape, which is essential for agents. It includes an example call and auth requirements. It does not explain optional filter parameters, but the schema covers those. The description is reasonably complete for a read-only data fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes all parameters with 100% coverage, including formats and defaults. The description adds only a usage example that mirrors the schema. Since schema coverage is high, the description's added semantics are minimal, aligning with the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving matches in a date range with scores and set-by-set details once played. It uses a specific verb and resource, making the purpose clear. However, it does not explicitly differentiate from sibling tools like apitennis_events or apitennis_livescore, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: for matches within a specific date range. It includes an example showing a one-day query. There are no explicit exclusions or alternative tool recommendations, but the context is sufficient for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_h2hARead-onlyIdempotent
Head-to-head history between two players, plus each one's recent form.
Returns: {success:1, result:{H2H:[{event_key, event_date, event_first_player, event_second_player, event_final_result, tournament_name}], firstPlayerResults:[…], secondPlayerResults:[…]}} — SHAPE FROM VENDOR DOCS. Note result here is an OBJECT, not a list like the other methods.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Two players' H2H {"method": "get_H2H", "first_player_key": 1905, "second_player_key": 1903}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is (note the capital H2H). | get_H2H |
| first_player_key | Yes | First player key. | |
| second_player_key | Yes | Second player key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description significantly extends beyond the annotations. It discloses that the return shape is from vendor docs and unverified, warns to treat it as approximate, highlights that `result` is an object rather than a list like other methods, and specifies the authentication requirement. These are valuable behavioral traits not covered by readOnlyHint, openWorldHint, or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, return shape, caveat, example, and auth note. It is slightly verbose due to the vendor-doc warning, but every sentence serves a purpose. The important caveats are prominently placed, and the overall length is acceptable for the amount of critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description provides a rough return structure with caveats about its accuracy, which is essential. It also includes an example and auth requirements. However, it does not cover error cases, pagination, or data freshness beyond the unverified note, which would make it more complete. For a relatively simple tool, it is fairly thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage with descriptions for method, first_player_key, and second_player_key. The description adds an example with concrete key values and notes the default method, but does not significantly deepen understanding beyond the schema. Thus the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Head-to-head history between two players, plus each one's recent form,' which is a specific verb+resource combination. It clearly distinguishes itself from sibling tools like apitennis_events, apitennis_fixtures, etc., by specifying the H2H nature and the inclusion of recent form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (H2H history) but does not explicitly state when to use this tool vs alternatives. It provides an example but no direct comparison or exclusion of other tennis tools. The purpose clarity partially compensates, but explicit guidance on when to choose this over siblings is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_livescoreARead-onlyIdempotent
Matches in progress right now, with live scores.
Returns: {success:1, result:[{event_key, event_first_player, event_second_player, event_game_result, event_serve, event_status, scores:[…]}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Live matches {"method": "get_livescore"}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_livescore |
| event_type_key | No | Restrict to one event type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable caveats: the return shape is from vendor docs and unverified, and authentication requires the user's own API key. These go beyond the structured annotations and build trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief purpose statement, return shape example, a necessary caveat, and auth note. Every sentence is purposeful, though slightly long due to the safety note. It earns a 4, not 5, due to the extra caveat length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description compensates by providing an approximate return structure and explicitly warning it may be inaccurate. It also includes auth requirements and a usage example. This covers the core context without over-explaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds an example showing the default method, but does not provide further meaning beyond the schema's 'Leave as-is' and 'Restrict to one event type' for the two parameters. No additional semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides live scores for matches in progress, using the specific verb 'with live scores' and resource 'matches in progress right now'. It does not explicitly differentiate from sibling tools like apitennis_fixtures, but the phrase 'in progress right now' establishes the live-match scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the agent needs current live scores for in-progress matches, giving clear context. It does not provide explicit exclusions or name alternatives, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_playersARead-onlyIdempotent
One player's profile and recent results.
Returns: {success:1, result:[{player_key, player_name, player_country, player_bday, player_logo, stats:[{season, type, rank, titles, matches_won, matches_lost, hard_won, clay_won, grass_won}]}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One player {"method": "get_players", "player_key": 1905}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_players |
| player_key | Yes | Player key (from fixtures or standings). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the annotations by disclosing that the return shape is unverified from vendor docs and should be treated as approximate. It also mentions the need for an API key in API_TENNIS_KEY. These caveats help set expectations for reliability. The description does not contradict the readOnlyHint or idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then includes the return shape, an important caveat, an example, and auth instructions. The return shape is lengthy but necessary because there is no output schema. No words are wasted, and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-player lookup with two parameters, the description covers the key aspects: return shape, example usage, auth requirements, and a warning about unverified data. Since there is no output schema, including the approximate shape is helpful. It does not mention error handling or edge cases, but that is not critical for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters: method 'Leave as-is' and player_key 'Player key (from fixtures or standings).' The description adds an example invocation but no new parameter semantics beyond what the schema provides. Given the high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One player's profile and recent results' which identifies both the resource (player) and the scope (single player, profile + results). The example uses method 'get_players' and a player_key, reinforcing the tool's purpose. This distinguishes it from sibling tools like apitennis_standings or apitennis_h2h.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when you need a single player's profile and recent results, and the example clarifies the required parameters. However, it does not explicitly mention alternatives or when not to use it, such as noting that apitennis_standings would be better for rankings. This is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_standingsARead-onlyIdempotent
ATP or WTA rankings.
Returns: {success:1, result:[{place, player, player_key, league, movement, country, points}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: ATP rankings {"method": "get_standings", "event_type": "ATP"}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_standings |
| event_type | No | Tour. One of: ATP, WTA. | ATP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds valuable context by disclosing the unverified return shape and the need for a personal API key, which goes beyond annotations. This extra transparency is useful for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with line breaks separating the summary, return shape, caveat, example, and auth note. Each section earns its place, though the unverified-shape note is a bit verbose. It is concise enough for the complexity involved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by providing the expected return shape and a clear caveat. Annotations cover safety and idempotency, and the schema covers parameters completely. The only gap is explicit alternative guidance, but for a simple rankings tool the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters documented ('Leave as-is' and 'Tour. One of: ATP, WTA'). The description adds an example showing exact usage, but this is redundant with the schema. No additional parameter semantics (e.g., formats, behavior) are provided, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'ATP or WTA rankings,' which clearly identifies the resource and scope. It distinguishes from other sports' standings tools, though it does not explicitly differentiate from the sibling wta_rankings tool. The absence of an explicit verb (e.g., 'Get') is minor since the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example call and auth requirement, which gives practical usage context. However, it does not explicitly state when to use this tool versus alternatives (e.g., wta_rankings or other standings tools). Usage is implied by the ATP/WTA scope but lacks explicit exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apitennis_tournamentsARead-onlyIdempotent
Tournaments, optionally for one event type.
Returns: {success:1, result:[{tournament_key, tournament_name, event_type_key, event_type_type}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All tournaments {"method": "get_tournaments"}
Auth: needs your own key in API_TENNIS_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Leave as-is. | get_tournaments |
| event_type_key | No | Restrict to one event type (from apitennis_events). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses the auth requirement (API_TENNIS_KEY) and explicitly warns that the return shape is from vendor docs and unverified against a live response, advising the agent to inspect the actual payload. This is valuable behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and front-loaded with the purpose, then includes return shape, caveat, example, and auth. The only minor inefficiency is the example duplicating the schema default, but overall every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple list operation with no output schema, so the description correctly provides the return shape and a caveat about data reliability. It covers auth and example usage. It doesn't explain field semantics, but those are straightforward from names, and the unverified shape warning is appropriately included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 applies. The description adds little beyond the schema: it restates the optional event type filter and shows an example with method 'get_tournaments'. The schema already documents both parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Tournaments' and mentions the optional event type filter, making the purpose reasonably clear. However, it lacks a specific verb like 'list' or 'get' and does not differentiate from sibling tools such as wta_tournaments. The example method 'get_tournaments' clarifies intent but is not part of the core purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example of fetching all tournaments and notes the optional event_type_key filter, with a cross-reference to apitennis_events in the schema. It does not explicitly state when not to use this tool or name alternatives, but the context is clear for a simple list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_epl_gamesARead-onlyIdempotent
Premier League fixtures and results.
Returns: {data:[{id, week, kickoff, home_team, away_team, home_score, away_score, status, ground}], meta:{next_cursor}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A season's fixtures {"season": 2023}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | Matchweek. | |
| cursor | No | Cursor from the previous page. | |
| season | No | Season start year. | |
| per_page | No | Page size. | |
| team_ids | No | Team ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the readOnly/idempotent annotations: it explicitly warns that the return shape is unverified and approximate, provides the auth key requirement, and advises inspecting the actual payload. This is honest and helpful, raising the score above baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (Returns, NOTE, Example, Auth) and no filler. The caveat about unverified shape is necessary but makes it slightly longer than the minimum, hence a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The return shape and auth requirements are covered, which is important given there is no output schema. However, the description does not explain behaviors such as what happens when no filters are provided, how filters combine, or the meaning of the openWorldHint. These gaps leave the tool contextually incomplete for a 5-parameter API.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter individually described, so the baseline is 3. The description contributes only an example using 'season' and a mention of pagination via 'next_cursor', but does not add substantial meaning beyond what the schema already explains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Premier League fixtures and results' is a clear, specific statement of purpose with a verb and resource. It distinguishes this tool from sibling balldontlie tools for other leagues (NBA, NFL, MLB) and other Premier League data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given for when to use this tool versus alternatives. The description does not mention any exclusions or compare with the many pl_* sibling tools, so the agent must infer usage solely from the name and the phrase 'Premier League fixtures and results.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_epl_teamsARead-onlyIdempotent
Premier League clubs for a season.
Returns: {data:[{id, name, short_name, abbr, city, stadium}]} — SHAPE FROM VENDOR DOCS. The keyless official premierleague provider is deeper for the EPL.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: EPL clubs {"season": 2023}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season start year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/idempotent/openWorld hints. The description adds a significant caveat: the return shape is from vendor docs and unverified, urging the agent to inspect the actual payload. It also discloses the auth key requirement, going beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear Returns/NOTE/Example/Auth sections; each part earns its place. Slightly verbose, but the note is valuable and the organization aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter and no output schema, the description provides the expected return shape, an example, auth instructions, and a warning about unverified data. It is complete for a simple tool, with the caveat itself acting as a transparency feature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `season` parameter is already fully described in the schema with 100% coverage. The description adds an example value (2023) but no deeper semantics beyond what the schema provides, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Premier League clubs for a season'—clear resource and scope, though it lacks an explicit verb like 'list' or 'get'. It doesn't explicitly distinguish from sibling pl_* team tools, but the return shape and provider reference differentiate it implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions 'The keyless official premierleague provider is deeper for the EPL'—giving a comparative cue about an alternative. However, it doesn't explicitly state when to choose this tool over siblings or when to prefer the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_mlb_gamesARead-onlyIdempotent
MLB games by date, season or team. (For MLB alone, the keyless official mlb provider is far deeper.)
Returns: {data:[{id, date, season, postseason, home_team_score, away_team_score, home_team, away_team, venue, status}], meta:{next_cursor}} — SHAPE FROM VENDOR DOCS. NOTE: away_team here, but visitor_team on the NBA and NFL paths. The shape is NOT uniform across sports.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One date's games {"dates": ["2024-07-04"]}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| dates | No | YYYY-MM-DD. | |
| cursor | No | Cursor from the previous page. | |
| seasons | No | Season years. | |
| per_page | No | Page size. | |
| team_ids | No | Team ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, and idempotentHint. The description adds important context: it warns that the response shape is from vendor docs and has NOT been verified, advising users to inspect the actual payload. It also highlights a notable inconsistency: `away_team` here, but `visitor_team` on NBA/NFL paths. These caveats go beyond annotations and provide critical behavioral guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise and packs a lot of essential caveats into a short space. It clearly separates the main action, the return shape, the warning about unverified shape, the example, and auth note. Slightly dense for an AI agent but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a moderate complexity (5 optional params, no output schema). The description covers key aspects: the known response shape, example usage, critical field-name inconsistencies, and the fact that the shape is unverified. The main gap is that it doesn't describe cursor pagination usage, but the schema does have a cursor parameter. Overall, fairly complete for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines each parameter. The description adds minimal extra semantics beyond stating 'date, season or team' as the main filters, which maps to the parameters. It doesn't elaborate on values or combinations, but the schema covers the basics, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches 'MLB games by date, season or team', which is a specific verb+resource+scope. It also distinguishes itself from the alternative `mlb` provider by noting the official `mlb` provider is 'far deeper', which helps a user choose between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool vs the official `mlb` provider: 'For MLB alone, the keyless official `mlb` provider is far deeper.' This gives clear guidance on when to prefer an alternative. It also notes the requirements for a key (BALLDONTLIE_API_KEY) and provides an example query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_gamesARead-onlyIdempotent
NBA games by date, season or team.
Returns: {data:[{id, date, season, status, period, time, postseason, home_team_score, visitor_team_score, home_team:{…}, visitor_team:{…}}], meta:{next_cursor}} — SHAPE FROM VENDOR DOCS. Note the away side is visitor_team, not away_team.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One date's games {"dates": ["2024-01-15"]}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| dates | No | Specific dates, YYYY-MM-DD. | |
| cursor | No | Cursor from the previous page. | |
| seasons | No | Season START years — the 2023-24 season is 2023. | |
| per_page | No | Page size (max 100). | |
| team_ids | No | Team ids. | |
| postseason | No | true = playoffs only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context: the exact return shape, the pitfall that the away team is 'visitor_team' not 'away_team', a clear warning that the shape is unverified and should be inspected, and the need for an API key. This goes beyond the annotations and helps the agent avoid misinterpreting payloads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into distinct sections (what it does, return shape, caveats, example, auth). Each sentence serves a purpose, and the necessary vendor-doc warnings are included without being overly verbose. Slightly longer than ideal, but the content justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description effectively provides the return shape and warns about its unverified nature. It also covers authentication and gives a usage example. However, it does not explain pagination behavior (e.g., how to use 'cursor' with 'meta.next_cursor') or whether filters can be combined, leaving some gaps for a complex data-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds a concrete example for the 'dates' parameter and clarifies the intended usage of 'season' and 'team' conceptually, enhancing the schema's factual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'NBA games by date, season or team', identifying the resource (NBA games) and the main filter dimensions. It does not explicitly differentiate from sibling tools like apisports_basketball_games or sportsdataio_nba_games_by_date, but the provider-specific name and scope make it unambiguous enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any mention of when not to use it. The example shows a simple date query, which implies usage, but the description lacks any comparative direction among the many NBA games tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_playersARead-onlyIdempotent
NBA players, searchable by name.
Returns: {data:[{id, first_name, last_name, position, height, weight, jersey_number, college, country, draft_year, draft_round, draft_number, team:{…}}], meta:{next_cursor, per_page}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Search a player {"search": "curry"}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | From `meta.next_cursor` of the previous page — this API has no page numbers. | |
| search | No | Partial first or last name. | |
| per_page | No | Page size (max 100). | |
| team_ids | No | Restrict to team ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the response shape is from vendor docs and unverified, advises inspecting the actual payload, and notes that a personal API key (BALLDONTLIE_API_KEY) is required. These details go beyond the readOnly/openWorld/idempotent annotations, providing important reliability and authentication context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose, return shape, caveat, example, auth. Each section earns its place with no filler. The only minor issue is the inclusion of a detailed return shape, which is useful but somewhat lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search/resource tool with no output schema, the description provides the approximate return shape, pagination fields, an example, auth requirements, and a verification caveat. While it could mention error handling or rate limits, the provided details are sufficient for the tool's apparent complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters (cursor, search, per_page, team_ids). The description adds a concrete usage example ({"search": "curry"}) but doesn't explain parameter semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'NBA players, searchable by name' clearly identifies the tool as providing NBA player data, distinguishing it from sibling balldontlie tools for teams, games, stats, etc. The example 'Search a player' implies an action, even though there's no explicit verb like 'list' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving NBA player data by name, but does not explicitly contrast with alternatives like balldontlie_nba_teams or other siblings. There's no 'use this when' or 'instead of' guidance, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_season_averagesARead-onlyIdempotent
Season averages for specific NBA players.
Returns: {data:[{player_id, season, games_played, min, pts, reb, ast, stl, blk, turnover, fg_pct, fg3_pct, ft_pct}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A player's season {"season": 2023, "player_ids": ["115"]}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season start year. | |
| player_ids | Yes | Player ids — this endpoint will not return a whole league. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds critical behavioral caveats: the response shape is from vendor docs and unverified, the payload should be inspected before trusting field names, and authentication requires a personal BALLDONTLIE_API_KEY. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is multi-paragraph but every section earns its place: purpose, return shape, critical unverified-shape note, example, and auth requirement. It is front-loaded with the primary function and avoids fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides an approximate return shape, an example input, and auth info, making it adequately complete for a read-only stats endpoint. The explicit caveat that the shape is unverified appropriately manages expectations given the lack of live verification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description provides a concrete example ('season': 2023, 'player_ids': ['115']) and reiterates the specificity of player_ids, but does not add substantive semantic detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns season averages for specific NBA players, which differentiates it from sibling tools like balldontlie_nba_teams or balldontlie_nba_games. The lack of an explicit verb (e.g., 'Get') is minor since the noun phrase strongly implies a retrieval operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for targeted player queries via 'specific NBA players,' and the schema reinforces this by stating the endpoint 'will not return a whole league.' However, no explicit alternatives or when-not-to-use guidance is provided, leaving the agent to infer context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_standingsARead-onlyIdempotent
NBA standings for a season.
Returns: {data:[{team:{…}, conference_record, conference_rank, division_record, division_rank, wins, losses, home_record, road_record, season}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A season's standings {"season": 2023}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season start year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the requirement of a BALLDONTLIE_API_KEY and warns that the return shape is unverified from vendor docs, providing useful operational context beyond what annotations supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections (Returns, Note, Example, Auth) and contains only relevant details. It is slightly verbose due to the return shape block, but each part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with good annotations, the description covers the return shape (though unverified), an example, and auth. It lacks detail on supported seasons and exact field semantics, but is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes season as 'Season start year' (100% coverage). The description adds an example with season=2023 but no additional semantic detail such as supported year ranges or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'NBA standings for a season,' clearly identifying the resource (NBA standings) and the scope (season-based). It does not use an explicit verb like 'get' or 'retrieve,' and it does not differentiate from other standings tools among siblings, so it's clear but not fully distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when standings for an NBA season are needed, with an example showing season=2023. However, it provides no guidance on when to choose this balldontlie tool over other standings tools like apisports_basketball_standings or nba_standings, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_statsARead-onlyIdempotent
Per-player, per-game NBA box-score lines.
Returns: {data:[{id, min:'34:12', fgm, fga, fg_pct, fg3m, fg3a, ftm, fta, oreb, dreb, reb, ast, stl, blk, turnover, pf, pts, player:{…}, team:{…}, game:{…}}], meta:{next_cursor}} — SHAPE FROM VENDOR DOCS. min is a 'MM:SS' STRING, not a number.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A player's game lines {"player_ids": ["115"], "seasons": ["2023"]}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| dates | No | YYYY-MM-DD. | |
| cursor | No | Cursor from the previous page. | |
| seasons | No | Season start years. | |
| game_ids | No | Game ids. | |
| per_page | No | Page size (max 100). | |
| player_ids | No | Player ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds substantial context beyond that: the full response shape with field names, the specific gotcha that `min` is a 'MM:SS' string not a number, an honest warning that the shape is unverified vendor documentation and should be inspected against a live payload, and the auth requirement for BALLDONTLIE_API_KEY. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by a dense but useful return-shape block, a crucial unverified-data caveat, an example, and an auth note. It is longer than minimal descriptions, but every section earns its place given the lack of an output schema and the need to warn about payload reliability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden of explaining return values: it provides a detailed data shape, explicitly flags the unverified nature of that shape, covers the min field type quirk, gives an example invocation, and states auth requirements. This is complete for a read-only data-fetching tool with a well-documented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with each of the 6 parameters already described (dates, cursor, seasons, game_ids, per_page, player_ids). The description adds marginal value via the example showing player_ids and seasons used together and the return-shape note linking cursor to meta.next_cursor, but the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Per-player, per-game NBA box-score lines' — a specific resource (NBA box-score lines) with clear per-player/per-game scoping. This distinguishes it from sibling balldontlie tools like balldontlie_nba_games, balldontlie_nba_players, balldontlie_nba_season_averages, and balldontlie_nba_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use via the purpose statement and a concrete example query ({"player_ids": ["115"], "seasons": ["2023"]}), which implicitly shows how to filter for a player's game lines. However, it does not explicitly name alternatives or state when not to use this tool versus sibling balldontlie tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nba_teamsARead-onlyIdempotent
All 30 NBA franchises with conference and division.
Returns: {data:[{id, conference, division, city, name, full_name, abbreviation}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every NBA team
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: it warns that the response shape is unverified from vendor docs and that an API key is required. This goes beyond the annotations to inform the agent about data reliability and auth dependencies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the main purpose, followed by the return shape, a reliability note, example, and auth. Each sentence serves a clear purpose, and there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless list tool with no output schema, the description provides a complete picture: the exact team list, fields, authentication requirement, and a caution about unverified data. It even includes an example, making it fully self-contained 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to explain any. The baseline for no parameters is 4, and the description still adds context about the required API key, which is relevant. It fully covers what is needed to invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific resource (NBA franchises) and the scope (all 30 teams with conference and division). It also lists the exact fields returned, distinguishing it from sibling tools like balldontlie_nba_players or balldontlie_nba_games.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an example ('Every NBA team') which implies when to use the tool, but it does not explicitly state when to use it over alternatives or provide exclusions. The usage context is clear but implicit, so a score of 3 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balldontlie_nfl_gamesARead-onlyIdempotent
NFL games by season, week or team.
Returns: {data:[{id, visitor_team_score, home_team_score, season, postseason, status, date, week, home_team, visitor_team}], meta:{next_cursor}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A season's games {"seasons": ["2023"]}
Auth: needs your own key in BALLDONTLIE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | No | Week numbers. | |
| cursor | No | Cursor from the previous page. | |
| seasons | No | Season years. | |
| per_page | No | Page size. | |
| team_ids | No | Team ids. | |
| postseason | No | true = playoffs only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing the approximate, unverified return shape ('has NOT been verified against a live response') and the auth requirement (BALLDONTLIE_API_KEY). It also lists the specific fields the agent can expect. This is meaningful context not present in the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by the return shape, a critical caveat, an example, and auth info. Every sentence serves a purpose with no redundancy. The structure (purpose → shape → note → example → auth) is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 optional parameters, no output schema, and read-only annotations, the description covers the essential return fields, provides a usage example, and transparently notes the shape is unverified. It lacks explicit pagination loop instructions, but the presence of 'meta.next_cursor' and the cursor parameter in the schema mitigate that gap. The auth note is also included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a concrete example showing 'seasons' as an array of year strings, which clarifies usage. However, it doesn't explain interactions between filters (e.g., combining season and week) or add details about cursor pagination beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'NFL games by season, week or team,' which clearly identifies the resource (NFL games) and the main filtering dimensions. It lacks an explicit verb like 'retrieve' or 'list,' but the intent is unambiguous. It distinguishes itself from siblings by the sport, though it doesn't explicitly contrast with similar NFL tools from other providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'A season's games' and filter options imply typical usage, but the description does not explicitly say when to prefer this tool over alternatives like apisports_nfl_games or sportsdataio_nfl_scores. No exclusions or when-not-to-use guidance is given, leaving the agent to infer the tool's niche from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_cashoutBRead-onlyIdempotent
Cash-out availability for one or more markets.
Returns: [{marketId, cashout, partial}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key (leave default). | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| marketIds | Yes | Comma-separated market ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is clear. The description adds useful context with 'Auth: none needed' and the exact return shape, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with four short lines covering purpose, return format, and auth. Every sentence earns its place with zero fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only endpoint, the description covers the essential aspects: what it does, what it returns, and authentication. The lack of an output schema is compensated by the inline return specification. The only minor gap is that input format for marketIds could be clearer given the array/string ambiguity, but the schema handles the parameter definitions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the parameters. The description itself does not add param-level detail. Note the schema's marketIds type is array but its description says 'comma-separated', a potential confusion, but that is a schema issue, not a description gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides cash-out availability for one or more markets, and the inline return format specifies the output fields. It effectively distinguishes this from sibling Betfair tools which focus on other data like scores or market prices, though it lacks an explicit verb like 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. The phrase 'for one or more markets' is the only scope hint, but there is no mention of selecting this over other Betfair market data tools or any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_event_detailsBRead-onlyIdempotent
In-play event details (event name, competition, primary market, runners, start time) for one or more events.
Returns: [{eventId, eventTypeId, marketId, marketName, eventName, competitionName, numberOfRunners, countryCode, startTime}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key. | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| locale | No | Locale. | en |
| eventIds | Yes | Comma-separated event ids. | |
| regionCode | No | Region (NZAUS for AU/NZ). | NZAUS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context by specifying the exact return shape and that no auth is needed, but does not disclose potential pitfalls like event unavailability or rate limits. This is acceptable given the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose statement, a return shape definition, and an auth note. Every sentence contributes useful information, though the return list is somewhat lengthy. It avoids unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description helpfully specifies the return fields and format. However, it does not mention how this tool relates to sibling tools or any prerequisites. For a simple read-only tool with good annotations and schema coverage, this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all five parameters, including defaults and meanings. The description does not add extra parameter semantics beyond what the schema already provides. The note about 'one or more events' is implied by the array type of eventIds, so no additional value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (event details) and lists the included fields (event name, competition, primary market, runners, start time). It is specific enough to distinguish from broadly named siblings like betfair_scores or betfair_market_prices, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus related siblings such as betfair_markets_by_event or betfair_scores. The 'In-play' qualifier implies a use case but there is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_event_timelineARead-onlyIdempotent
Live timeline + running score/state for one in-play event.
Returns: {eventId, eventTypeId, score:{home:{name, score, numberOfYellowCards, ...}, away:{...}}, timeElapsed, ...}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key. | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| locale | No | Locale. | en |
| eventId | Yes | Single event id. | |
| regionCode | No | Region. | NZAUS |
| productType | No | Product type. | EXCHANGE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds valuable detail beyond annotations by showing the return shape (nested score, timeElapsed) and stating 'Auth: none needed'. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose in the first line, return example in the second, and auth in the third. Every part contributes useful information with no wasted words. The multiline return sample is structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 params, 100% schema coverage, no output schema, but with readOnly/idempotent annotations), the description covers purpose, return shape, and auth. It does not mention rate limits or error cases, but for a straightforward read-only tool, this is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover all 6 parameters (100% coverage), including eventId as 'Single event id'. The description's mention of 'one in-play event' aligns with the schema but adds no deeper parameter semantics or new constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Live timeline + running score/state for one in-play event', specifying the resource and singular scope. It differentiates from sibling tools like betfair_event_timelines by focusing on a single event, but lacks an explicit verb like 'Get' and does not name alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one in-play event' implies when to use the tool, but there is no explicit guidance on when not to use it or which alternative to choose. Sibling tools such as betfair_scores or betfair_event_details exist but are not referenced, 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.
betfair_event_timelinesARead-onlyIdempotent
Live timelines + running scores for several in-play events at once (batch).
Returns: [{eventId, eventTypeId, score:{home:{name, score, halfTimeScore, fullTimeScore}, away:{...}}}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key. | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| locale | No | Locale. | en |
| eventIds | Yes | Comma-separated event ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the security profile is covered. The description adds useful context beyond annotations: the return format (a top-level array with nested score structure) and 'Auth: none needed,' which are valuable for an agent. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, a return format snippet, and an auth note. Every sentence provides unique value with no redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by explicitly listing the return shape. It covers the essential aspects: what data is returned, that it is a top-level array, and that auth is not needed. For a simple batch read tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with parameters already documented. The description's reference to 'several ... at once' aligns with the eventIds array parameter but adds no additional syntax or constraints beyond what the schema provides. Thus baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Live timelines + running scores for several in-play events at once (batch).' This specifies the verb (returns live timelines/scores), resource (in-play events), and scope (several at once), distinguishing it from the singular sibling tool betfair_event_timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the batch use case clear ('several in-play events at once'), implying it is for when you need multiple timelines in one call. It does not explicitly mention alternatives or exclusions, but the batch context is sufficient for an agent to select it over the singular variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_market_pricesBRead-onlyIdempotent
Exchange back/lay prices + state for one or more markets (the core odds feed).
Returns: {currencyCode, eventTypes:[{eventTypeId, eventNodes:[{eventId, event:{eventName, countryCode, openDate}, marketNodes:[{marketId, state:{inplay, status}, description, runners:[{...prices: back/lay}]}]}]}]}
Example: Price two markets {"marketIds": "1.258654642,1.258653584"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key (leave default). | nzIFcwyWhrlwYMrh |
| alt | No | Response format (leave json). | json |
| types | No | Which data sections to include (CSV). | MARKET_STATE,MARKET_RATES,MARKET_DESCRIPTION,EVENT,RUNNER_DESCRIPTION,RUNNER_STATE,RUNNER_EXCHANGE_PRICES_BEST,RUNNER_METADATA,MARKET_LINE_RANGE_INFO |
| locale | No | Locale. | en |
| marketIds | Yes | Comma-separated market ids, e.g. "1.258654642,1.258653584". | |
| rollupLimit | No | Price-ladder depth to roll up. | |
| rollupModel | No | Roll-up model (STAKE / MANAGED_LIABILITY / NONE). | STAKE |
| currencyCode | No | Currency for prices/volumes. | AUD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent. The description adds that no auth is needed and shows the full return structure, but doesn't mention rate limits or error behavior. With annotations, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Includes a compact summary, return structure, example, and auth note without excess. The return structure is verbose but useful given no output schema. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides return shape, example, and auth requirement, covering the essentials for a read-only data fetch. Does not explain pagination or caveats, but for a simple price feed with full schema descriptions, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but the description's example shows marketIds as a comma-separated string while the schema declares it as an array—a contradictory signal. This could mislead the agent into passing the wrong type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns exchange back/lay prices and market state for one or more markets, positioning it as the core odds feed. Distinguishes from siblings like betfair_scores or betfair_event_details through its focus on prices/state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage as the core odds feed suggests primary use for odds data, but no explicit when/when-not or alternative tool names. The example illustrates invocation but doesn't provide decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_markets_by_eventARead-onlyIdempotent
Market STRUCTURE for an event (market ids, names, runners) — probed live 2026-07-06: this route STRIPS exchange prices (runners come back without the exchange block) and 400s on multi-id batches. For prices, feed the market ids into betfair_market_prices; for bulk market-id discovery, betfair_navigation with attachments=MENU,EVENT,MARKET returns 1000+ MARKET nodes per event type in one call.
Returns: {currencyCode, eventTypes:[{eventNodes:[{eventId, event:{eventName}, marketNodes:[{marketId, description:{marketType}, state, runners:[{...prices}]}]}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key (leave default). | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| types | No | Which data sections to include (CSV). | MARKET_STATE,MARKET_RATES,MARKET_DESCRIPTION,EVENT,RUNNER_DESCRIPTION,RUNNER_STATE,RUNNER_EXCHANGE_PRICES_BEST,RUNNER_METADATA,MARKET_LINE_RANGE_INFO |
| locale | No | Locale. | en |
| eventIds | Yes | Event ids, e.g. 35652256 (from betfair_navigation EVENT nodes). Prefer ONE id per call — multi-id batches return 400. | |
| rollupLimit | No | Price-ladder depth to roll up. | |
| rollupModel | No | Roll-up model. | STAKE |
| currencyCode | No | Currency for prices/volumes. | AUD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description reveals critical behavior: the route 'STRIPS exchange prices (runners come back without the exchange block)' and '400s on multi-id batches'. Also notes 'Auth: none needed' and provides a probed date, adding confidence and specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and key limitations, followed by a concise Returns block and Auth line. Every sentence adds value: alternatives, error behavior, and response shape. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 params but only 1 required, the description fully covers selection and invocation: how to obtain eventIds, what to expect in the response (explicit Returns structure), and how it fits with sibling tools. The absence of an output schema is compensated by the Returns block.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enhances this by clarifying the eventIds source ('from betfair_navigation EVENT nodes') and emphasizing the one-id-per-call constraint. It also warns that despite the types default including RUNNER_EXCHANGE_PRICES_BEST, exchange prices are stripped anyway.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Market STRUCTURE for an event (market ids, names, runners)'. It uses a specific verb and resource, and explicitly differentiates from siblings by directing users to betfair_market_prices for prices and betfair_navigation for bulk discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: tells users to use this tool for market structure, not for prices (pointing to betfair_market_prices) nor for bulk discovery (pointing to betfair_navigation). Also warns against multi-id batches ('400s on multi-id batches') and advises preferring one event id per call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_scoresARead-onlyIdempotent
Live scores for one or more in-play events (per-sport score detail).
Returns: [{eventId, eventTypeId, score:{home:{name, score, ...}, away:{...}}}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key. | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| locale | No | Locale. | en |
| eventIds | Yes | Comma-separated event ids, e.g. 35676887. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral details: the return structure (top-level array with eventId, eventTypeId, score object) and the fact that no authentication is required. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one purpose sentence, a return type snippet, and an auth note. Every part adds value, and the structure is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent lookup tool with full schema coverage and no output schema, the description provides sufficient context: it states what events it covers, gives the return shape, and notes auth requirements. It could mention pagination or rate limits, but these are not critical for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters (_ak, alt, locale, eventIds). The description's phrase 'one or more in-play events' aligns with eventIds but adds no new parameter-specific semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Live scores for one or more in-play events (per-sport score detail)'. It uses a specific resource and scope, and the mention of 'per-sport score detail' distinguishes it from sibling tools like betfair_scores_broadcast and betfair_event_timelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes this is for 'in-play events', giving clear context for when to use it. It does not name alternative tools or exclusions, but the use case is unambiguous given the sibling set (e.g., betfair_scores_broadcast for broadcast feeds).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betfair_scores_broadcastARead-onlyIdempotent
Live scores plus broadcast/streaming availability for one or more events.
Returns: [{eventId, startTime, state:{score:{...}}, broadcast:{...}}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| _ak | No | Public web app key. | nzIFcwyWhrlwYMrh |
| alt | No | Response format. | json |
| locale | No | Locale. | en |
| eventIds | Yes | Comma-separated event ids. | |
| regionCode | No | Region. | NZAUS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context by specifying the return array structure ({eventId, startTime, state:{score}, broadcast}) and stating 'Auth: none needed.' This goes beyond simply restating the annotations, though it stops short of describing edge cases like missing events or broadcast data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise lines: a one-sentence purpose, a return shape example, and an auth note. No wasted words, front-loaded with the most important information, and each sentence adds unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates reasonably by giving a return shape example. It also covers auth. However, it doesn't mention what sports/leagues are covered, how to obtain eventIds, or the meaning of the nested score/broadcast objects. Given the tool's moderate complexity, it's mostly complete but leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with clear descriptions for all five parameters (e.g., eventIds as 'Comma-separated event ids', regionCode as 'Region'). The description's phrase 'one or more events' reinforces the eventIds parameter but doesn't add new meaning beyond the schema. Since the schema does the heavy lifting, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Live scores plus broadcast/streaming availability' for events, which is specific enough to distinguish from the sibling betfair_scores (scores-only). The return shape further clarifies the resource. However, it lacks an explicit verb and does not name any sibling alternative, so it doesn't fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: you'd call this when you need scores and broadcast info for specific events. But there's no explicit statement of when to use this versus betfair_scores, afl_broadcast_events, or other related tools, and no exclusions or prerequisites. This is adequate but not explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_all_promotionsARead-onlyIdempotent
All visible promotions (name, description, dates).
Returns: {Promotions:[{Id, PromotionId, Name, Description, PromotionStartDate}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds the specific return format and explicitly states 'Auth: none needed', providing useful context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, containing only essential information: the scope of results, the fields returned, the return type, and authentication requirements. Every sentence serves a purpose without redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless read-only tool, the description is complete. It includes the return structure (crucial since no output schema exists), the scope, and the auth requirement. Combined with the annotations, it gives an agent sufficient understanding to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the schema, so the baseline is 4. The description reinforces the lack of filters by stating 'All visible promotions', which implies a broad unfiltered query, adding value for understanding the parameterless interface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all visible promotions with fields like name, description, and dates. The tool name 'betr_all_promotions' reinforces the all-inclusive scope, and the return structure is explicitly given, which distinguishes it from narrower promotion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as betr_promotions or pointsbet_promotions. The description only states what it does, with no context about typical use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_event_typesARead-onlyIdempotent
All event types (sports + racing) with event counts and SGM availability.
Returns: {Items:[{EventTypeId, EventTypeDesc, EventCount, HasSameGameMulti, MasterEventTypeId}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by stating 'Auth: none needed' and providing the return structure with field names. While annotations already indicate read-only and idempotent behavior, the additional auth and return format details enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and front-loaded with the core purpose. The Returns and Auth lines are additional useful details, and every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter lookup tool, this description is complete. It states what is included, the return field structure, and auth requirements. Annotations provide safety hints, and no output schema exists, so the included return description compensates well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so schema coverage is vacuously 100%. Baseline for 0 params is 4, and description does not need to add parameter semantics. It does describe the output fields, which is helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides all event types (sports + racing) with event counts and SGM availability. It uses a specific resource ('event types') and scope, distinguishing it from sibling tools like betr_master_category or betr_sports_category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. There is no mention of alternatives or exclusions, though the simplicity of a no-parameter lookup tool makes the use case somewhat self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_fav4ARead-onlyIdempotent
Featured 'Fav 4' upcoming races for a race-type filter.
Returns: {Items:[{EventId, MasterEventId, Venue, RaceNumber, BettingCloseTimeUtc, TimeToJump}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| EventTypeFilter | No | Race-type filter (7 = all racing). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context: 'Auth: none needed' and the exact return structure. It does not contradict annotations and provides extra behavioral details (return fields) that annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear one-line purpose followed by the return shape and auth requirement. Every sentence provides distinct information, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only list tool with one optional parameter. The schema fully describes the parameter, and the description provides the return structure in lieu of an output schema. It also covers auth, making the tool's behavior sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter EventTypeFilter with description 'Race-type filter (7 = all racing)' (100% coverage). The description's phrase 'for a race-type filter' adds 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('Featured 'Fav 4' upcoming races') with a scoping parameter ('for a race-type filter'). It clearly distinguishes from sibling tools like betr_next5_races and betr_todays_races by focusing on the 'Fav 4' subset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving featured Fav 4 races by race type, but does not explicitly state when to use this tool versus alternatives such as betr_next5_races or betr_todays_races. There are no when-not-to-use instructions or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_featured_racingARead-onlyIdempotent
Editorially featured racing events (carousel order, promo titles).
Returns: {ContentfulFeaturedEvent:[{EventOrder, EventID, EventName, PromotionTitle}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context about the return shape and the editorial/promotional nature, but does not explain ordering guarantees or how carousel order is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then gives the return shape and auth requirement. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with strong annotations, the description provides enough detail: it states the data source context, the exact return fields, and auth. No output schema exists, so the inline return type fulfills that need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the schema already fully describes the input space. The description correctly omits parameter details, earning the baseline for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as returning editorially featured racing events with carousel order and promotion titles, which clarifies the resource. It is distinct from sibling racing tools in mentioning editorial curation, though it lacks an explicit 'get/list' verb phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like betr_todays_races or pointsbet_racing_featured is provided. The only usage-related note is 'Auth: none needed,' which is not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_grouped_racecardARead-onlyIdempotent
All meetings + their races for a day offset, grouped by code.
Returns: {Thoroughbred:[[{EventId, Venue, CountryCode, RaceNumber, AdvertisedStartTime, HasFixedMarkets}]], Greyhounds:[...], Trots:[...]}
Example: Today's meetings {"DaysToRace": 0}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| DaysToRace | No | Day offset: 0 today, 1 tomorrow, -1 yesterday, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent behavior. The description adds useful context beyond annotations by detailing the return shape (grouped by Thoroughbred/Greyhounds/Trots with fields), providing an example, and noting that no auth is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and compact: a one-sentence purpose, a return type definition, an example, and an auth note. Every part adds value with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing the full return structure and an example, making the tool's behavior clear. It could mention edge cases like empty meetings or timezone handling, but for this simple day-offset tool it is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes DaysToRace with offset semantics, and the description does not add new parameter meaning beyond a usage example. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'all meetings + their races for a day offset, grouped by code,' with a specific return structure. This distinguishes it from sibling tools like betr_next5_races or betr_race by emphasizing the grouped, day-level scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or mention of alternatives. The description implies use for day-level grouped racecards, but it does not contrast with similar tools like betr_todays_races or entain_racing_racecard, leaving selection guidance missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_market_moversARead-onlyIdempotent
Racing market movers — runners whose fixed prices are shortening/drifting.
Returns: {Items:[{EventId, EventName, Venue, RaceNumber, SecondsToJump, AdvertisedStartTime}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is clear. The description adds the return structure and explicitly states 'Auth: none needed', which is useful beyond the annotations. It doesn't contradict annotations and provides concrete output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line explaining the purpose and one line with the return structure. Every word earns its place, and key facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only tool with strong annotations and a return schema described inline, this is fully complete. The description covers what it returns and authentication requirements, leaving no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema is empty with 100% coverage. Baseline for zero parameters is 4; the description doesn't need to explain parameters since there are none. It correctly focuses on output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'Racing market movers' — runners whose fixed prices are shortening/drifting. This is a specific, actionable purpose with a clear resource (racing market movers) and distinguishes itself from siblings like betr_race or betr_race_flucs by focusing on price movements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: if you need racing market movers, use this tool. However, it does not explicitly state when to use this versus alternatives like betr_race_flucs or betr_next5_races, nor does it mention any exclusions or context where it's not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_master_categoryARead-onlyIdempotent
Master categories (competitions) for one event type, optionally with levelled markets.
Returns: {EventTypeDesc, EventTypeId, MasterCategories:[{MasterCategoryId, MasterCategory, Categories:[{CategoryId, CategoryName}]}]}
Example: Basketball competitions {"EventTypeId": 107}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| EventTypeId | Yes | Event type id (e.g. 107 Basketball, 1 Racing). | |
| EventClassCode | No | Optional class filter, e.g. "FEATURERACE" for racing. | |
| WithLevelledMarkets | No | Include levelled markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds meaningful context beyond annotations: it explicitly states 'Auth: none needed' and provides the exact return shape. It does not contradict annotations and covers the key behavioral aspects relevant for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, a Returns block, and a brief example. Every sentence adds value, no redundancy, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the lack of an output schema, the Returns block fully documents the nested response structure, and the example clarifies usage. Combined with complete parameter schemas and annotations, the description provides everything an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds a concrete example using EventTypeId 107 and mentions 'optionally with levelled markets', but does not add significant semantics for EventClassCode or WithLevelledMarkets beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides master categories for an event type, optionally with levelled markets, and includes a return structure. It is clear but does not use a specific verb like 'get' or 'list' and does not explicitly differentiate from closely related siblings such as betr_master_event or betr_sports_category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The example shows a valid parameter (EventTypeId 107) but does not provide context such as 'use this for top-level categories' or 'prefer this over betr_sports_category when...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_master_eventARead-onlyIdempotent
One sport match's markets by master event id — a market GROUP per call (Events[].Outcomes[] with prices; GroupLinks names the other groups: totals, lines, race-to, periods).
Returns: {MasterEvent:{MasterEventId, MasterEventName, CategoryId, MinAdvertisedStartTime, IsLive, IsOpenForBetting}, Events:[{EventId, EventName, Outcomes:[{OutcomeName, Price, MarketTypeCode, MarketDesc, Points}]}], GroupLinks:[{GroupTypeCode, GroupName}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| GroupTypeCode | No | Market group to return, from the default response's GroupLinks (e.g. "G25" Popular, "G26" Totals, "G175" Race to). Omit for the default (popular) group. | |
| MasterEventId | Yes | Master event (match) id, e.g. 2095084 (from a category / SGM feed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context: 'Auth: none needed,' the full response structure, and the fact that each call returns only one market group. This goes beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, starting with the core purpose, followed by a compact return schema, and ending with auth info. The Returns block is somewhat detailed but valuable given no output schema, and every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the inline Returns block fully specifies the response shape, and the description covers the input source, group selection, and auth. It omits deep field semantics but is complete for a straightforward read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters well. The description adds minimal extra parameter context (e.g., how MasterEventId is obtained and that GroupLinks drives follow-up calls), but the schema carries the main load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving one sport match's markets by master event ID, with a specific market-group-per-call design. It distinguishes itself from siblings by emphasizing the GroupLinks mechanism and the nested Events[].Outcomes[] structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context on when to use the tool (with a master event ID from a category/SGM feed) and how to navigate market groups (optional GroupTypeCode, default group). It lacks explicit exclusions or naming of alternative sibling tools, but the usage context is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_next5_racesARead-onlyIdempotent
Next races about to jump, with time-to-jump, for a race-type + country filter.
Returns: {Items:[{Race:{EventId, Venue, RaceNo, AdvertisedStartTime, StateCode}, TimeToJump, SecondsToJump, EventType}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| CountryFilter | No | Country filter (0 = all). | |
| EventTypeFilter | No | Race-type filter (7 = all racing; 1 thoroughbred, etc.). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and open-world. The description adds the auth requirement ('Auth: none needed') and the return structure, providing useful context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a one-sentence purpose, a concise return structure, and an auth note. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description covers purpose, return format, and auth. However, the tool name suggests 'next5' but the description doesn't specify the number of races returned or ordering, leaving minor ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage), so the baseline is 3. The description merely restates the filter role ('race-type + country filter') without adding new semantics or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns next races about to jump, with time-to-jump, filtered by race-type and country. This specific scope distinguishes it from siblings like betr_todays_races or betr_race.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving imminent upcoming races but does not explicitly mention when to use this tool over alternatives. There is no exclusion language or reference to sibling tools for other needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_pop_sgm_bet_dataARead-onlyIdempotent
Popular Same Game Multi suggestions for one master event.
Returns: {PopSGMBetItems:[{legs:[{selectionName, price}], price}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| SortOrder | No | Sort order. | |
| CategoryId | No | Category (competition) id. | |
| MasterEventId | Yes | Master event id (a match). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the return shape (PopSGMBetItems with legs/price) and explicitly confirms no authentication is needed, which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three short sections) and front-loaded with the core purpose. Every sentence earns its place: purpose, return structure, and auth requirement. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explicitly showing the return format. It covers the essential usage context (one master event, no auth) and the parameter schema is complete. Minor gaps like pagination or sorting behavior are not critical for a simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters (SortOrder, CategoryId, MasterEventId). The description adds no additional parameter-level detail beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'Popular Same Game Multi suggestions for one master event', which is a specific resource and scope. It also provides the return structure, distinguishing it from sibling tools like betr_pop_sgm_category that may target categories rather than master events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates this is for a single master event, implying you need a MasterEventId, and states 'Auth: none needed.' While it doesn't explicitly exclude alternatives or mention sibling tools, the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_pop_sgm_categoryARead-onlyIdempotent
Categories that currently have Popular Same Game Multis.
Returns: {PopSGMCategoryItems:[{EventTypeId, MasterCategoryName, CategoryId, CategoryName}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context beyond these: 'Auth: none needed' and the exact return structure. No contradiction with annotations. This is good transparency for a simple read-only list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for purpose, one for return shape, one for auth. Every sentence adds necessary information without redundancy. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool, the description covers the essential aspects: what it returns and auth requirements. The output structure is embedded in the description. It lacks usage context, but that dimension is already scored separately. Overall adequate for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no meaningful semantics. Baseline is 4. The description goes beyond the schema by specifying the return object shape, which helps the agent understand what to expect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: categories that currently have Popular Same Game Multis. It names a specific scope ('currently have Popular Same Game Multis') which distinguishes it from generic category tools, but it lacks an explicit verb like 'list' or 'get', so it's slightly less clear than it could be.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It doesn't mention related tools like betr_pop_sgm_bet_data or betr_master_category, nor does it provide any decision context. Given the large sibling list, this gap is significant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_popular_market_linksARead-onlyIdempotent
Popular market quick-links (specials, featured competitions) for navigation.
Returns: {Items:[{PopularMarketName, EventTypeId, EventType, MasterEventId, CategoryId}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, open-world, and idempotent behavior. The description adds useful context: 'Auth: none needed' and the return shape. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three short lines: a clear one-line purpose, a return format line, and an auth line. Every sentence contributes value, and the structure is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter tool, the description is quite complete. It provides the return structure and auth requirement, compensating for the lack of an output schema. It could add more on field meanings or potential errors, but overall it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameters, and it doesn't, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (popular market quick-links) and its purpose (navigation), with examples like specials and featured competitions. It distinguishes from siblings by specifying 'popular market quick-links', though it lacks an explicit verb like 'retrieve' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for navigation via quick-links but provides no explicit guidance on when to use this tool versus alternatives or any exclusions. 'For navigation' gives context but is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_promotionsARead-onlyIdempotent
Active promotions with metadata (title, end date, linked master events).
Returns: {MetaData:[{PromotionId, Title, PromotionEndDate, MasterEventId:[...]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the baseline transparency is high. The description adds valuable context by stating 'Auth: none needed' and explicitly showing the return structure, which goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with three terse components: purpose, return shape, and authentication requirement. Every sentence adds value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only tool without an output schema, the description is complete: it states what the tool returns (including a precise JSON structure), that no auth is needed, and the scope ('active'). Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric the baseline is 4. The description appropriately omits parameter explanations since there are none to define, and the return format is provided instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (active promotions) and its key metadata fields (title, end date, linked master events), effectively differentiating it from broader tools like betr_all_promotions. Although no explicit verb like 'list' or 'get' is used, the meaning is unambiguous from the context and the 'Returns' clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying 'Active promotions' and notes 'Auth: none needed,' but it does not explicitly state when to use this tool over sibling alternatives (e.g., betr_all_promotions or pointsbet_promotions). The active vs. all distinction is present but not framed as a selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_raceARead-onlyIdempotent
Full racecard for one race: runners, prices, allowed bet types, results once run.
Returns: {EventId, EventName, AllowedWinBetTypes:[{MarketTypeCode, DividendTypeCode}], ...runners + prices}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Race event id (from a races feed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds behavioral context beyond these: 'results once run' indicates data changes over time, and 'Auth: none needed' clarifies access requirements. It also briefly exposes the return structure, which aids transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: first sentence states the tool's purpose, followed by a brief return-type sketch and an auth note. Every sentence carries useful information, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-parameter tool with strong annotations, the description is complete: it identifies the input source, lists the return content (runners, prices, bet types, results), shows a partial return structure, and states auth requirements. No output schema exists, but the return sketch covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single `eventId` parameter, including its source ('from a races feed'). The description does not add further parameter semantics beyond mentioning EventId in the return type, so it provides no additional value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a 'Full racecard for one race: runners, prices, allowed bet types, results once run.' This is a specific resource (racecard) and explicitly differentiates from sibling tools like betr_grouped_racecard by emphasizing 'one race' and listing concrete content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description: use this for a single race's full racecard. However, there is no explicit 'when to use vs. alternatives' guidance, such as 'for multiple races use betr_grouped_racecard' or 'for form use betr_race_form.' The single-race scope is clear but no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_race_flucsARead-onlyIdempotent
Price fluctuation history per runner for one race (fixed-odds movements).
Returns: {Items:[{OutcomeId, Flucs:[{Offset, Price}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| EventId | Yes | Race event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description supplements these with 'Auth: none needed' and an explicit return structure, adding useful behavioral context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact: a one-line purpose, a one-line return shape, and a one-line auth note. Every line is informative and front-loaded, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description is self-sufficient: it explains what is retrieved, the per-runner/per-race scope, the exact return shape (Items/OutcomeId/Flucs/Offset/Price), and auth requirements. Since there is no output schema, the explicitly documented return structure is essential and fully provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the sole parameter 'EventId' with 'Race event id,' and coverage is 100%. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear resource and scope: 'Price fluctuation history per runner for one race (fixed-odds movements).' It distinguishes itself from broader racing tools by focusing on per-runner, per-race fluctuation history, though it lacks an explicit action verb like 'Get' or 'List.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the use case by specifying the data scope: per-runner price fluctuation history for one race, so an agent can infer when to call it. However, it does not explicitly name alternatives or provide when-not-to-use guidance, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_race_formARead-onlyIdempotent
Detailed form guide for one race (runner history, comments, ratings).
Returns: {RaceFormV2:{RaceNo, RaceName, NumberOfRunners, Distance, Course, RaceComment, Runners:[...]}}
Auth: none needed.
Also answers this: pointsbet_racing_form, tab_racing_race_form.
| Name | Required | Description | Default |
|---|---|---|---|
| EventId | Yes | Race event id. | |
| RequestingRace | No | Upstream flag; leave false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds 'Auth: none needed' and provides the return structure, which enriches understanding beyond the annotations. It does not contradict the annotations; it complements them with operational details. For a read-only tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and structured: a clear purpose, return type, auth note, and aliasing. Each sentence provides necessary information without redundancy. The front-loaded purpose helps an agent quickly understand the tool's scope, and the alias mention is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, simple read-only behavior), the description is near-complete. It provides the return shape (even without an output schema), notes auth, and hints at alternative tools. No critical information appears missing. Minor gaps like error handling or rate limits are not essential for such a basic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents both parameters: EventId is 'Race event id' and RequestingRace is 'Upstream flag; leave false.' Schema coverage is 100%, so the description adds no additional parameter meaning. The baseline of 3 applies because the schema carries the burden, and the description does not need to elaborate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Detailed form guide for one race (runner history, comments, ratings).' This is specific and distinguishes it from siblings like betr_race (likely more basic) or betr_race_flucs (fluctuations). It also explicitly mentions returning a specific structure, which helps an agent understand what it will get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a detailed form guide for a single race is needed, and it notably lists 'Also answers this: pointsbet_racing_form, tab_racing_race_form,' which tells an agent this tool can substitute for those. However, it does not provide explicit conditions for when to choose this over other racing tools (e.g., when to use betr_race vs. this). No exclusions are given, so it's clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it two or more selections from one BetR match, get the correlation-adjusted combined price. Prices combinations BetR has not pre-built (for the ones it has, see betr_pop_sgm_bet_data).
Returns: {Price: 2.2, ErrorNo: 0} — that is the WHOLE body on success; there is no echo of the legs. VERIFIED live 2026-08-27 against AFL Western Bulldogs v Collingwood (MasterEventId 2255977), unauthenticated.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Measured on that fixture, BetR's adjustment ran from -9.7% to +4.9% and went BOTH ways: Bulldogs (1.95) with Under 139.5 (6.25) priced 11.00 against a naive 12.19, while the same 1.95 with Under 201.5 (1.10) priced 2.25 against a naive 2.145. Never multiply the legs.
DO NOT SEND FixedWin. The site does, and the server treats the value you send as a FLOOR on the answer: send 99.0 on any leg and the response is {Price: 99.0, ErrorNo: 0} — a fabricated quote reported as a clean success. Omitting it returned the true price in every case tested, so the field is pure downside.
BETR REFUSES A REDUNDANT LEG INSTEAD OF DROPPING IT (ErrorNo 4527), which is the safe behaviour and the opposite of TAB's and PointsBet's — you cannot end up holding a shorter bet than you asked for. But 4527 IS A CATCH-ALL and its wording names only one of its three causes: a leg that another leg implies, the SAME leg twice, and legs from DIFFERENT matches all come back as 'redundant leg in bet'.
Other codes seen live: 4500 = fewer than two legs (unlike Sportsbet and PointsBet, BetR will not price a single one), 4526 = impossible combination (Over 139.5 with Under 139.5), 4503 = a leg could not be resolved, usually a missing EventId or OutcomeId. All arrive as HTTP 200; the engine raises them rather than passing Price: 0 off as a quote.
Example: Price Bulldogs to win with over 139.5 total points {"MasterEventID": 2255977, "Markets": [{"EventId": 91686300, "OutcomeId": 1, "MarketType": "WIN"}, {"EventId": 91712212, "OutcomeId": 13910, "MarketType": "WIN"}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| Markets | Yes | The legs, AT LEAST TWO, all from the same match: [{"EventId": 91686300, "OutcomeId": 1, "MarketType": "WIN"}, …]. All three come from betr_master_event: EventId is `Events[].EventId` (a MARKET GROUP, not the match), OutcomeId is `Events[].Outcomes[].OutcomeId`, and MarketType is that outcome's `MarketTypeCode`. MARKETTYPE IS LOAD-BEARING AND FAILS SILENTLY — dropping it from a verified pair turned a correct 2.20 into 21 with ErrorNo 0, so a leg missing it is quoted wrong rather than rejected. Copy the outcome's own three fields and nothing else; in particular do NOT add `FixedWin`, which the server trusts as a floor on the answer. | |
| MasterEventID | No | The match id. IGNORED BY THE SERVER — omitting it, sending 0, and misspelling the key all returned the same price — so it neither scopes nor validates the legs; cross-match legs are caught by the leg resolver instead, as a 4527. Send it for symmetry with the site, but never rely on it to constrain anything. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses the exact success body, the fact that error codes arrive as HTTP 200 rather than transport errors, that MasterEventID is ignored, that FixedWin acts as a floor and can fabricate quotes, and that redundant legs trigger 4527. It also names observed error codes 4500, 4526, and 4503 with concrete meanings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but organized into a clear front-loaded purpose, return shape, critical warnings, error-code reference, and example. It earns most of its length by documenting genuine server quirks, though the live-verification fixture detail adds some bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers the response body, error codes, authentication, parameter provenance, and a worked example. An agent has everything needed to select and invoke the tool correctly, including behavior on malformed or cross-match requests.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description still adds high-value semantics: Markets fields come from betr_master_event, MarketType is load-bearing and fails silently, FixedWin must not be added, and MasterEventID is ignored by the server. This goes well beyond the schema's structural descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific action (price a same-game multi), the resource (BetR same game multi) and the exact scope: two or more selections from one BetR match with a correlation-adjusted price. It also contrasts with betr_pop_sgm_bet_data for pre-built combinations, so it is distinguishable from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this for combinations BetR has not pre-built and directs agents to betr_pop_sgm_bet_data for pre-built ones. It also gives when-not-to-use details such as requiring at least two legs from the same match, warning against sending FixedWin, and noting the tool needs no authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_sports_categoryARead-onlyIdempotent
Events + markets for one sport category (competition).
Returns: {EventTypeDesc, EventTypeId, MasterCategories:[{Categories:[{CategoryId, CategoryName, Events:[...]}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| CategoryId | Yes | Category (competition) id, e.g. 39251 (NBA). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds 'Auth: none needed' and the return structure, which is useful context. However, it doesn't disclose other behavioral details like pagination or rate limits, so it only modestly exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, a return format, and an auth note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool with good annotations, the description includes the return shape and auth requirements, making it complete. The textual return structure compensates for the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage for the single parameter CategoryId, with a clear example. The description does not add meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns events and markets for a single sport category/competition, which is a specific verb+resource+scope. It distinguishes from broader tools like betr_master_category by focusing on a single category, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies it is used when you have a CategoryId, but there is no mention of when not to use it or what competing tools exist for similar purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_statwars_eventsARead-onlyIdempotent
Statwars master events (head-to-head stats promo events).
Returns: {Items:[{EventTypeId, EventTypeDesc, MasterEventId, MasterEventName, MinAdvertisedStart}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds value beyond these by stating 'Auth: none needed' and explicitly listing the return structure with field names. This provides useful behavioral context about what data will be returned and confirms no authentication is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line identifying the resource, one line for the return format, and one line for auth. Every sentence earns its place, with no redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read operation with no output schema, the description provides the essential return structure and auth requirement, making it adequately complete. It does not explain the broader context of when one would need Statwars master events, but that is not critical for a simple list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema carries no parameter details. Per the baseline for 0-param tools, the description need not compensate for schema gaps. It correctly does not invent parameter-related information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Statwars master events' and adds the clarifying parenthetical 'head-to-head stats promo events', which differentiates it from generic master event tools like betr_master_event. However, it lacks an explicit action verb like 'List' or 'Get', relying on a noun phrase that implies retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives. It does not mention any exclusions, prerequisites, or context for selection. The only extra statement is 'Auth: none needed', which is an auth detail rather than a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
betr_todays_racesARead-onlyIdempotent
Today's races grouped by code (Thoroughbred / Greyhound / Harness), for the homepage.
Returns: {Throughbred:[{VenueId, Venue, Race1:{EventId, RaceNumber, AdvertisedStartTime, SecondsToJump}}], Greyhound:[...], Harness:[...]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| CountryFilter | No | Country filter (0 = all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description adds useful behavioral context: 'Auth: none needed' and a detailed return shape including field names. This adds value beyond the annotations, though it does not describe edge cases like empty results or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and efficient, with three sentences covering purpose, return structure, and authentication. It is front-loaded with the primary action and uses minimal but informative prose, with no irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter, the description provides all necessary context: what races are included, how they are grouped, the return format with specific fields, and authentication requirements. The lack of an output schema is compensated by the explicit return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, CountryFilter, is fully described in the schema with 'Country filter (0 = all).' The tool description does not add extra parameter guidance, but since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns 'Today's races grouped by code (Thoroughbred / Greyhound / Harness)' with a specific resource and grouping. It also mentions the homepage context, distinguishing it from other race-related tools that focus on individual races or next 5 races.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the intended usage context ('for the homepage') and provides clear scope ('Today's races'). It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to understand when this high-level grouped listing is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_advanced_box_scoreARead-onlyIdempotent
Advanced box score for one game: success rate, explosiveness, PPA and field position.
Returns: {gameId, teams:{ppa:[…], cumulativePpa:[…], successRates:[…], explosiveness:[…], rushing:[…], havoc:[…], scoringOpportunities:[…], fieldPosition:[…]}} — SHAPE FROM VENDOR DOCS. PPA is CFBD's expected-points-added metric.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One game's advanced box {"id": 401520165}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Game id (from cfbd_games). Passed as a QUERY param, not in the path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so those are covered. The description adds valuable transparency by disclosing that the return shape is 'from vendor docs' and 'NOT been verified against a live response,' as well as the auth requirement and PPA definition. This helps the agent set expectations and inspect the actual payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-sentence summary, followed by the return shape, caveat, example, and auth note. Each section serves a purpose and the structure is logical, though the caveat note is somewhat verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description details the return structure and warns it is unverified. It also covers authentication and provides an example. This is a reasonably complete picture for a single-parameter tool, though it doesn't discuss error modes or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already explains that 'id' is a query parameter from cfbd_games. The description reinforces this with an example value, but it doesn't add significant new semantic information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Advanced box score for one game' and lists the key metrics (success rate, explosiveness, PPA, field position), which identifies the tool's purpose and scope. It doesn't explicitly differentiate from sibling CFBD tools, but the 'one game' constraint distinguishes it from list-style tools like cfbd_games.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via 'one game' and provides an example call, but it doesn't explicitly state when to choose this over alternatives or where to obtain the required game ID. The schema description covers the ID source, yet the tool description itself lacks that contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_betting_linesARead-onlyIdempotent
Historical betting lines per game from multiple books — spread, over/under and moneyline. The college-football backtesting dataset.
Returns: [{id, season, week, homeTeam, homeScore, awayTeam, awayScore, lines:[{provider:'consensus'|'Bovada'|…, spread, formattedSpread, spreadOpen, overUnder, overUnderOpen, homeMoneyline, awayMoneyline}]}] — SHAPE FROM VENDOR DOCS. lines is per BOOK; *Open vs the closing value is what a CLV comparison uses.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 week 1 lines {"year": 2024, "week": 1}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One school. | |
| week | No | Week number. | |
| year | No | Season year. | |
| seasonType | No | Season type. One of: regular, postseason. | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint, openWorldHint, idempotentHint) by disclosing that the return shape is from vendor docs and 'has NOT been verified against a live response,' advising to 'inspect the actual payload.' It also explains the significance of `*Open` fields for CLV comparisons and notes the auth requirement (CFBD_API_KEY). This adds valuable context without contradicting the safe-read annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded: it opens with a one-sentence purpose, then presents the return shape, a caveat about verification, an example, and auth requirement. Each section serves a clear purpose and there is no fluff. It is longer than average but every sentence earns its place due to the tool's complexity and the unverified data warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and the return payload is complex (nested `lines` objects), the description compensates by providing a detailed return shape, explaining it is approximate, giving an example call, and stating the auth key requirement. It also clarifies the `*Open` versus closing semantics, making it complete for an agent to understand both the call and the response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all four parameters (team, week, year, seasonType) with descriptions, providing 100% coverage. The description does not elaborate on parameter meanings or formats beyond the schema, except for an example using year and week. This example adds a hint of usage but does not substantially enrich parameter semantics, aligning with the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving 'Historical betting lines per game from multiple books — spread, over/under and moneyline.' It specifies the resource (betting lines), the scope (per game), and the content (spread, totals, moneyline), which distinguishes it from sibling tools like cfbd_games or odds aggregation tools. The phrase 'The college-football backtesting dataset' further clarifies its intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets clear context: it is for historical betting lines and backtesting, and it provides a concrete example query (2024 week 1 lines). However, it does not explicitly state when to prefer this over alternatives such as cfbd_games or theoddsapi, nor does it mention exclusions. The usage intent is implied but not explicitly contrasted with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_gamesARead-onlyIdempotent
Games for a season with scores, venue and attendance. year is required.
Returns: [{id, season, week, season_type, start_date, neutral_site, conference_game, venue, home_team, home_points, home_line_scores:[…], away_team, away_points, excitement_index, home_post_win_prob}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 week 1 {"year": 2024, "week": 1}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One school's games. | |
| week | No | Week number. | |
| year | Yes | Season year. | |
| conference | No | Conference abbreviation. | |
| seasonType | No | Bowl games need 'postseason' — they are INVISIBLE under the default. | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, openWorldHint), the description discloses the return shape, notes that it is unverified from vendor docs, and mentions the required API key. This adds meaningful context about expected output and operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, return shape, caveat note, example, and auth requirement. It is slightly longer than necessary due to the example, but all sections serve a purpose and it is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description provides a return shape, required parameter, auth note, and a critical caveat about unverified data. The schema fills in parameter details, making the overall context adequate for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all parameters (100% coverage), so the bar is at baseline. The description only adds an example with `year` and `week`, which does not introduce new semantic meaning beyond the schema's existing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Games for a season with scores, venue and attendance,' which distinguishes it from sibling CFBD tools like cfbd_teams and cfbd_rankings. It lacks an explicit verb like 'list' or 'get,' but the resource and focus are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that `year` is required and provides an example with `week`, implying when to use it for season-specific game data. However, it does not explicitly mention alternatives or when not to use this tool, nor does it reference sibling tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_portalARead-onlyIdempotent
Transfer-portal moves for a season — origin, destination and rating.
Returns: [{season, firstName, lastName, position, origin, destination, transferDate, rating, stars, eligibility}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 portal {"year": 2024}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description adds valuable caveats: the return shape is unverified and sourced from vendor docs, advising the agent to inspect the actual payload. It also discloses the auth requirement (CFBD_API_KEY), which annotations do not cover. This is exemplary transparency for a tool with no live verification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded with a clear summary, followed by return shape, critical caveat, example, and auth note. Each section earns its place; the length is justified by the need to warn about unverified data and auth requirements. It is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description is remarkably complete: it gives the return shape, an example invocation, authentication details, and a warning about data reliability. With no output schema and a low-complexity tool, the description covers all essential aspects for correct invocation and result interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the 'year' parameter with baseline coverage. The description adds a concrete example (2024 portal -> {"year": 2024}), which clarifies how to pass the value. This enriches the param semantics beyond the schema's simple 'Season year.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning transfer-portal moves for a season, with origin, destination, and rating. The scope and domain are specific, and it stands apart from sibling tools like cfbd_games or cfbd_teams. However, it lacks an explicit verb (e.g., 'get' or 'list'), relying on a noun phrase and example to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need transfer-portal moves for a specific season. It provides an example call but does not state when not to use it or mention alternative tools (e.g., other CFBD endpoints). There are no explicit exclusions or alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_rankingsARead-onlyIdempotent
Weekly poll rankings (AP, Coaches, Playoff Committee).
Returns: [{season, seasonType, week, polls:[{poll:'AP Top 25', ranks:[{rank, school, conference, firstPlaceVotes, points}]}]}] — SHAPE FROM VENDOR DOCS. Note polls are NESTED inside each week entry.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 week 10 polls {"year": 2024, "week": 10}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | Week number. | |
| year | Yes | Season year. | |
| seasonType | No | Season type. One of: regular, postseason. | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds valuable behavioral context by explicitly noting that the return shape is from vendor docs and unverified, warns the agent to inspect the actual payload, and discloses that the provider key is absent. This goes beyond the annotations and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and front-loaded with the core purpose, then return shape, caveat, example, and auth. It is structured with clear sections, but the caveat and example are somewhat verbose. Every sentence provides useful information, though the example could be considered redundant given the shape. Overall, it is efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description carries the burden of explaining the return structure, which it does thoroughly with a nested shape example and nesting note. It also covers authentication and includes usage caveats. It lacks potential details like pagination or error behavior, but for a 3-parameter read-only tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for all three parameters (year, week, seasonType), so the schema already handles parameter semantics. The description adds a concrete example ('2024 week 10 polls') but this does not significantly deepen understanding beyond what the schema offers. Baseline 3 is appropriate when schema covers all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing weekly poll rankings (AP, Coaches, Playoff Committee), which is a specific resource distinct from other CFBD tools like cfbd_ratings_elo or cfbd_games. It lacks an explicit verb like 'Retrieve' or 'List', but the title and description together make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives among the CFBD siblings. It implies usage for poll rankings but does not explicitly state exclusions or mention alternative tools for other rating types (e.g., cfbd_ratings_elo). The auth note is a prerequisite, not a tool-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_ratings_eloARead-onlyIdempotent
Elo ratings by team and week.
Returns: [{year, team, conference, elo}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 Elo {"year": 2024}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One school. | |
| week | No | Week number. | |
| year | No | Season year. | |
| conference | No | Conference abbreviation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds important behavioral context: the response shape is from vendor documentation and unverified, requiring the agent to inspect the actual payload before trusting field names. It also discloses the authentication requirement (CFBD_API_KEY). These are valuable caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear one-line purpose, a return shape, a necessary caveat about unverified data, a concrete example, and auth instructions. Every sentence earns its place, and the most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return shape and includes an example, but it does not explain behavior when no filters are provided, how parameters combine, or what each parameter's permitted values are beyond the schema. The unverified shape warning is helpful, but for a 4-parameter tool with no output schema, more detail on default behavior and parameter combinations would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all four parameters with descriptions (100% coverage), giving a baseline of 3. The description's example ({"year": 2024}) provides a practical usage illustration, and the return shape hints at the conference and team parameters. It adds some context beyond the schema, but does not fully explain parameter constraints or interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing Elo ratings filterable by team and week, distinguishing it from sibling rating tools like cfbd_ratings_sp and cfbd_rankings. The verb 'Returns' and specific resource 'Elo ratings' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives like cfbd_ratings_sp. The example shows a valid call but does not state when this tool is preferred, what filters are required, or how it differs from similar rating/ranking tools. Usage is implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_ratings_spARead-onlyIdempotent
SP+ ratings — the headline predictive rating for college football, split by offence and defence.
Returns: [{year, team, conference, rating, ranking, offense:{ranking, rating, success, explosiveness}, defense:{…}, specialTeams:{rating}}] — SHAPE FROM VENDOR DOCS. Defensive ratings are better when LOWER.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 SP+ {"year": 2024}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One school. | |
| year | No | Season year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial context beyond the annotations: it warns that the return shape is unverified and approximate due to lack of a live key, advises inspecting the actual payload, notes that defensive ratings are better when lower, and discloses the API key requirement. These are important behavioral traits that an agent must know to use the tool safely and interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by a return shape, a critical caveat, an example, and auth info. Each section earns its place, though it is slightly longer than necessary. The unverified-shape note is essential, and the example is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by providing an inline return shape and an example. It also covers auth and a key interpretive note. However, it does not clarify what happens when both optional parameters are omitted or when 'team' is provided, and it leaves some return field semantics (e.g., success, explosiveness) unexplained. Overall, it provides enough context for a safe initial call but has minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes both parameters ('team' and 'year') with 100% coverage. The description only provides an example using 'year' and does not add new semantics about how team filtering behaves or whether parameters are combinable. It adds minimal value beyond the schema, so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns SP+ ratings, a specific predictive rating system for college football, split by offense and defense. This distinguishes it from sibling cfbd_ratings_elo (which covers Elo ratings) and other CFBD tools. The verb 'returns' and resource 'SP+ ratings' are explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for SP+ ratings specifically, and the example shows a typical use case (year-only query). However, it does not explicitly mention when to use this instead of cfbd_ratings_elo or other rating tools, nor does it state exclusions or prerequisites beyond requiring an API key. The usage context is implicit rather than directly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_recruitingARead-onlyIdempotent
Recruiting classes: individual commits with stars, ratings and positions.
Returns: [{id, athleteId, recruitType, year, ranking, name, school, committedTo, position, height, weight, stars, rating, city, stateProvince, hometownInfo}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 recruits {"year": 2024}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Committed school. | |
| year | No | Recruiting class year. | |
| state | No | Home state (two letters). | |
| position | No | Position abbreviation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description adds valuable context: the response shape is unverified/approximate and the tool requires a CFBD_API_KEY. This discloses reliability and auth needs that annotations do not cover, though it doesn't discuss pagination or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, return shape, unverified caveat, example, and auth. Each section serves a purpose, even though the return field list makes it longer than necessary. The first sentence immediately states the core purpose, so it is effectively front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the return fields and adding a reliability caveat. The example and auth note round out the picture. However, it doesn't clarify behavior when no filters are provided (e.g., returns all recruiting classes), which is a minor gap for a tool with all optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all four parameters with clear descriptions (e.g., 'Committed school.', 'Recruiting class year.'). The description only adds an example call, which is illustrative but doesn't deepen parameter understanding beyond schema descriptions. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('Recruiting classes') and the specific data returned (individual commits with stars, ratings, positions). This distinguishes it from sibling CFBD tools like cfbd_games, cfbd_rankings, and cfbd_teams, which cover different data domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage example ({"year": 2024}) and notes auth requirements, which gives context for when to call. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, so it falls short of full selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_teamsARead-onlyIdempotent
FBS/FCS programmes with conference, venue and colours.
Returns: [{id, school, mascot, abbreviation, conference, division, color, alt_color, logos:[url], location:{venue_id, name, city, state, capacity, grass, dome}}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: SEC programmes {"conference": "SEC"}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season — conference membership changes year to year. | |
| conference | No | Conference abbreviation, e.g. SEC, B1G, ACC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, open-world, idempotent), the description discloses the exact return shape, notes that the shape is unverified and may be approximate, and clearly states the authentication requirement (CFBD_API_KEY). This adds substantial behavioral context that the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with distinct sections for the resource, return shape, a critical caveat about unverified data, a usage example, and authentication. Every sentence earns its place without unnecessary fluff, making it both concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a detailed return shape, an example, and auth requirements. However, it does not explicitly state that omitting parameters returns all teams or enumerate any pagination/limits, which would have made it fully complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions, so the baseline is 3. The description adds an example of using the 'conference' parameter ({"conference": "SEC"}) and notes that year affects conference membership, which adds practical value beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'FBS/FCS programmes' with details on conference, venue, and colours, making it distinct from sibling tools like cfbd_games or cfbd_rankings. However, it lacks an explicit verb (e.g., 'list' or 'get') and does not directly contrast itself with alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example of filtering by conference but does not explicitly state when to use this tool vs alternatives such as cfbd_team_season_stats or cfbd_advanced_box_score. There is no guidance on when not to use it or which specific use cases it serves beyond the implicit 'retrieve team info'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cfbd_team_season_statsARead-onlyIdempotent
Season totals per team across every tracked stat category.
Returns: [{season, team, conference, statName, statValue}] — SHAPE FROM VENDOR DOCS. NOTE this is LONG format: one row PER STAT per team, not one row per team.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: 2024 team stats {"year": 2024}
Auth: needs your own key in CFBD_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | One school. | |
| year | Yes | Season year. | |
| conference | No | Conference abbreviation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent behavior, so the description adds valuable context beyond them: the response is in long format, the shape is from unverified vendor docs, auth requires a key, and users should inspect the actual payload. These warnings help set expectations about reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Returns, Example, Auth) and a warning note. It is slightly long due to multiple caveats, but each section earns its place and the key facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return format, which it does via the shape example and the long-format clarification. The auth requirement, example, and reliability caveat round out the context needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters (year, team, conference). The description adds an example call ({'year': 2024}) but does not elaborate on parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Season totals per team across every tracked stat category,' which is a specific verb+resource combination. It also highlights the long-format return shape, distinguishing it from typical per-team aggregation tools and many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the example call and mention of optional filters (team, conference), but there is no explicit guidance about when to use this tool versus sibling tools like cfbd_games or cfbd_rankings. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_archivesARead-onlyIdempotent
The list of monthly game archives available for a player — call this before asking for a month's games.
Returns: {archives:[url]} — URLs ending /games/YYYY/MM; take the year and month from the last entry to fetch the most recent games
Example: Which months a player has games for {"username": "hikaru"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Chess.com username. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the agent knows it's a safe read operation. The description adds the output format ({archives:[url]}) and the meaning of the last entry, enriching behavioral context beyond the annotations. It also notes that no authentication is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a clear purpose, return format, example, and auth note in a few sentences. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter tool, the description covers the core aspects: purpose, usage, return format, and auth. No output schema exists, so explaining the return structure is valuable. It is complete enough for selection and invocation, though it could optionally mention error behavior for invalid usernames.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the username parameter as required and part of the URL path, covering 100% of parameters. The description only adds an example value ('hikaru') but no additional semantic detail, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists monthly game archives for a player, using a specific verb and resource. It distinguishes itself by explicitly saying to call this before asking for a month's games, which differentiates it from chesscom_monthly_games.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to call this tool before fetching a month's games, providing clear timing context. It also shows how to extract the most recent month from the last archive URL. However, it does not name alternative tools or explicitly state 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.
chesscom_clubARead-onlyIdempotent
A Chess.com club: description, membership count, admins and average rating.
Returns: {'@id', name, club_id, country, average_daily_rating, members_count, created, last_activity, admin:[url], description, url}
Example: The developer community club {"club_id": "chess-com-developer-community"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| club_id | Yes | Club URL id, e.g. 'chess-com-developer-community'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds 'Auth: none needed' and the expected return structure, which provides some behavioral context. It doesn't mention error cases, rate limits, or pagination, but for a simple read operation with annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, a return fields list, an example, and an auth statement. It is appropriately sized and front-loads the core information, with no redundant sentences. The example adds clarity without excessive length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description covers the essential context: what the club data is, what fields are returned, how to specify the club, and that no auth is needed. It lacks details on error handling or variations in response, but for this scope it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides comprehensive documentation for club_id, including the format and example (100% schema description coverage). The description's example and 'part of the URL path' note in the schema overlap, adding minimal new semantic value. The baseline of 3 applies since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (Chess.com club) and lists the data fields returned (description, membership count, admins, average rating), which implies a retrieval operation. It doesn't use a strong verb like 'get' or 'fetch', but the 'Returns:' format makes the purpose clear. It distinguishes itself from sibling chess tools by focusing on club data rather than player or leaderboard info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete example of usage ('club_id': 'chess-com-developer-community') and notes 'Auth: none needed', which implies when it can be used. However, it doesn't explicitly state when to use this tool vs alternatives, nor does it mention any exclusions or prerequisites beyond the required parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_leaderboardsARead-onlyIdempotent
Chess.com's leaderboards for every category — live blitz/bullet/rapid, daily, variants and tactics. LARGE (~290 KB).
Returns: {live_blitz:[{player_id, username, score, rank, title, country}], live_bullet:[…], live_rapid:[…], daily:[…], daily960:[…], tactics:[…], battle:[…]} — one array per category
Example: All leaderboards
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond this: the response size warning (~290 KB) and the exact return structure, which helps the agent anticipate the payload. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the purpose. The Returns block is a useful structured addition, and the auth note is brief. However, the 'Example: All leaderboards' line adds minimal value and could be considered slightly redundant, though it is not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description is highly complete. It covers purpose, categories covered, return structure, response size, and authentication. The only minor gap is that the return structure is fully spelled out only for live_blitz, with ellipses for other categories, but the pattern is clearly implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. The schema coverage is vacuously 100%. The description correctly omits parameter details, earning the baseline score of 4 for no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing Chess.com's leaderboards for every category, listing specific categories like live blitz, bullet, rapid, daily, variants, and tactics. The Returns section further confirms it retrieves these leaderboards. This distinguishes it from sibling chess tools focused on individual players, stats, or archives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: it returns all leaderboards with no parameters. It warns about the large response size (~290 KB) and notes that no authentication is needed. It does not explicitly name alternatives, but for a zero-parameter retrieval tool, the usage scenario is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_monthly_gamesARead-onlyIdempotent
Every game a player finished in one month, with PGN, result, ratings and opening ECO.
Returns: {games:[{url, pgn, time_control, time_class, rules, end_time, rated, eco, white:{username, rating, result}, black:{…}}]} — end_time is UNIX SECONDS; a prolific player's month can be several MB
Example: One player-month {"username": "hikaru", "year": "2025", "month": "01"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Four-digit year, e.g. 2025. Required — part of the URL path. | |
| month | Yes | Two-digit month, ZERO-PADDED ('01', not '1'). Required — part of the URL path. | |
| username | Yes | Chess.com username. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds substantial behavioral context beyond these: the return format (games array with specific fields), that 'end_time' is UNIX SECONDS, that a prolific player's month can be several MB, and that no authentication is needed. This warns the agent about potential payload size and response structure, which is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: the first sentence states the purpose, followed by the return format, a key note on time units and size, a concrete example, and auth requirement. Every sentence earns its place, and the formatting is scannable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does so thoroughly. It specifies the nested structure of games, highlights the high-risk 'several MB' size, provides a realistic example, and states auth requirements. This is complete for a read-only, idempotent data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter clearly described (e.g., 'Two-digit month, ZERO-PADDED'). The description adds an example (hikaru, 2025, 01) but this largely reaffirms schema details rather than providing new semantic information. The baseline of 3 applies because the schema handles parameter documentation, and the description adds minimal extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Every game a player finished in one month, with PGN, result, ratings and opening ECO.' This specifies the verb (finished/returns), resource (games), and scope (one player-month), distinguishing it from sibling tools like chesscom_player or chesscom_player_stats which focus on profiles or aggregate stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: it returns games for a specific player in a month, with an example showing required parameters. However, it does not explicitly state when not to use it or mention alternative tools for other scenarios (e.g., getting stats or archives), so it lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_playerARead-onlyIdempotent
A Chess.com player's profile: name, title, country, league, followers and status.
Returns: {player_id, '@id', url, username, name, title, followers, country, location, joined, last_online, status, league, avatar} — joined/last_online are UNIX SECONDS; country is a URL, not a code
Example: One player's profile {"username": "hikaru"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Chess.com username (lowercase). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and open-world. The description adds useful context beyond these: 'Auth: none needed' and critical format caveats (joined/last_online are UNIX seconds, country is a URL rather than a code). It also enumerates the exact return fields, which is helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Returns, Example, Auth) and every sentence contributes value. It is concise and front-loaded with the primary purpose, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the return shape, important field format nuances, an example, and auth requirements. It is sufficiently complete for correct selection and invocation, though it could optionally mention error behavior or data freshness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the only parameter (username) with a clear description (lowercase, required, part of URL path). The description's example provides a concrete value but does not add significant semantic information beyond what the schema already states. With 100% schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a Chess.com player's profile and lists key fields, distinguishing it from siblings like chesscom_player_stats. However, it lacks an explicit verb like 'Get' or 'Fetch', relying on the noun phrase and the 'Returns:' section to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example ('{"username": "hikaru"}') that implies usage for looking up a single player's profile, but it does not explicitly state when to use this tool over alternatives such as chesscom_player_stats or lichess_user. No when-not-to-use or alternative tool guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_player_statsARead-onlyIdempotent
A player's ratings and records per game type — blitz, bullet, rapid, daily, plus tactics and puzzle rush.
Returns: {chess_blitz:{last:{rating, date, rd}, best:{rating, date, game}, record:{win, loss, draw}}, chess_bullet:{…}, chess_rapid:{…}, chess_daily:{…}, tactics:{highest, lowest}, puzzle_rush:{best}, fide} — a key is ABSENT if the player has never played that format
Example: Ratings across formats {"username": "hikaru"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Chess.com username. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it specifies that a key is absent if the player has never played a format, and discloses that no authentication is required. This goes beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized: it opens with the core purpose, then details the return shape, provides an example, and ends with authentication info. Every section earns its place without redundant fluff. The inline return structure is necessary since there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description fully compensates by detailing the exact return structure (nested objects for each format, records, best ratings, etc.) and the edge case of missing keys. It also includes a practical example and notes that no auth is needed, making the tool's input and output completely clear for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the 'username' parameter with 100% coverage, so the baseline is 3. The description adds value by providing a concrete example of the parameter usage ({"username": "hikaru"}), which clarifies how to specify the username in practice. This extra illustration enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a player's ratings and records per game type (blitz, bullet, rapid, daily, tactics, puzzle rush). It uses a specific resource (Chess.com player) and differentiates from sibling tools like chesscom_player by enumerating the exact statistics returned. The purpose is unmistakable and aligns with the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need a player's ratings and records across various chess formats. It includes an example invocation and notes that no authentication is needed, but it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chesscom_titled_playersARead-onlyIdempotent
Every player holding a given FIDE title — usernames only.
Returns: {players:[username]} — a flat list of USERNAME STRINGS, not objects; feed one to chesscom_player for detail
Example: All grandmasters {"title": "GM"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | FIDE title abbreviation. One of: GM, WGM, IM, WIM, FM, WFM, NM, WNM, CM, WCM. | GM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only, open-world, and idempotent, and the description adds important behavioral details: output shape (flat list of username strings, not objects), auth requirements ('Auth: none needed'), and the intended chaining to chesscom_player. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact: one-line purpose, return type, example, and auth. Every sentence adds value and the core purpose is front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with no output schema, the description covers the purpose, output format, example invocation, and auth. It even points to chesscom_player for detail, making it self-contained 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter fully with an enum and description (100% coverage), so the baseline is 3. The description adds a concrete example ({"title": "GM"}) and clarifies that the output is usernames only, but does not provide additional parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Every player holding a given FIDE title — usernames only.' It clearly distinguishes from sibling tools like chesscom_player (single player details) and leaderboards, and explicitly states the output is a flat list of username strings. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by showing an example ({"title": "GM"}) and noting that results should be 'feed one to chesscom_player for detail', suggesting a downstream workflow. It does not explicitly list alternative tools or exclusion scenarios, but the purpose and intended usage are sufficiently clear for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_competitionsARead-onlyIdempotent
Competition catalogue — series / tournaments with id, name, dates and artwork.
Returns: {competitions:[{id, name, url, imageUrl, startDateTime, endDateTime, order}], responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover the safety profile. The description adds practical context beyond those: an explicit return shape including the array of competition objects and responseError, plus the note that no authentication is required. It doesn't discuss rate limits or pagination, but for a simple catalogue this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: a one-line summary, a structured Returns section, and an Auth line. Every sentence serves a purpose, with no filler or repetition. It is exemplary in keeping the description short while still covering the key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only list endpoint with no required parameters and no output schema. The description provides the exact return structure, states auth requirements, and relies on annotations for behavioral traits. The only minor omission is any mention of result ordering or limits, but given the catalogue nature this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself doesn't add parameter-level detail, but the schema already describes both parameters: format as 'Response format' and jsconfig as 'Response-shape flag (leave default)'. The description's Returns line adds some context about the format, but the parameters remain adequately covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a 'Competition catalogue' containing series/tournaments and enumerates the returned fields (id, name, url, imageUrl, startDateTime, endDateTime, order). The Returns line reinforces that this is a listing operation. It doesn't explicitly contrast with sibling tools like cricketaustralia_tours or other competition endpoints, but the tool name and content make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: if you need a catalogue of competitions, use this tool. It does not provide explicit when-to-use guidance or name alternatives for related tasks (e.g., fetching fixtures or tours). There are no exclusions or prerequisites other than the positive 'Auth: none needed.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_contentARead-onlyIdempotent
Pulselive CMS content list by type — VIDEO (highlights/replays), TEXT (articles), AUDIO, or PLAYLIST (curated collections). Paginated.
Returns: {pageInfo:{page, pageSize, numPages, numEntries}, content:[{id, type, title, description, date, ...}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. | |
| detail | No | Detail level (STANDARD or BASIC). | STANDARD |
| pageSize | No | Items per page. | |
| tagNames | No | Optional tag filter (e.g. a competition or team tag). | |
| contentType | Yes | Content type. One of: VIDEO, TEXT, AUDIO, PLAYLIST. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: pagination behavior, the return object structure (pageInfo and content array), and that no authentication is needed. This goes beyond the annotations and helps set expectations for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, followed by a return object example and an auth note. Every sentence earns its place, and the most critical information (what the tool does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description provides a clear return shape, pagination details, auth requirements, and content type explanations. It does not cover every interaction (e.g., default pageSize limits or tagNames behavior), but the schema documents these parameters sufficiently. Overall, the description is complete enough for an agent to invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters with 100% coverage, including the contentType enum and defaults. The description provides minor additional context by clarifying what each content type contains (e.g., VIDEO highlights/replays), but it does not add significant parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('content list'), the resource ('Pulselive CMS'), and the scoping by type (VIDEO/TEXT/AUDIO/PLAYLIST) with specific examples (highlights/replays, articles). It is distinct from sibling tools, which focus on other Cricket Australia data like fixtures, teams, or standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving paginated content lists by type, but it does not explicitly mention when to use this tool instead of alternatives (e.g., cricketaustralia_playlist for playlists specifically). It lacks explicit exclusions or alternative tool references, so the usage context is clear but not fully differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_fixturesARead-onlyIdempotent
Match list (the /matches feed) — fixtures with teams, venue, competition, status, toss and result. Filter by competition, completed/live, etc.
Returns: {fixtures:[{id, name, startDateTime, gameType, isLive, isCompleted, resultText, competitionId, venueId, homeTeamId, awayTeamId, tossResult, tossDecision}], responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season/calendar year (e.g. 2026). | |
| limit | No | Max fixtures to return. | |
| format | No | Response format. | json |
| isLive | No | Only live matches. | |
| jsconfig | No | Response-shape flag (leave as the default to get the camelCase envelope). | eccn:true |
| gameTypeId | No | Filter by game type (Test / ODI / T20). | |
| isCompleted | No | Only completed matches. | |
| competitionId | No | Filter to one competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints. The description adds 'Auth: none needed' and the response envelope including responseError, which are genuinely useful beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a clear purpose line, a filter note, a return shape, and an auth note. The field list in the Returns line is somewhat dense but serves as a substitute for an output schema, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 optional params, no output schema, and robust annotations, the description plus full schema coverage gives a complete picture of a read-only fixtures list. Minor gaps remain about default time ranges and pagination/limit behavior, but the overall context is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 8 parameters have schema descriptions (100% coverage), so the baseline is 3. The description's filter mention does not add parameter-specific detail beyond what the schema already provides, so it earns the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as 'Match list (the /matches feed)' and enumerates the contained fields (teams, venue, competition, status, toss, result), making the resource and scope clear. It does not explicitly contrast with siblings like scorecard or standings, but the feed-based framing is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states 'Filter by competition, completed/live, etc.,' giving clear context for when to use the tool and how to narrow results. It does not provide explicit alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_playersARead-onlyIdempotent
Player profiles for a batch of player ids — name, DOB, birthplace, batting/bowling hand + type, height, image. Pass a list of playerIds.
Returns: {players:[{id, displayName, firstName, lastName, dob, birthPlace, battingHand, bowlingHand, bowlingType, height, imageUrl}], responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
| playerIds | Yes | List of player ids (sent as a comma-separated list). Ids come from a scorecard's players[] or fixtures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by disclosing the exact return shape and noting 'Auth: none needed.' Since the annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, the additional return-structure and authentication context earns a solid score without needing to repeat safety flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: the first sentence states the core function, followed by a concise instruction and a structured return example. It avoids redundant filler and every sentence serves a purpose (purpose, input, return, auth).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only batch lookup, the description covers the essential context: what it does, how to specify input, the response format, and authentication. Minor gaps exist—no mention of batch size limits or detailed error handling—but these are not critical for the tool's straightforward use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage of all three parameters with descriptions (format, jsconfig, playerIds). The description's 'Pass a list of playerIds' adds no new semantic info beyond what the schema states; it only reinforces the required parameter. No additional meaning is provided for format or jsconfig beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Player profiles for a batch of player ids' and lists the specific fields returned (name, DOB, birthplace, batting/bowling hand + type, height, image). This specific verb+resource definition distinguishes it from other cricket tools that handle fixtures, scorecards, or competitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by stating 'Pass a list of playerIds' and explaining where those IDs come from: 'Ids come from a scorecard's players[] or fixtures.' This helps the agent construct correct calls, though it doesn't explicitly mention 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.
cricketaustralia_playlistARead-onlyIdempotent
A single Pulselive playlist by id — a curated collection of videos (e.g. a match's highlights playlist).
Returns: {id, type, title, description, date, content:[{id, type, title, ...}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Detail level. | STANDARD |
| pageSize | No | Max items to include. | |
| playlistId | Yes | Playlist id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety profile. The description adds the return shape and explicitly notes that no auth is needed, which is useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, return format, and auth. No redundant words; front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get-by-id tool, the description covers purpose, return format, parameters (via schema), and auth. It doesn't need to explain more; the example return shape gives a clear idea of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with playlistId, pageSize, and detail already described. The description adds no further parameter semantics, which is acceptable given the schema is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: a single Pulselive playlist by id, and clarifies it is a curated collection of videos like a match's highlights playlist. This clearly distinguishes it from the many other content and playlist-related siblings (e.g., pl_content, pl_video_latest).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage when you have a playlist id, but does not explicitly mention when to choose this over alternatives or provide exclusions. The context is clear but there is no comparative guidance, though no direct sibling does the same thing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_runs_graphARead-onlyIdempotent
Run-progression (worm/manhattan) data per innings for a fixture — the series behind cricket.com.au's run graphs.
Returns: {innings:[{inningNumber, battingTeamId, bowlingTeamId, overs, overnightRuns, overnightWickets, byesRuns, legByesRuns, noBalls}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
| fixtureId | Yes | Fixture id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds value by disclosing the exact return structure (innings array with fields like overs, overnightRuns, byesRuns) and stating 'Auth: none needed', which goes beyond what annotations provide. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences plus a compact return example. It front-loads the core purpose, then provides the return shape and auth requirement. Every sentence contributes meaningful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one required parameter and no output schema, the description is quite complete. It states what the tool does, the return structure, and auth requirements. It does not mention the optional format or jsconfig parameters, but the schema covers those, so this is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meanings are fully documented in the schema. The description does not add extra parameter details beyond mentioning 'per fixture', which maps to the required fixtureId. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Run-progression (worm/manhattan) data per innings for a fixture' and identifies it as the data behind cricket.com.au's run graphs. This specific verb+resource+context distinguishes it from sibling cricket tools like scorecards, fixtures, and standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when run-progression per innings is needed, but it gives no explicit guidance on when not to use it or which alternative tools to choose instead. Unlike the high-calibration example that names a sibling tool, this one lacks direct comparison, though the purpose is clear enough to infer typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_scorecardARead-onlyIdempotent
Full match scorecard — per-innings batting, bowling and fall-of-wickets, plus the players[] lookup for the fixture.
Returns: {fixture:{id, name, innings:[{inningNumber, battingTeamId, bowlingTeamId, batsmen:[...], bowlers:[...], wickets:[...]}]}, fixtureTitle, players:[{id, displayName}], dataSupport, responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
| fixtureId | Yes | Fixture id (from cricketaustralia_fixtures). | |
| competitionId | No | Optional competition id (some fixtures resolve faster with it). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds value by explicitly stating 'Auth: none needed' and providing the return structure, which is useful behavioral context beyond the annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose, followed by a structured return block. It includes only essential information: what the tool does, the return shape, and auth requirements. Every sentence earns its place, and the formatting makes it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by providing a detailed return structure. It also mentions auth requirements. While it does not describe limitations or error conditions, the simple read-only nature and the presence of responseError in the return make this sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description in the schema (e.g., fixtureId from cricketaustralia_fixtures, optional competitionId). The description adds no additional parameter semantics beyond what is already in the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full match scorecard — per-innings batting, bowling and fall-of-wickets', which is a specific verb+resource pairing. It distinguishes this tool from siblings like cricketaustralia_fixtures (list of fixtures) or cricketaustralia_runs_graph (a graph of runs), by specifying the detailed per-innings statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what data is returned (batting, bowling, fall-of-wickets), so an agent can infer it should be used when detailed scorecard data is needed. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or prerequisites beyond the fixtureId parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_standingsARead-onlyIdempotent
Competition ladder — per-team played/won/lost/drawn/tied/no-result, points, net run rate. Needs competitionId (empty for competitions without a points table).
Returns: {standings:[{competitionId, teamId, groupName, played, won, lost, drawn, matchTied, noResult, points, netRunRate, deductions}], responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
| competitionId | Yes | Competition id (from cricketaustralia_competitions or a fixture). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds value by specifying the exact return structure (standings list with fields) and the behavior for competitions without a points table (empty). It also states that no auth is needed, which is consistent with the annotations and adds practical context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is remarkably concise: two short paragraphs that define the tool's purpose, note the required parameter, list the return fields, and state auth requirements. Every sentence contributes information without redundancy, and the structure is front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of rich annotations and a full schema, the description covers all essentials: what it returns (including the responseError field), the required parameter, and a caveat about empty results. It does not explain ordering or pagination, but those are not critical for a simple read-only ladder tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond by reiterating the necessity of competitionId and explains the empty-result case for competitions lacking a points table, which adds behavioral meaning to the parameter. The source of the ID is also mentioned, though it is already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving a competition ladder with per-team statistics like played/won/lost, points, and net run rate. It specifies the resource (Cricket Australia standings) and distinguishes itself from sibling standings tools by naming the sport and the key requirement of a competitionId.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it for Cricket Australia competition standings, and notes that competitionId is required (with the caveat that competitions without a points table may return empty). It does not explicitly mention alternative tools for other sports, but the context is unmistakable given the tool name and the pointer to the competitions tool for obtaining the ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_streamsARead-onlyIdempotent
Live video stream entries for a fixture (populated during live matches; empty array otherwise).
Returns: {streams:[{...stream urls/metadata}], responseError} (streams empty when the match isn't live)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
| fixtureId | Yes | Fixture id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds useful behavioral context: streams are empty when the match isn't live, the return object shape, and that no auth is needed. This goes beyond the annotations and helps manage expectations without contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the core purpose and followed by return format and auth. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the key aspects: return shape, empty-array behavior, fixture context, and auth requirement. It does not detail the structure of stream URLs/metadata, but the schema and openWorldHint provide enough for an agent to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (fixtureId and jsconfig) having descriptions. The tool description adds no extra parameter meaning beyond what the schema already provides, which aligns with the baseline of 3 when the schema fully documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides live video stream entries for a fixture, which is a specific resource. It clearly distinguishes this from other cricket tools like scorecards or fixtures by focusing on streams, though it lacks a strong verb like 'retrieve' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates that streams are populated only during live matches, implying the tool is for live match usage. However, it does not explicitly name alternative tools for non-live scenarios or provide when-not-to-use guidance, which is a gap given the large sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_teamsARead-onlyIdempotent
Team catalogue — id, name, short name, colours, logo/badge URLs across all CA competitions.
Returns: {teams:[{id, name, shortName, teamColor, logoUrl, teambadgeImageUrl, isActive}], responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds valuable context: the exact return shape (teams array with fields, responseError) and authentication requirement (none needed). This goes beyond annotations and is especially useful given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. It begins with the core purpose and fields, then gives the return structure and auth note in two additional short sentences. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalogue tool with no required parameters, the description covers purpose, scope, return type, and auth. Since there is no output schema, providing the return structure is essential and done well. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (format and jsconfig) with descriptions. The tool description adds no additional parameter meaning, so the baseline of 3 applies; it neither enhances nor harms parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the tool is a 'Team catalogue' with specific fields (id, name, short name, colours, logo/badge URLs) across all CA competitions. The resource and scope are explicit, and it clearly distinguishes from sibling cricket tools like cricketaustralia_fixtures or cricketaustralia_players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool when you need team catalogue information. It does not explicitly mention alternatives or when not to use it, but the purpose is self-evident and no exclusions are needed for such a straightforward list function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_toursARead-onlyIdempotent
Tours / series with status flags — each tour groups its competitions and is flagged upcoming / in-progress / completed. The feed behind the site's series navigation.
Returns: {tours:[{competitionId, name, startDateTime, endDateTime, isUpComing, isInProgress, isCompleted, competitions:[...], bannerUrl, logoUrl}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, and idempotent, but the description adds substantial context: the exact return object structure, the meaning of status flags (upcoming/in-progress/completed), and an explicit 'Auth: none needed' statement. This goes well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: three short sentences plus a return-type block. It is front-loaded with the core purpose, followed by the output shape and auth, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only feed with two optional parameters and no output schema, the description fully covers the purpose, data semantics, return structure, and authentication requirements. An agent has enough information to decide when to call it and interpret the response confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters (format and jsconfig) with descriptions, so the baseline is 3. The description adds no additional parameter information or context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning tours/series with status flags and grouping competitions, and explicitly states it is the feed behind the site's series navigation. This resource-specific framing distinguishes it from sibling tools like fixtures or competitions without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context (tour-level feed for series navigation) but does not explicitly name when to avoid this tool or point to alternatives like cricketaustralia_fixtures for match-level data. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketaustralia_venueARead-onlyIdempotent
Venue detail for one venueId — name, city, country, state, coordinates. Resolve a fixture's venueId (one venue per call).
Returns: {venue:{id, name, city, state, countryName, latitude, longitude}, responseError}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. | json |
| venueId | Yes | Venue id (from a fixture's venueId). | |
| jsconfig | No | Response-shape flag (leave default). | eccn:true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, openWorldHint) already establish the safety profile. The description adds valuable context beyond that: the exact return shape ({venue:{...}, responseError}), which compensates for the absent output schema, and the auth requirement ('Auth: none needed'). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a purpose sentence, a usage note, a Returns line, and an Auth line. Every section earns its place, and the structure front-loads the core purpose before supporting details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one required parameter, the description is largely complete: it documents parameters (via schema), return shape (via Returns line), and auth. Minor gaps remain, such as not explaining when responseError is populated, but the overall package is sufficient for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three parameters (venueId, format, jsconfig) are documented in the schema itself. The description adds minimal extra meaning ('one venue per call'), so the baseline of 3 is appropriate; the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Venue detail for one venueId') and enumerates the returned fields (name, city, country, state, coordinates), making the tool's scope unmistakable. It also distinguishes itself from sibling tools like cricketaustralia_fixtures by stating it resolves a fixture's venueId one venue at a time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Resolve a fixture's venueId (one venue per call)' provides clear context for when to use this tool — after obtaining a venueId from fixture data — and implies a single-venue-per-call pattern. It does not explicitly name alternatives or exclusions, but the guidance is sufficiently contextual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_current_matchesARead-onlyIdempotent
Matches in progress or starting soon, with live scores.
Returns: {status:'success', data:[{id, name, matchType:'t20'|'odi'|'test', status, venue, date, dateTimeGMT, teams:[str], teamInfo:[{name, shortname, img}], score:[{r, w, o, inning}], series_id, matchStarted, matchEnded}], info:{hitsToday, hitsLimit}} — SHAPE FROM VENDOR DOCS. Score fields are terse: r runs, w wickets, o overs.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Live and upcoming matches
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Page offset (25 per page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses the return shape, explicitly warns that the shape is unverified and from vendor docs, instructs the agent to inspect actual payloads, and states the auth requirement (CRICKETDATA_API_KEY). This is valuable behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then provides the return shape, a critical caveat, an example, and auth info. It is somewhat long due to the embedded JSON shape, but each element earns its place. The 'Example: Live and upcoming matches' line is slightly redundant with the first sentence, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers the return payload shape, notes field abbreviations (r/w/o), warns about reliability, and mentions auth. It is complete and self-sufficient for an agent to invoke the tool and handle its response appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (offset) is fully described in the schema at 100% coverage ('Page offset (25 per page)'), so the description does not need to add much. It adds no new semantic detail about the parameter itself, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns matches in progress or starting soon with live scores. The name and first line together distinguish this from sibling cricketdata_matches, which likely covers all matches. The scope is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence gives a clear temporal context for when to use this tool ('in progress or starting soon'), and the example 'Live and upcoming matches' reinforces this. However, no explicit alternatives or when-not-to-use guidance is provided, though the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_matchesARead-onlyIdempotent
All matches, paginated — recent and upcoming across every series.
Returns: {status, data:[{id, name, matchType, status, venue, date, teams, teamInfo, series_id, matchStarted, matchEnded}], info:{hitsToday, hitsLimit}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Recent matches
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Page offset (25 per page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing pagination behavior, the exact return shape, and a critical caveat that the shape is unverified from vendor docs. It also explains the authentication requirement (CRICKETDATA_API_KEY). This is exceptionally transparent for an unverified vendor integration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, then provides return shape, caveat, example, and auth info. While the caveat adds length, it is essential for transparency. The 'Example: Recent matches' section is more of a heading than a real example, slightly reducing structure clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list endpoint with one optional parameter, the description covers the key aspects: scope, pagination, return shape, auth, and reliability caveat. It is complete enough for an agent to invoke the tool correctly, though it lacks explicit field descriptions (mitigated by the output shape being listed).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, offset, is fully described in the input schema as 'Page offset (25 per page)'. The description adds no further detail about the parameter, so it relies on the schema which already covers it. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'All matches, paginated — recent and upcoming across every series', specifying a concrete verb and resource. This distinguishes it from sibling tools like cricketdata_current_matches, which presumably returns only current matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all matches and mentions pagination, but does not explicitly contrast with alternatives such as cricketdata_current_matches or state when not to use this tool. Usage is inferred rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_match_infoARead-onlyIdempotent
One match: toss, venue, teams and result.
Returns: {status, data:{id, name, matchType, status, venue, date, dateTimeGMT, teams, teamInfo, score:[{r, w, o, inning}], tossWinner, tossChoice, matchWinner, matchStarted, matchEnded}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One match {"id": ""}
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id (from a match list). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context: it reproduces the return shape, explicitly warns that the shape is unverified and approximate, advises inspecting the live payload, and states the API key requirement. This goes beyond redundant annotation repetition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, return shape, caveat, example, and auth are each distinct and front-loaded. Every sentence carries information, and the caveat about vendor documentation is important and honestly presented. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup, the description covers the core purpose, input format, expected output shape, authentication, and an unverified-data warning. It does not mention error handling or live vs. historical match status, but the provided shape includes status/type fields, mitigating that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — the single 'id' parameter already has a clear description ('Match id (from a match list).'). The tool description does not add additional semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'One match: toss, venue, teams and result,' which clearly specifies a single-match lookup with a identifiable set of fields. It distinguishes itself from sibling tools like cricketdata_matches (lists) and cricketdata_scorecard (detailed scorecard) by scope and content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One match' plus the example with an id implies the tool is used when you already have a match id (e.g., from a match list). The context is clear, but no explicit alternative or when-not-to-use guidance is given relative to sibling match-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_player_infoARead-onlyIdempotent
One player's profile and career batting/bowling statistics.
Returns: {status, data:{id, name, dateOfBirth, role, battingStyle, bowlingStyle, placeOfBirth, country, playerImg, stats:[{fn:'batting'|'bowling', matchtype:'test'|'odi'|'t20i', stat:'m'|'runs'|'avg', value}]}} — SHAPE FROM VENDOR DOCS. NOTE stats is LONG format: one row per (function, format, statistic), not a nested object.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One player's career {"id": ""}
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Player id (from cricketdata_players). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint/openWorldHint annotations by explicitly warning that the return shape is from vendor docs and unverified, advising the agent to inspect actual payloads. It also discloses the long-format `stats` structure and the need for a CRICKETDATA_API_KEY, adding valuable behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections: purpose, return shape, caveat, example, and auth. While it is somewhat lengthy, every section carries necessary information—especially the unverified shape warning—and there is minimal redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by fully documenting the return shape, the long-format nuance, and the authentication requirement. It is reasonably complete for a single-parameter tool, though it does not cover error conditions or missing-data behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single `id` parameter, including provenance ('from cricketdata_players'). The description's example merely repeats the schema structure and adds no semantic depth beyond what is already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'One player's profile and career batting/bowling statistics,' which identifies the specific resource (player) and scope (single player). This distinguishes it from sibling tools like cricketdata_players (likely a list) and cricketdata_scorecard, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a player ID and need profile/career stats, and the example shows the input. However, it does not explicitly state when to prefer this tool over alternatives, nor does it provide exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_playersARead-onlyIdempotent
Search the player catalogue by name.
Returns: {status, data:[{id, name, country}], info:{hitsToday, hitsLimit}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Search players {"search": "Kohli"}
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Page offset. | |
| search | No | Partial player-name match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the need for an API key and an honest caveat that the return shape is unverified from vendor docs, which is useful context. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and well-structured, with the main purpose front-loaded. The return shape, example, and auth note are all relevant, though the formatting could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with two optional parameters and no output schema, the description provides an approximate return shape, an example, and auth requirements. It omits details about behavior when search is omitted and does not explain offset/pagination beyond the schema, but the provided information is fairly complete for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes both parameters (offset and search) with 100% coverage, so the baseline is 3. The description adds an example using 'search' but does not materially expand on the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Search the player catalogue by name,' which identifies a specific verb and resource. It does not explicitly distinguish this from sibling tools like cricketdata_player_info, but the search-by-name framing is clear enough for basic differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the core purpose and an example, implying that this tool is used when searching for players by name. However, it offers no explicit guidance on when to use this tool versus alternatives such as cricketdata_player_info, and no exclusions or prerequisites beyond the auth requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_scorecardARead-onlyIdempotent
Full scorecard: batting and bowling figures per innings.
Returns: {status, data:{id, name, scorecard:[{inning, batting:[{batsman:{id, name}, r, b, '4s', '6s', sr, 'dismissal-text'}], bowling:[{bowler:{id, name}, o, m, r, w, eco}], extras, totals}]}} — SHAPE FROM VENDOR DOCS. Cricket abbreviations: r runs, b balls, sr strike rate, o overs, m maidens, w wickets, eco economy.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One match's scorecard {"id": ""}
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds context beyond these by stating that an API key is required ('needs your own key in CRICKETDATA_API_KEY') and warning that the response shape is from vendor documentation and has not been verified, advising the agent to inspect the actual payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with purpose first, then return shape, abbreviations, warning, example, and auth. While relatively long, the information is relevant and organized, with the key purpose stated at the beginning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed JSON return shape, explains cricket abbreviations, gives an example, and notes the unverified nature of the shape. This gives the agent sufficient context to handle the response, despite the lack of a formal output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes the single parameter 'id' as 'Match id.' The description provides an example call using {'id': '<match id>'}, but this adds little beyond the schema. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Full scorecard: batting and bowling figures per innings,' clearly identifying the tool's function. This distinguishes it from sibling tools like cricketdata_match_info and cricketdata_current_matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It includes an example but does not explain when to use it over other scorecard or match tools, leaving the agent to infer usage from the name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_seriesARead-onlyIdempotent
Series (tours and tournaments) with their match counts and dates.
Returns: {status, data:[{id, name, startDate, endDate, odi, t20, test, squads, matches}], info:{hitsToday, hitsLimit}} — SHAPE FROM VENDOR DOCS. The format counts (odi/t20/test) are how many matches of each type the series holds.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All series
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Page offset. | |
| search | No | Partial series-name match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations by disclosing that the response shape is from vendor docs and unverified, advising to inspect the actual payload. It also mentions the API key requirement. This is valuable reliability information that annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for summary, return shape, notes, example, and auth. While it includes a detailed return shape, this is useful given no output schema. Each part contributes value, though slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters and no output schema, the description provides a complete picture: what data is returned, the meaning of match counts, a caveat about reliability, an example, and auth requirements. Missing pagination details are partially covered by schema defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (offset and search) with concise descriptions. The tool description does not add extra meaning beyond the schema, but since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns series (tours and tournaments) with their match counts and dates. The example 'All series' reinforces that it lists series. It does not explicitly differentiate from cricketdata_series_info, but the scope is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like cricketdata_series_info or other cricketdata tools. The description offers an example and auth note but no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cricketdata_series_infoARead-onlyIdempotent
One series with its full match list.
Returns: {status, data:{info:{id, name, startdate, enddate, odi, t20, test, squads, matches}, matchList:[{id, name, matchType, status, venue, date, teams}]}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One series {"id": ""}
Auth: needs your own key in CRICKETDATA_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Series id (from cricketdata_series). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent/openWorld annotations by disclosing that the return shape is unverified from vendor docs and that the agent must inspect the actual payload before relying on field names. It also explicitly mentions the authentication requirement, adding significant behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but each section (return shape, caveat, example, auth) is essential. It's not bloated, and the structure is clear with returns, notes, and example separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and no output schema, the description provides a thorough overview: return shape, unverified caveat, example, and auth. The warning about verifying the actual payload is crucial for an agent to use it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the single parameter (id) with source context. The description adds a small example of the JSON payload, but this is redundant with the schema's 100% coverage. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this retrieves a single series with its full match list, using a specific verb and resource scope. It distinguishes from siblings by explicitly saying 'One series' rather than a list tool like cricketdata_series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is for when you have a specific series id and need that series' details and matches. It doesn't explicitly name alternative tools for lists of series or matches, but the context is clear and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dabble_active_competitionsARead-onlyIdempotent
Every currently-bettable competition across all sports (~318) — the discovery entry point. Pick any one's id and pass it to dabble_competition_fixtures. Each carries name, sportName, country and a featured flag. Pass sportId to filter to one sport's active competitions.
Returns: {status, data:{activeCompetitions:[{id, name, sportName, country, featured, location, sportId}]}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Optional — filter active competitions to ONE sport (sportId from dabble_sports). Omit for all sports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, establishing the read-only nature. The description adds valuable context beyond annotations: the approximate count (~318), that no authentication is needed, and the exact return structure. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: it opens with the tool's purpose, then the usage flow, then field details, then return format and auth. Every sentence contributes. The only minor waste is the slight redundancy of the `sportId` filtering instruction already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only discovery tool with a single optional parameter, the description is fully complete. It provides scope (~318 competitions), the downstream recommendation, the response object shape, and authentication requirement, compensating for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single optional `sportId` parameter, including its source (dabble_sports) and the omit-for-all-sports behavior. The description repeats this filtering guidance but adds no new semantic detail beyond what the schema provides. Baseline of 3 is appropriate since schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every currently-bettable competition across all sports and serves as the discovery entry point. It also references the downstream tool dabble_competition_fixtures, which helps differentiate from that sibling. However, it does not explicitly contrast with the similarly named dabble_competitions sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is the discovery entry point, and users should pick an `id` and pass it to dabble_competition_fixtures. It also explains how to filter by `sportId`. It lacks explicit when-not-to-use guidance or direct comparison to alternatives like dabble_competitions, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dabble_competition_fixturesARead-onlyIdempotent
All fixtures for ONE competition, each embedding its markets + prices (decimal odds) + selections + teams. Get the competitionId from dabble_active_competitions / dabble_competitions (AFL Matches = ad4c78ec-e39d-45ee-8cec-ff5d485a3205, NRL = c709772d-d5d0-4252-af89-be8a163706dc). For the FULL book of one fixture use dabble_fixture_details.
Returns: {data:[{id, name, displayName, competitionId, competitionName, advertisedStart, status, inplayAvailable, teams:[{id, name, abbreviation}], markets:[{id, name, resultingType, product, isHandicap, isTotal, isSgmAllowed, status}], selections:[{id, name, marketId, isScratched}], prices:[{marketId, selectionId, price}]}]} (product is engine-derived from resultingType — see dabble_fixture_details.)
Example: AFL fixtures with markets + odds {"competitionId": "ad4c78ec-e39d-45ee-8cec-ff5d485a3205"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | Slim the payload by dropping embedded block(s) — pass any of markets / prices / selections (one or more, sent as repeated exclude[] params). Omit to include all. | |
| competitionId | Yes | Competition UUID — from dabble_active_competitions / dabble_competitions (any competition, not just AFL/NRL). Required — part of the URL path. | |
| includeInPlay | No | Include in-play fixtures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the bar is lower. The description adds behavioral context such as the response shape (nested markets/prices/selections/teams), decimal odds, and the note that product is engine-derived. It also mentions 'Auth: none needed,' 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose, sourcing, alternative, return format, example, and auth. Each sentence earns its place, though the inline return structure is somewhat long. Overall, it is efficient without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a full return payload structure. It covers usage, auth, example, and relationship to sibling tools. For a read-only, idempotent tool with strong annotations and schema, this is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description provides an example competitionId and points to sibling tools for sourcing, but does not add new meaning beyond what the schema already specifies for parameters like exclude or includeInPlay. It reinforces, rather than extends, parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'All fixtures for ONE competition, each embedding its markets + prices (decimal odds) + selections + teams,' which clearly defines the resource and action. It also differentiates from sibling tools by explicitly pointing to dabble_fixture_details for a full fixture book, making the purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it tells the agent to obtain competitionId from dabble_active_competitions / dabble_competitions, offers an example, and states 'For the FULL book of one fixture use dabble_fixture_details' as an alternative. This clearly delineates when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dabble_competitionsARead-onlyIdempotent
Look up competitions by EXACT name (name, case-sensitive; e.g. 'NRL', 'Premier League', 'AFL Matches' — note 'AFL' alone returns nothing) OR list EVERY competition for a sport (sportId, including ones not currently active — ~20 for AFL). Pass at least one filter: bare /competitions is the ~38 MB / 142k-row firehose (deliberately avoid). For browsing currently-bettable comps, prefer dabble_active_competitions.
Returns: {status, data:[{id, name, sportId, country}]} (filtered by name or sportId — empty if the exact name isn't found)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Exact competition name (e.g. 'NRL', 'Premier League', 'AFL Matches'). | |
| sportId | No | List all competitions for ONE sport (sportId from dabble_sports) — includes non-active ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, the description adds valuable behavioral context: case-sensitive exact matching, empty results for non-existent names, inclusion of non-active competitions, and the full response shape. These details go beyond the annotations and meaningfully inform the agent's expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence serves a distinct purpose: describing the primary lookup modes, warning about the bare endpoint, pointing to the alternative tool, specifying the return format, and noting auth requirements. The structure is front-loaded and well-organized, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description provides the exact return structure, edge-case behavior (empty results), and a performance warning about the unfiltered endpoint. Combined with the annotations and parameter semantics, the description is fully sufficient for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description significantly enriches both parameters. It clarifies that 'name' is exact and case-sensitive with examples (e.g., 'AFL' alone returns nothing), explains that 'sportId' includes non-active competitions, and warns that at least one filter is needed despite the schema listing zero required parameters. This compensates for schema optionality and prevents misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up competitions by exact name OR lists every competition for a sport, with a specific verb-resource pairing. It explicitly distinguishes itself from dabble_active_competitions by noting the preference for browsing currently-bettable comps, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use contexts: exact name lookups or broad sport-wide listings. It also warns against calling without filters (the ~38 MB / 142k-row firehose) and recommends dabble_active_competitions as an alternative, providing clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dabble_fixture_detailsARead-onlyIdempotent
The FULL book for one fixture — every market (hundreds), all selections + prices, the marketGroups (SGM grouping) and the Pick'em playerProps product. LARGE (~1 MB+ for a major match); fetch one fixture at a time. fixtureId comes from dabble_competition_fixtures. Each market gets an engine-derived product: SGM legs by Dabble's capability flags (isSgmAllowed && !isSingleAllowed) so it's robust to the SGM vendor (SportCast today) changing; Pick'em by the pickem token (e.g. odds_on_pickem_goals) and racing by the Racing* resultingType — both first-party naming. RACING resultingTypes: RacingFixed*/RacingSP*=win/place, RacingDD*=exotics, RacingSrm*=Same-Race-Multi (no Pick'em in racing).
Returns: {sportFixtureDetail:{id, name, competitionName, sportName, status, teams, markets:[{id, name, resultingType, product, isSgmAllowed, isSingleAllowed}], selections:[{id, name, marketId}], prices:[{marketId, selectionId, price}], marketGroups, marketGroupMappings, playerProps:[{playerName, stats, value, lineType}]}} (LARGE — markets/selections/prices number in the hundreds-to-thousands. Each market carries an engine-derived product ∈ {single, sgm, pickem, srm, racing}: RacingSrm*→srm, Racing*→racing, resultingType-contains-pickem→pickem, else isSingleAllowed→single, else isSgmAllowed→sgm, else→single. Use product ∈ {single, sgm} for like-for-like price comparison; NEVER blend pickem multipliers into fixed-odds value/arb.)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| fixtureId | Yes | Fixture UUID (from dabble_competition_fixtures.data[].id). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses the response size, the complete return structure, the engine-derived product classification logic (with precise rules based on capability flags and resultingType), and that no auth is needed. It also warns against blending pickem multipliers into fixed-odds calculations, adding valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, but it is well-structured: the first sentence states the core purpose, and each subsequent paragraph addresses a specific aspect (size, product derivation, return shape, usage caution). It is not padded, but the sheer length prevents a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only one parameter, the description fully compensates by specifying the exact return shape, the product classification rules, size warnings, and appropriate usage cautions. It gives an agent everything needed to correctly invoke and interpret the tool's results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for fixtureId, including its source (dabble_competition_fixtures) and that it is required. The description repeats this source but adds no new parameter-specific semantics, so it meets the baseline of 3 without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'The FULL book for one fixture' and explicitly enumerates the contents: every market, selections + prices, marketGroups, and Pick'em playerProps. This clearly states the tool's function (returns detailed fixture data) and distinguishes it from siblings like dabble_competition_fixtures, which likely only list fixtures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the user that fixtureId comes from dabble_competition_fixtures and warns that the response is LARGE (~1 MB+), advising to fetch one fixture at a time. This provides clear usage context, but it does not explicitly name alternative tools or state when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dabble_sportsARead-onlyIdempotent
The 24 sports Dabble offers (Rugby League, Australian Rules, Football, Basketball, Cricket, Tennis, Horse Racing, …), each with id + name. Join sportId from a competition back to its sport here.
Returns: {status, data:[{id, name, isRacing, isHidden}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds useful context beyond that: it states that auth is not needed, and it discloses the exact return shape ({status, data:[{id, name, isRacing, isHidden}]}) and the fixed count of 24 sports. This gives the agent a solid understanding of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: it leads with the core purpose, then the return shape, then auth. Every sentence earns its place. No fluff or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with no parameters, the description is fully complete. It explains the returned fields, the function (join with competitions), and authentication requirements. There is no output schema, so the explicit return format is critical and provided. The context from sibling tools further clarifies its niche.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (empty input schema), so parameter explanations are unnecessary. The baseline for a zero-parameter tool is 4, and the description appropriately provides no redundant parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the 24 sports offered by Dabble, each with an ID and name. It also explains its role as a lookup for joining sportId from competitions, distinguishing it from sibling tools like dabble_competitions or dabble_active_competitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this to join sportId from a competition back to its sport. It doesn't explicitly mention when not to use it, but the purpose is specific enough that the agent can infer when it's appropriate. No exclusions or alternatives are listed, so it's clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_approach_skillARead-onlyIdempotent
Detailed approach-play skill per player across yardage/lie buckets — SG per shot, proximity, GIR, good-shot and poor-shot-avoidance rates.
Returns: {last_updated, time_period, data:[{dg_id, player_name, ...per-bucket sg/proximity/gir fields}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Window: last 24 months, last 12 months, or year-to-date. One of: l24, l12, ytd. | l24 |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent hints, so the description adds extra value by specifying the auth requirement (DATAGOLF_KEY) and the exact return structure. It could mention rate limits or filtering limitations, but the provided context is meaningful enough to warrant a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, front-loaded with purpose, and structured into a main sentence plus Returns and Auth sections. Every sentence offers functional value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite not having an output schema, the description provides the return shape and critical auth context. With good annotations and only two optional parameters, this is a complete and self-sufficient description for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters (period, file_format) having clear descriptions and enums. The description does not add further param details, but the schema already carries the burden. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('approach-play skill per player') and the specific metrics (SG per shot, proximity, GIR, rates). 'Detailed' adds specificity. While it doesn't explicitly distinguish from siblings, the niche focus is enough to differentiate it from tools like datagolf_skill_ratings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case through the metric details, but it offers no explicit 'use this when' guidance or mention of alternatives like datagolf_player_decompositions. This is an implied usage scenario, not a clear directive with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_fantasy_projectionsARead-onlyIdempotent
DFS fantasy-points projections + salaries/ownership for a site + slate.
Returns: {event_name, last_updated, projections:[{dg_id, player_name, proj_points, salary, proj_ownership}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | DFS site. One of: draftkings, fanduel, yahoo. | draftkings |
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| slate | No | Slate (e.g. main). | main |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description adds meaningful behavioral context by specifying the authentication requirement ('needs your own key in DATAGOLF_KEY') and the exact return shape, which is valuable since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with a clear first sentence stating the function, a second listing the return structure, and a brief auth note. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by showing the return object structure and the auth requirement. It covers the key context (site, slate) and all parameters are documented in the schema, though it would benefit from clarifying valid file_format values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (site, tour, slate, file_format) has a description in the schema. The tool description does not add extra parameter semantics beyond mentioning site and slate, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'DFS fantasy-points projections + salaries/ownership for a site + slate', clearly identifying the resource and parameterization. It also includes the return structure, distinguishing it from other datagolf tools like datagolf_hist_dfs_event_list. This is a specific, non-tautological statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context (for a site + slate) and mentions auth, but does not explicitly state when to use this tool over sibling tools such as datagolf_hist_dfs_event_list or datagolf_pre_tournament. There are no alternatives or exclusions, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_field_updatesARead-onlyIdempotent
Current event field — players entered, tee times, withdrawals, current round.
Returns: {event_name, event_id, course_name, current_round, date_start, date_end, field:[{dg_id, player_name, ...tee times}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the description need not repeat those. It adds valuable context: the return object structure (event details and field array), inclusion of withdrawals and tee times, and an explicit authentication requirement (DATAGOLF_KEY). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a clear purpose line, a return format line, and an auth line. Every sentence adds information and there is no waste. The front-loading of the purpose makes it immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with 2 parameters and no output schema, the description is sufficiently complete: it describes what data is returned, gives an outline of the JSON structure, and mentions the required API key. Minor gap: 'current event' could be ambiguous if multiple events run concurrently, but overall it is adequate for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, covering both parameters (tour with enum, file_format). The description adds no extra parameter semantics beyond the schema, so the baseline of 3 is appropriate because the schema carries the heavylifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides the current event field with players entered, tee times, withdrawals, and current round. This distinguishes it from sibling datagolf tools (e.g., datagolf_pre_tournament, datagolf_in_play) by specifying a unique resource and content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied via 'Current event field', signaling this is for live/current events rather than historical ones, but no explicit alternatives are named (e.g., 'for historical data use datagolf_hist_*'). There is no clear when-to-use or when-not-to-use guidance relative to the many datagolf siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_dfs_event_listARead-onlyIdempotent
List of historical events with DFS salary/ownership/points data for a site.
Returns: [{event_id, event_name, calendar_year, date, dk_salaries, dk_ownerships}] (top-level array)
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | DFS site (this feed keys off site, not tour). One of: draftkings, fanduel, yahoo. | draftkings |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it requires a user-provided DATAGOLF_KEY and specifies the top-level array return structure. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a return shape, and an auth note. Every sentence earns its place with no fluff or redundancy. It is easy to parse and front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a return array example, which helps. However, it is inconsistent: it mentions 'points data' but the return example lacks any points field, and the fields are hardcoded as 'dk_salaries' even though the tool supports multiple sites. This incomplete/misleading return info leaves gaps for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of both parameters (site and file_format) with descriptions and enums. The description adds no additional parameter semantics beyond saying 'for a site', which is already in the schema. Baseline of 3 is appropriate since schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List of historical events with DFS salary/ownership/points data for a site.' The verb 'List' plus the specific resource (historical events with DFS data) is precise. It distinguishes itself from sibling tools like datagolf_hist_event_list by explicitly mentioning DFS salary/ownership/points data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (historical DFS events) but gives no explicit guidance on when to use this tool over alternatives, nor any exclusions or when-not scenarios. The auth note is a prerequisite, not usage guidance. The 'site' parameter is mentioned but not framed as a choice criterion among similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_dfs_pointsARead-onlyIdempotent
Historical DFS points + salary + ownership per player for a past event.
Returns: {event_id, event_name, event_completed, season, dfs_points:[{dg_id, player_name, fin_text, finish_pts, total_pts, salary, ownership}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | DFS site. One of: draftkings, fanduel, yahoo. | draftkings |
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| year | Yes | Calendar year. | |
| event_id | Yes | Event id. | |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds valuable context beyond annotations by specifying the exact return structure and the need for a DATAGOLF_KEY for authentication. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and front-loaded: a one-sentence purpose, a compact return schema, and a single auth note. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description provides the full return shape, which is essential for the agent. It also covers auth. However, it doesn't explain the relationship to datagolf_hist_dfs_event_list for discovering valid event IDs, which is a minor gap given the tool's moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds little about parameter behavior, only referencing 'past event' which loosely maps to event_id and year, but this is sufficient given the schema's thoroughness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Historical DFS points + salary + ownership per player for a past event', which identifies the specific resource and data returned. It is distinct from siblings like datagolf_hist_rounds or datagolf_hist_results by focusing on DFS-specific data, though it doesn't explicitly name alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives minimal usage context, only implying it is for past events. It does not mention when to use this instead of related tools like datagolf_hist_dfs_event_list or datagolf_fantasy_projections, nor does it note prerequisites such as obtaining an event_id from another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_event_listARead-onlyIdempotent
List of historical events that have raw round-level data available (event_id + year to pass to the rounds feed).
Returns: [{event_id, event_name, tour, calendar_year, date, sg_categories}] (top-level array)
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Optional tour filter. One of: pga, euro, kft, alt, liv. | |
| year | No | Optional calendar-year filter. | |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior. The description adds useful context beyond annotations: it mentions the return shape (array of fields), the authentication requirement, and the specific availability condition ('raw round-level data available'). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose first, then return format, then auth. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no required parameters and full schema coverage, the description provides all essential context: what it returns, the output shape, and authentication. It also includes a usage hint about passing values to the rounds feed, making it self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a clear description. The tool description does not add extra meaning beyond the schema, but it does reference the output fields (event_id, year) that pair with the rounds feed, which is somewhat helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists historical events with raw round-level data available, and specifies the return fields. This distinguishes it from sibling tools like datagolf_hist_results_event_list, which list different types of historical events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the event_id and year can be passed to the rounds feed, giving clear downstream usage. However, it does not explicitly mention when not to use this tool or compare it directly to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_matchupsARead-onlyIdempotent
Historical matchup / 3-ball odds for a past event from one sportsbook.
Returns: {book, event_id, event_name, event_completed, matchups:[{p1_player_name, p2_player_name, open_odds, close_odds, ...}]}
Auth: needs your own key in DATAGOLF_KEY.
Also answers this: cfbd_betting_lines, footballdatauk_season, theoddsapi_historical_odds.
| Name | Required | Description | Default |
|---|---|---|---|
| book | No | Sportsbook. | pinnacle |
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| year | Yes | Calendar year. | |
| event_id | Yes | Event id. | |
| file_format | No | Response format. | json |
| odds_format | No | Odds format. One of: decimal, american, fraction, percent. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat that. It adds value by stating the auth key requirement (DATAGOLF_KEY) and providing a partial return structure, which goes beyond what annotations convey. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively brief and front-loaded with the main purpose, but the final line 'Also answers this: cfbd_betting_lines, footballdatauk_season, theoddsapi_historical_odds.' is confusing and appears unrelated to this tool's scope. This noise detracts from clarity and structure, warranting a below-average score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters, no output schema, and no nested objects. The description provides a return structure skeleton and auth note, but lacks guidance on how to discover event_id/year, how to interpret odds_format, or how to handle errors. The confusing 'Also answers' line further reduces completeness, so adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning every parameter has a basic description (e.g., 'Event id.', 'Calendar year.'). The description does not add extra meaning about how parameters interact or format expectations, so it relies on the schema. Per calibration, baseline is 3 when coverage is high, and no additional parameter info is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Historical matchup / 3-ball odds for a past event from one sportsbook,' which clearly specifies the verb (retrieve odds), the resource (historical matchups), and distinguishes it from current-matchup tools. The return structure further reinforces the exact purpose, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions 'for a past event' and 'from one sportsbook,' which provides clear context for when to use it (historical data) but does not explicitly name alternative tools or state exclusions. It also notes the auth requirement, which is practical guidance. No explicit 'when not to use' is given, so a slight deduction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_odds_event_listARead-onlyIdempotent
List of historical events that have archived bookmaker odds available.
Returns: [{event_id, event_name, calendar_year, archived_preds, ...}] (top-level array)
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds meaningful behavior details beyond annotations: the return format (top-level array) and the authentication requirement (DATAGOLF_KEY). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: a single purpose sentence, a return-type line, and an auth line. Every sentence earns its place with no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers the essential points: what is listed, the return shape, and required auth. However, it does not clarify how the tour parameter filters the events or what archived_preds represents, leaving minor gaps despite schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions for tour and file_format. The description adds no additional semantic meaning about these parameters, so the baseline score of 3 applies as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('List') and clearly identifies the resource: 'historical events that have archived bookmaker odds available'. This distinguishes it from sibling tools like datagolf_hist_event_list, which lacks the odds qualifier. The example return fields further reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as datagolf_hist_event_list or datagolf_hist_results. It only mentions an auth requirement, not the contexts in which this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_outrightsBRead-onlyIdempotent
Historical opening/closing outright odds for a past event from one sportsbook.
Returns: {book, event_id, event_name, event_completed, outrights:[{dg_id, player_name, open_odds, close_odds, ...}]}
Auth: needs your own key in DATAGOLF_KEY.
Also answers this: cfbd_betting_lines, footballdatauk_season, theoddsapi_historical_odds.
| Name | Required | Description | Default |
|---|---|---|---|
| book | No | Sportsbook (e.g. pinnacle, bet365, draftkings). | pinnacle |
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| year | Yes | Calendar year. | |
| market | No | Outright market. One of: win, top_5, top_10, top_20, make_cut, mc, frl. | win |
| event_id | Yes | Event id. | |
| file_format | No | Response format. | json |
| odds_format | No | Odds format. One of: decimal, american, fraction, percent. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by specifying it requires an API key in DATAGOLF_KEY and showing the return structure. This is consistent with the read-only and idempotent hints. However, it does not disclose potential limitations (e.g., which sportsbooks are actually supported beyond the examples) or behavior on invalid inputs, and the odd 'Also answers this' line introduces irrelevant information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short and front-loads the core purpose, then includes return structure and auth. However, the 'Also answers this' line is gratuitous and appears to be an error, adding noise without improving clarity. The structure otherwise works, but the stray content lowers the score from a potential 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives enough for an agent to understand what the tool does, its auth requirement, and the shape of the result. Missing is guidance on how to obtain event_id and year (though year is calendar year). The confusing reference to other tools undermines completeness. Overall, it is adequate but not thorough for a tool with 7 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description provides context about historical odds and the return fields (open_odds, close_odds) which helps understand the market and odds_format parameters, but it does not add significant new meaning beyond what the schema already specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns historical opening/closing outright odds for a past event from one sportsbook, which is specific and distinct. However, the stray line 'Also answers this: cfbd_betting_lines, footballdatauk_season, theoddsapi_historical_odds.' is confusing and muddies the purpose, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this is for historical odds but does not explicitly contrast with alternatives such as datagolf_outrights (current odds) or other historical tools like datagolf_hist_matchups or datagolf_hist_results. No guidance is given on when to choose this tool over siblings, leaving the agent to infer based on the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_resultsARead-onlyIdempotent
Historical event-level results for a past tournament — finish position, earnings, FedExCup points and DG Points per player.
Returns: {event_id, event_name, year, season, event_completed, event_stats:[{dg_id, player_name, fin_text, earnings, fec_points, dg_points}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour (PGA only for this feed). | pga |
| year | Yes | Calendar year of the event. | |
| event_id | Yes | Event id (from datagolf_hist_results_event_list). | |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe read-only nature is known. The description adds a required auth note (DATAGOLF_KEY) and provides the complete return structure with event_stats array, which is valuable behavioral context beyond the annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one purpose sentence, a return template, and an auth note. It is front-loaded with the tool's primary function and contains no fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return shape and auth requirement, which are essential for a tool without an output schema. It omits details like pagination or rate limits, but for a historical data retrieval tool these are less critical. The PGA-only tour constraint is present in the schema, though not repeated in the description, so coverage is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all four parameters with descriptions, including event_id's source from datagolf_hist_results_event_list. The tool description does not add further parameter-level detail beyond what's already in the schema, so the baseline of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource+scope: 'Historical event-level results for a past tournament', and enumerates the key data fields (finish position, earnings, FedExCup points, DG Points). This distinguishes it from sibling tools like datagolf_hist_rounds or datagolf_hist_odds, which serve different data needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its usage context (past tournaments, event-level results) but does not explicitly contrast with alternative tools or state when to prefer this tool over others. The schema reference to datagolf_hist_results_event_list hints at a workflow, but exclusions or alternative recommendations are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_results_event_listARead-onlyIdempotent
List of tournaments with historical event-level results data (finishes/earnings/points) — the id lookup for datagolf_hist_results.
Returns: [{event_id, event_name, calendar_year, date}] (top-level array)
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour (PGA only for this feed). | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds valuable context beyond this: the required authentication via DATAGOLF_KEY and the top-level array return shape, which helps set expectations for invocation and output handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact with clear labeling: main purpose, return format, and auth requirement. Each sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no required parameters and full schema coverage, the description supplies the essential missing context: the return shape (list of event objects with fields) and the auth requirement. It's adequate for an agent to invoke it correctly, though it doesn't mention potential pagination or sorting, which would be nice but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('tour' and 'file_format') already documented with defaults and constraints. The description adds no additional parameter-level information, so it relies entirely on the schema – consistent with the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists tournaments with historical event-level results data and explicitly identifies itself as the ID lookup for datagolf_hist_results. This makes the tool's purpose and distinction from related data-retrieval siblings evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear usage context (ID lookup for datagolf_hist_results) but stops short of explicitly stating when-not to use it or listing alternatives. The implied workflow is clear enough for an agent to understand when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_hist_roundsARead-onlyIdempotent
Historical round-by-round scoring + strokes-gained for every player in a past event.
Returns: {event_id, event_name, event_completed, scores:[{dg_id, player_name, fin_text, rounds:[{round_num, score, sg_total, sg_putt, ...}]}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| year | Yes | Calendar year of the event. | |
| event_id | Yes | Event id (from datagolf_hist_event_list). | |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds the full return structure ('Returns: {event_id, event_name, event_completed, scores:[...]}') and an authentication requirement ('needs your own key in DATAGOLF_KEY'). It does not contradict the annotations. This adds meaningful behavioral context about output shape and auth without being redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise, focused lines: the core purpose, the return structure, and the auth requirement. Each sentence adds necessary information with no filler or redundant content. It is front-loaded with the main functionality and well-structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a detailed return structure. It also covers authentication. It does not mention error conditions or how to find event_id, but the schema covers that. For a moderately complex historical data tool, the description is almost complete; a small example or note about the '...' fields would push it higher.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all four parameters (100% coverage), so the baseline is 3. The description does not add any parameter-specific meaning beyond implying that the tool targets a specific past event (via 'event_id' and 'year' being required in the schema). No additional context is given for tour, file_format, or how to obtain event_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Historical round-by-round scoring + strokes-gained for every player in a past event.' This is specific, uses a clear resource (round-by-round player scores in a past event), and distinguishes it from sibling tools like datagolf_hist_results or datagolf_hist_event_list by emphasizing round-level detail and strokes-gained metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for past events ('Historical', 'past event') but does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions. The schema mentions event_id is from datagolf_hist_event_list, but that is not in the description. No clear guidance on when to choose this over datagolf_hist_results or other historical tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_in_playARead-onlyIdempotent
Live (in-play) model predictions during a tournament — current position/score + updated win probabilities.
Returns: {data:[{dg_id, player_name, current_pos, current_score, R1, R2, R3, R4, make_cut, win, ...}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
| odds_format | No | Odds/probability format. One of: percent, decimal, american, fraction. | percent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context: authentication requirement (DATAGOLF_KEY) and the return shape with sample fields. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line summary, a return type example, and an auth note. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only data retrieval tool with no output schema, the description covers the essential aspects: purpose, return format, and authentication. It could mention behavior when no live tournament exists, but given the simple parameter set and annotations, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described adequately (tour, file_format, odds_format). The description does not add further meaning to these parameters beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides live (in-play) model predictions during a tournament, specifically current position/score and updated win probabilities. This distinguishes it from sibling tools like datagolf_pre_tournament and datagolf_live_strokes_gained by focusing on in-play predictions and probability updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this is for live/in-play tournament usage, implying it should be used when a tournament is ongoing rather than pre-tournament. It does not explicitly name alternatives or exclusions, but the 'Live (in-play)' phrasing and 'during a tournament' signal when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_live_hole_statsARead-onlyIdempotent
Live per-hole scoring distributions for the in-progress event (avg score, birdie/bogey rates by hole, AM/PM wave).
Returns: {courses:[{course_code, course_key, rounds:[{round_num, holes:[{hole, par, avg_score, afternoon_wave:{...}, morning_wave:{...}}]}]}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable context beyond annotations: it reveals the exact return structure, the auth requirement (DATAGOLF_KEY), and the live nature of the data (in-progress). This goes beyond what annotations alone convey, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence summary of the tool's purpose, a compact return schema example, and an auth note. Every sentence earns its place, and the most important information (what it does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by fully specifying the return structure (courses → rounds → holes with avg_score and wave details). It also covers auth requirements and the in-progress scope. With schema covering params and annotations covering safety, this description is complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'tour' and 'file_format' have descriptive text in the schema. The description does not add additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Live per-hole scoring distributions for the in-progress event' with specifics like avg score, birdie/bogey rates by hole, and AM/PM wave. This distinguishes it from sibling datagolf tools such as datagolf_live_strokes_gained (strokes gained) and datagolf_live_tournament_stats (tournament-level stats), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the in-progress event' provides clear temporal context, indicating this tool is appropriate when a golf event is live. It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to differentiate from pre-tournament or historical tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_live_strokes_gainedARead-onlyIdempotent
Live strokes-gained breakdown for every player during PGA Tour events (raw, or relative to the model's pre-round expectations).
Returns: {event_name, current_round, last_update, strokes_gained_values, data:[{dg_id, player_name, pos, score, thru, today, R1:{...sg}, R2, R3, R4}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sg | No | Raw SG values, or relative to model predictions. | raw |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, world-open, and idempotent, so the safety profile is covered. The description adds valuable behavioral context: it requires an API key (DATAGOLF_KEY) and provides the response structure, including fields like current_round, last_update, and per-round strokes-gained data. This goes beyond the annotations and helps the agent understand the operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence summary, a clearly labeled return shape, and an auth note. Each part serves a purpose: summary for quick understanding, returns for output expectations, and auth for prerequisite. It is front-loaded and avoids unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description compensates by providing a detailed return structure with example fields and explains authentication. It covers the essential context for invoking the tool successfully. It does not elaborate on edge cases like empty events or pagination, but for a live data tool with no required parameters, the coverage is sufficient for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'sg' and 'file_format' are described in the input schema. The description repeats the sg distinction (raw vs relative) but does not add any new parameter details. According to the rubric, baseline 3 is appropriate when the schema fully documents the parameters, and the description provides no additional semantic value beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: live strokes-gained data for every player in PGA Tour events. It uses a specific noun phrase 'Live strokes-gained breakdown' which is recognizable among sibling tools like datagolf_live_hole_stats and datagolf_live_tournament_stats, though the verb is implicit (retrieve/get is implied). It distinguishes itself by the focus on strokes gained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for live PGA Tour strokes-gained data, and the mention of 'raw or relative to model expectations' gives a hint at the sg parameter. However, it does not explicitly contrast with sibling tools like datagolf_live_tournament_stats or datagolf_in_play, nor does it state when not to use this tool. Context is present but exclusions and alternatives are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_live_tournament_statsARead-onlyIdempotent
Live per-player tournament stats (strokes-gained by category, accuracy, etc.) for the requested round.
Returns: {event_name, course_name, last_updated, live_stats:[{dg_id, player_name, sg_total, sg_ott, sg_app, ...}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| round | No | Which round (or cumulative/average). One of: event_cumulative, event_avg, 1, 2, 3, 4. | event_cumulative |
| stats | No | Stat categories to include (CSV). | sg_putt,sg_arg,sg_app,sg_ott,sg_t2g,sg_total,distance,accuracy,gir,prox_fw,scrambling |
| display | No | Values or ranks. | value |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context beyond annotations: it specifies the exact return structure (with example fields) and notes the auth requirement ('Auth: needs your own key in DATAGOLF_KEY'). This helps the agent understand data shape and setup needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: a one-line summary immediately explains what the tool does, followed by a compact Returns block and a necessary Auth note. Every section earns its place with no redundant or filler content, and the line breaks improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description adequately covers the return shape with a detailed Returns block, and it communicates the auth key requirement. It does not explain when an event must be live (e.g., tournament in progress) or discuss error cases, but the annotations and schema cover other aspects. This is reasonably complete for a live stats endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with each parameter (round, stats, display, file_format) well-documented, so the description does not need to compensate. The description's Returns block provides example stat fields like sg_total and sg_ott, which hints at the stats parameter values, but this adds little beyond the schema's already clear explanations. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Live per-player tournament stats (strokes-gained by category, accuracy, etc.) for the requested round.' This uses a specific verb and resource, and explicitly lists stat categories that differentiate it from sibling tools like datagolf_live_strokes_gained (which focuses only on strokes-gained) and datagolf_live_hole_stats. The Returns block further clarifies the output scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for live tournament stats by calling out 'Live' and 'tournament stats', but it does not explicitly state when to use this tool over alternative datagolf tools like datagolf_live_strokes_gained or datagolf_live_hole_stats. There is no mention of exclusions or alternative selection criteria, so guidance is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_matchupsBRead-onlyIdempotent
Tournament / round / 3-ball matchup odds across sportsbooks, plus Data Golf's model line.
Returns: {event_name, market, last_updated, match_list:[{p1_player_name, p2_player_name, odds:{datagolf, bet365, pinnacle, ...}}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| market | No | Matchup market. One of: tournament_matchups, round_matchups, 3_balls. | tournament_matchups |
| file_format | No | Response format. | json |
| odds_format | No | Odds format. One of: decimal, american, fraction, percent. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a return structure and the requirement for a DATAGOLF_KEY, but does not disclose other behavioral traits such as data freshness, pagination, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a one-sentence summary followed by a compact return shape and auth note. Every sentence provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a partial output schema in the Returns block and notes the authentication requirement, which is helpful given no output schema exists. It covers the essential usage context, although it could be more explicit about how odds keys vary across sportsbooks or the live/historical nature of the data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well-documented with enums and defaults. The description adds no extra meaning beyond the schema, making this a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides tournament, round, and 3-ball matchup odds across sportsbooks plus Data Golf's model line. This is specific about the resource and scope, but it does not explicitly differentiate from the similarly named sibling datagolf_matchups_all_pairings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use guidance or mention alternatives. While the purpose implies use for matchup odds in these markets, there is no contrast with sibling tools like datagolf_matchups_all_pairings or historical matchup tools, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_matchups_all_pairingsARead-onlyIdempotent
All possible tournament matchup pairings for the current event with Data Golf's model odds (every player-vs-player price).
Returns: {event_name, last_update, pairings:[{p1_player_name, p2_player_name, p3_player_name, ...model odds}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
| odds_format | No | Odds format. One of: decimal, american, fraction, percent. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is covered. The description adds valuable behavioral context beyond annotations by detailing the return structure and highlighting the authentication requirement (DATAGOLF_KEY), which is not obvious from schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the core purpose, followed by a brief return structure and auth note. Every sentence provides necessary information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description provides a simplified return format that is sufficient for agents to understand the response shape. Combined with readOnly/idempotent hints and the auth note, the description covers all essential aspects for successful invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage, with all three parameters (tour, file_format, odds_format) fully described. The description adds no extra parameter-level detail beyond what the schema already states, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'All possible tournament matchup pairings for the current event' with Data Golf's model odds, specifying the resource (matchup pairings) and that it covers every player-vs-player price. This distinguishes it from siblings like datagolf_matchups by emphasizing the exhaustive 'all pairings' nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by specifying 'current event', implying this is for ongoing tournaments, and the 'All possible' phrasing sets expectations for comprehensive coverage. However, it does not explicitly mention when to use this instead of alternatives like datagolf_matchups, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_outrightsARead-onlyIdempotent
Outright (win / top-N / make-cut) odds for the current event across ~13 sportsbooks, plus Data Golf's model line.
Returns: {event_name, last_updated, books_offering:[...], odds:[{dg_id, player_name, datagolf:{...}, bet365, pinnacle, draftkings, fanduel, ...}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| market | No | Outright market. One of: win, top_5, top_10, top_20, make_cut, mc, frl. | win |
| file_format | No | Response format. | json |
| odds_format | No | Odds format. One of: decimal, american, fraction, percent. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds significant value by disclosing the auth requirement ('needs your own key in DATAGOLF_KEY') and the response structure (event_name, last_updated, books_offering, odds). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one sentence for purpose, a return block, and one for authentication. Every element earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes a detailed return structure, the current-event scope, the number of sportsbooks, and the auth requirement. This is complete for a read-only odds tool with annotations already covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; all four parameters have descriptions, enums, and defaults in the input schema. The description's mention of 'win / top-N / make-cut' aligns with the market enum but does not add meaningful details beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns 'Outright (win / top-N / make-cut) odds for the current event across ~13 sportsbooks, plus Data Golf's model line.' This identifies the resource (outright odds), scope (current event), and differentiates it from historical or matchup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for 'the current event' and focuses on outright odds, implicitly distinguishing it from historical or in-play tools. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_player_decompositionsARead-onlyIdempotent
Per-player skill decomposition for the current event — how each skill (driving, approach, putting, course-fit) contributes to the prediction.
Returns: {event_name, course_name, players:[{dg_id, player_name, ...skill/course-fit components}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world safety. The description adds valuable context: it requires a personal DATAGOLF_KEY, returns a specific object structure, and applies only to the current event. It does not mention data freshness or rate limits, but the existing annotations cover the safety profile, making this a solid addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose. The return shape and auth note are valuable and each sentence earns its place. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the essential info for a read-only, open-world tool: what it does, the output structure, and the auth requirement. Some ambiguity remains around what constitutes the 'current event' (ongoing vs next scheduled), but the optional parameters and simple return format make this sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (tour, file_format). The description adds no extra detail about parameter syntax or behavior, but the schema already fully describes the enum and defaults, so this is adequate per rubric baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Per-player skill decomposition for the current event' and enumerates the specific skills (driving, approach, putting, course-fit). It distinguishes this tool from sibling tools like datagolf_skill_ratings or pre_tournament projections by focusing on the current event and decomposition into skill contributions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for current event analysis and mentions the auth requirement, but it does not explicitly state when to use this tool vs alternatives (e.g., datagolf_skill_ratings, datagolf_pre_tournament) or provide exclusions. Usage context is clear but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_player_listARead-onlyIdempotent
Full player list with Data Golf ids (dg_id), name, country, amateur flag.
Returns: [{dg_id, player_name, country, country_code, amateur}] (top-level array)
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| file_format | No | Response format (leave json). | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds valuable context beyond those: the exact return format (array of objects with five fields) and the auth requirement (DATAGOLF_KEY). This discloses practical behavioral details without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, return format, and auth requirement. The description is front-loaded with the core purpose and contains no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, no output schema, and no nested objects, the description is nearly complete: it covers the purpose, the return structure (compensating for the missing output schema), and authentication. It could mention potential response size limits but does not need to for this level of complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single optional parameter (file_format) is already fully documented in the schema. The description adds no parameter-level meaning, but per the baseline rule, a 3 is appropriate when schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a full player list with specific fields (dg_id, player_name, country, country_code, amateur), using 'Full player list' as a specific verb+resource. It distinguishes itself from sibling datagolf tools by focusing on the player list resource and enumerating the exact output fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description: an agent needing player IDs or basic player info would select this tool. However, there is no explicit guidance on when to use it vs. alternatives (e.g., datagolf_player_decompositions or other datasource player lists), and no exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_pre_tournamentCRead-onlyIdempotent
Pre-tournament model predictions — win / top-5/10/20 / make-cut probabilities per player.
Returns: {baseline:[{dg_id, player_name, win, top_5, top_10, top_20, make_cut}], baseline_history_fit:[...]}
Auth: needs your own key in DATAGOLF_KEY.
Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
| odds_format | No | How probabilities/odds are expressed. One of: percent, decimal, american, fraction. | percent |
| add_position | No | Extra finish positions to include (e.g. '1,2,3'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering safety and side effects. The description adds the return structure (baseline, baseline_history_fit) and auth requirement (DATAGOLF_KEY), which is useful. However, it does not explain what baseline_history_fit contains or any other behavioral nuances, and no contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but includes a distracting, non-essential line 'Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder.' This appears to reference other tools but without context or value, making the description less concise. The first sentence and return structure are clear, but the extra line harms structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides the return structure but omits key context: which tournament(s) the predictions apply to (e.g., current/upcoming event? all events?) and what baseline_history_fit represents. The 'Also answers this' line is unexplained. Given the tool's complexity and potential ambiguity, the description is incomplete for an agent to fully understand behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters (tour, file_format, odds_format, add_position) with enums and examples, achieving 100% schema coverage. The description does not add parameter-specific meaning beyond what the schema already states, which is appropriate given the high coverage. It mentions output metrics but not parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it provides pre-tournament model predictions with specific probabilities (win, top-5, top-10, top-20, make-cut) per player. This clearly identifies the tool's function and distinguishes it from live or historical datagolf tools. However, the appended line 'Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder.' is confusing and detracts from clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like datagolf_in_play or datagolf_pre_tournament_archive. The 'Also answers this:' line is vague and could imply usage for other tools' purposes, but it is not clear or instructive. There is no mention of prerequisites beyond the auth key, which is not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_pre_tournament_archiveCRead-onlyIdempotent
Archived pre-tournament predictions for a past event (what the model said beforehand).
Returns: {baseline:[{dg_id, player_name, fin_text, win, make_cut, first_round_leader, top_10}]}
Auth: needs your own key in DATAGOLF_KEY.
Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| year | No | Calendar year of the event. | |
| event_id | No | Event id (from get-schedule / historical event lists). | |
| file_format | No | Response format. | json |
| odds_format | No | Odds/probability format. One of: percent, decimal, american, fraction. | percent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the description doesn't need to restate safety. It does add useful context by specifying the auth requirement (DATAGOLF_KEY) and the return structure. However, it does not disclose any edge cases (e.g., what happens if no archived data exists, or if the event_id is invalid). With annotations covering the core behavior, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but contains a clearly misplaced and confusing line: 'Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder.' This is irrelevant to the tool's purpose and wastes space, reducing clarity. The return structure and auth lines are useful, but the overall structure is marred by this error, making it less concise and effective than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 optional parameters, no required ones), the description provides the return shape and auth requirement, which is useful. However, it does not explain how to identify a past event beyond the schema's note about event_id from schedule, and it does not clarify the 'Also answers this' line, which could mislead an agent. The lack of usage context and the confusing extra line leave gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents all five parameters with per-parameter descriptions, achieving 100% schema description coverage. The tool description adds nothing beyond the schema for parameter semantics, but it does illustrate the output fields which could hint at why certain parameters matter. This meets the baseline for high coverage but does not elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Archived pre-tournament predictions') and clarifies it is for a past event ('what the model said beforehand'). This distinguishes it from the live pre-tournament tool by implicit time scope. However, it does not explicitly name the sibling datagolf_pre_tournament for contrast, so it loses one point for lacking explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives like datagolf_pre_tournament (current) or other prediction tools. The only hint is 'past event' which is implied but not explicit. The strange line 'Also answers this: apisports_football_predictions, squiggle_tips, squiggle_ladder' is confusing and provides no usable routing information. No when-to-use or when-not-to-use guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_rankingsARead-onlyIdempotent
Data Golf player rankings (top ~500) with skill estimate and OWGR rank.
Returns: {last_updated, rankings:[{datagolf_rank, owgr_rank, dg_id, player_name, dg_skill_estimate, country}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds valuable context: it explicitly states the auth requirement (DATAGOLF_KEY) and provides the complete return structure, including field names. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences: purpose, return format, and auth. It is front-loaded with the most important information and contains no redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no required parameters and no output schema, the description covers the essential aspects: the data returned (with structure) and the auth requirement. It is sufficiently complete for an agent to invoke successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the only parameter (file_format) as 'Response format' with a default value. The description adds no additional information about this parameter, but since schema coverage is 100%, the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Data Golf player rankings (top ~500) with skill estimate and OWGR rank.' This specifies the exact resource and output content, distinguishing it from sibling tools like datagolf_player_list or datagolf_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when rankings are needed, but it provides no explicit guidance on when to use this over alternatives or mentions any exclusions. Sibling tools are not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_scheduleARead-onlyIdempotent
Tour schedule — the season's events with dates, courses and locations.
Returns: {schedule:[{event_id, event_name, course, course_key, location, country, latitude, longitude, start_date}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| tour | No | Tour. One of: pga, euro, kft, alt, liv. | pga |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the exact return structure and the auth requirement (DATAGOLF_KEY), which is useful behavioral context beyond what annotations provide. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of a clear purpose sentence, a return format example, and a brief auth note. Every line contributes necessary information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, return format, auth requirements, and implicitly the optional nature of parameters through the schema and annotations. Given the simple two-parameter read-only design, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have descriptions in the schema ('tour' with enum values, 'file_format' as response format), giving 100% schema coverage. The description does not add further parameter-specific detail, so it remains at the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Tour schedule — the season's events with dates, courses and locations.' which clearly identifies the tool's purpose: retrieving the schedule of golf tour events. It also includes the return format, distinguishing it from sibling tools like datagolf_rankings or datagolf_pre_tournament.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for retrieving the current season's tour schedule with dates, courses, and locations. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous enough for an agent to know when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datagolf_skill_ratingsARead-onlyIdempotent
Player skill ratings — strokes-gained components (off-tee, approach, around-green, putting) + driving acc/dist.
Returns: {last_updated, players:[{dg_id, player_name, sg_total, sg_ott, sg_app, sg_arg, sg_putt, driving_acc, driving_dist}]}
Auth: needs your own key in DATAGOLF_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | Show raw values or ranks. | value |
| file_format | No | Response format. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses the exact return payload structure and the authentication requirement (DATAGOLF_KEY). This adds meaningful operational context that the annotations do not cover, and there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, return structure, and auth. The most important information is front-loaded and every sentence adds value with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no required parameters, the description covers scope, return shape, and authentication. Even without an output schema, the example return structure is sufficient for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive entries for both parameters (display and file_format). The description does not add any parameter-specific detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides player skill ratings with specific strokes-gained components (off-tee, approach, around-green, putting) and driving accuracy/distance. This is specific and distinguishes it from sibling tools like datagolf_rankings or datagolf_approach_skill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes a clear context for use — obtaining player skill ratings with detailed breakdowns. It does not explicitly mention alternatives or exclusions, but the scope is evident from the content. Sibling tools like datagolf_rankings are not referenced, so no when-to-use comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_cms_entriesARead-onlyIdempotent
Contentful CMS entries (promotions, major-event nav) via the www CDN proxy.
Returns: {sys, total, skip, limit, items:[{sys, fields}], includes:{}}
Example: Active promotions {"content_type": "promotions", "limit": 20}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Pagination offset (Contentful CDA). | |
| limit | No | Page size (Contentful CDA). | |
| order | No | Sort order field (Contentful CDA). | |
| include | No | Linked-entry resolution depth (Contentful CDA). | |
| content_type | No | Contentful content type, e.g. promotions, majorEventNavigation, nationallyApprovedPromotions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds genuine behavioral value beyond annotations: the exact return shape ({sys, total, skip, limit, items, includes}), the auth behavior ('works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set'), and the proxy path. This is the right kind of supplementary context and does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact lines with no filler: the core statement first, then return format, a worked example, and auth. Every sentence earns its place, and the most decision-relevant facts (what it returns, whether auth is needed) appear immediately after the title line. Structure is front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description compensates by spelling out the return structure, which is the main completeness gap. Auth requirements, a realistic example, and the content-type values are all present, and the pagination parameters are covered by the schema. The only notable omissions are error behavior and explicit differentiation from sibling CMS tools, which are minor for a read-only, fully-optional-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all five parameters (skip, limit, order, include, content_type) with Contentful CDA references. The description adds a small amount beyond the schema via the example, which shows content_type and limit in a concrete call and lists real content-type values. This is at the schema-dominated baseline with mild credit for the worked example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource clearly ('Contentful CMS entries') and scopes it to specific content types (promotions, major-event nav) plus the access path (www CDN proxy). The verb is implicit — 'entries' as a noun phrase rather than an explicit 'list/fetch' — but the example and return-format line make the query nature unambiguous. It differentiates from sibling CMS tools like sportsbet_cms_messages, tab_cms_call, and entain_graphql_call by naming Contentful specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Active promotions' example with a concrete payload ({content_type: promotions, limit: 20}) provides implied usage guidance for the common case. However, there is no explicit when-to-use/when-not-to-use guidance, no named alternatives, and no mention of which sibling tools handle other entain CMS surfaces (e.g., entain_video_channels, entain_quicklinks_list). Usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_event_market_rulesARead-onlyIdempotent
Settlement rules for every named market, indexed by rule id.
Returns: {market_rules:{:{id, name, description}}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, open-world, and idempotent. The description adds useful context beyond annotations by specifying the return shape and clarifying auth behavior—keyless access with optional deeper access via ENTAIN_REFRESH_TOKEN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact lines: scope, return shape, auth. Each sentence carries distinct information with no filler, and the most important statement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-input, no-output-schema read-only call, the description is complete: it states what is returned, the structure, and authentication requirements. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema cannot be ambiguous and the description doesn't need to document inputs. It still helps by noting that results are indexed by rule id, which explains how a caller references returned rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a distinct resource—settlement rules for named markets, indexed by rule id—which separates it from sibling tools like entain_event_market_type_groups. It lacks an explicit verb like 'get' or 'retrieve', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence implies the use case: consult this tool when settlement rules by rule id are needed. However, it names no alternatives or when-not-to-use conditions, leaving an agent to infer which sibling tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_event_market_type_group_mapsARead-onlyIdempotent
Join table between market types and market-type groups (dedup by pair).
Returns: {market_type_group_map:[{market_type_id, market_type_group_id, priority}]}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes | Sport category UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, and idempotent. The description adds useful behavioral detail: deduplication by pair, the exact return shape, and that no API key is required while ENTAIN_REFRESH_TOKEN may expose additional data. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one core sentence, a return-shape line, and an auth note. Every sentence provides distinct value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup with annotations covering safety and idempotency, the description provides the return shape and auth behavior. The phrase 'unlocks more' is slightly vague, but the tool remains callable with the required category_id from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter category_id is already described as a sport category UUID. The description does not add further parameter-level semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a join table between market types and market-type groups, with deduplication by pair. The return shape clarifies that it produces mapping entries. It is reasonably distinct from sibling tools like entain_event_market_type_groups, though it lacks an explicit verb such as 'List' or 'Get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explain when to use this tool versus alternatives such as entain_event_market_type_groups or entain_event_market_rules. It provides no exclusion criteria or selection guidance beyond the tool name and general join-table description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_event_market_type_groupsARead-onlyIdempotent
Market-tab group definitions for a sport category (lower priority renders first).
Returns: {market_type_group:[{id, category_id, name, priority, type}]}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes | Sport category UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, open-world, and idempotent. The description adds genuinely useful behavior beyond annotations: it returns a specific structure, documents the priority ordering, and explains authentication behavior including that ENTAIN_REFRESH_TOKEN 'unlocks more if set.' This extra context is valuable, though somewhat vague about what 'more' means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: one core sentence with the key semantic, then return shape and auth details in short labeled lines. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter lookup with no output schema, the description covers the essential context: what is returned, how results are ordered, and whether authentication is required. It could be more thorough about what a market-type group definition represents and how it differs from related entain tools, but it is sufficient for correct basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter category_id is already fully described in the schema as a 'Sport category UUID,' so the description adds no additional parameter meaning. With schema description coverage at 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the resource (market-tab group definitions), scopes it to a sport category, and adds ordering behavior (lower priority renders first). It lacks an explicit verb like 'list' or 'fetch,' and does not distinguish itself from closely named siblings such as entain_event_market_type_group_maps, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this with a category_id to get that category's market-tab group definitions, ordered by priority. However, there is no explicit guidance about when to choose this over related tools, no exclusions, and no mention of alternatives like entain_event_market_rules or entain_event_market_type_group_maps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_featured_sliderARead-onlyIdempotent
Featured slider events (homepage hero carousel).
Returns: {items:[{id, title, url, event_id, event:{competition_id, event_start}}]}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, open-world, and idempotent, so the description adds useful auth context: it works without a key but ENTAIN_REFRESH_TOKEN unlocks more data. It also discloses the exact response contract, which is valuable because there is no output schema. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, a precise return shape, and a one-line auth note. Every sentence earns its place, and no fluff or redundant explanation is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only fetch tool, the description gives everything needed to call it and interpret results: the source, the exact item fields, nested event details, and auth behavior. The annotations cover safety and idempotency, so no critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is no parameter semantics burden on the description. The empty schema with 100% coverage means nothing is undocumented; the description appropriately focuses on the return shape and auth behavior instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource: featured slider events from the homepage hero carousel. It clearly distinguishes this from the many other Entain content tools by naming the exact source, though it lacks an explicit verb like 'list' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'homepage hero carousel' implies this tool should be used when an agent needs featured homepage slider content, and the provided return shape confirms its purpose. However, it does not explicitly state when to use it over alternatives or mention any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_graphql_callARead-onlyIdempotent
Call any of Entain's 127 persisted GraphQL operations against
api.ladbrokes.com.au/gql/router by name + variables. Hashes are managed
server-side; a PERSISTED_QUERY_NOT_FOUND (gateway APQ-cache eviction) is
self-healed automatically by re-POSTing the stored query document. If it
still surfaces, run sportsdata-mcp refresh-hashes entain. GraphQL IDs are
type-prefixed (RacingRace:, SportingEvent:): variable type
ID! wants the prefixed form, UUID! wants the bare uuid. Read
entain://graphql/operations for the full op list + variable signatures.
Returns: (JSON object)
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| variables | No | Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds substantive non-obvious behavior: server-side hash management, automatic self-healing of PERSISTED_QUERY_NOT_FOUND by re-POSTing the stored document, the refresh-hashes fallback, and exact GraphQL ID format rules (ID! vs UUID!). It also discloses optional auth behavior. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-organized: primary action first, then error recovery, ID semantics, resource pointer, return type, and auth. The line-separated sections and lack of fluff make it easy to scan; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic raw-GraphQL tool with no output schema, it covers the endpoint, allowed operations source, error behavior, ID formatting, return type, and auth requirements. Operation-specific outputs are delegated to the catalogue resource, which is appropriate given the 127 possible operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both operation and variables with 100% coverage, so the baseline is 3. The description adds real parameter-level value by explaining type-prefixed vs bare UUID variable expectations and directing the agent to the catalogue resource for per-operation variable signatures.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action: 'Call any of Entain's 127 persisted GraphQL operations' against a named endpoint by name + variables. Unambiguously identifies itself as the generic persisted-query dispatcher for Entain and is distinct from the convenience entain_* tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: invoke by operation name when you need to run one of the persisted GraphQL operations, and consult entain://graphql/operations for the operation list and variable signatures. It also gives a concrete recovery command for APQ-cache failures, though it does not explicitly name alternative tools or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_metadata_by_urlARead-onlyIdempotent
SEO metadata (page title) for a given URL path.
Returns: {metadata:{title, url}} (empty {} when no override)
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL path, e.g. /racing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context beyond those: the exact return shape, the empty-object behavior when no override exists, and the auth requirement (no key needed, optional token unlocks more). The phrase 'unlocks more if set' is somewhat vague but still discloses the auth gradient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: purpose in the first line, then return format, then auth. Every line adds distinct information and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description covers the essential context: what it returns, the no-override case, and auth requirements. The only ambiguity is what 'unlocks more' means when the token is set, but that does not block a basic correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter already documented as 'URL path, e.g. /racing.' The description essentially restates this in prose ('for a given URL path') without adding format details or constraints beyond the schema example. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'SEO metadata (page title) for a given URL path.' This precisely identifies what the tool returns and the input it operates on. It is clearly distinct from sibling Entain tools focused on channels, CMS entries, or quicklinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the scenario for use: when you need SEO/page title metadata for a URL path. However, it does not name alternatives or state when not to use it, so it falls short of explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_quicklinks_listARead-onlyIdempotent
Navigation quick-links (racing/sports nav tiles).
Returns: {quick_links:[{id, root_category_id, category_id, url, title, icon, priority}]}
Example: Racing quick-links {"filter": {"type": "Racing"}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | Yes | QuickLinkFilter, e.g. {"type":"Racing"}. Passing a bare string returns 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint, openWorldHint, and idempotentHint already present, the description adds meaningful context: it returns data without a key, and an ENTAIN_REFRESH_TOKEN can unlock additional data. It also documents the output shape so an agent knows what behavior to expect. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short lines: purpose, return shape, example, and auth. Every sentence adds information an agent needs, and the content is front-loaded with the resource type. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool, this covers purpose, the single parameter, a working example, output fields, and auth requirements. The main gap is that the full set of valid filter types is not enumerated and 'unlocks more' is vague, but the tool's low complexity makes this sufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% because the filter parameter is described with a type example ('QuickLinkFilter, e.g. ...') and a failure mode ('bare string returns 500'). The description's example adds a concrete Racing use case but does not materially expand beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Navigation quick-links (racing/sports nav tiles)' and the tool name adds the 'list' action, so an agent knows it returns a collection of quick-link tiles. It clearly distinguishes the Entain quick-links domain from sibling tools like entain_featured_slider or sportsbet_nav_hierarchy, though it does not name a direct alternative. The explicit return shape reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example with filter 'type: Racing' implies when to call it (when racing/sports nav tiles are needed), and the auth line states prerequisites. However, the description never compares this to alternatives such as entain_featured_slider or other navigation resources, leaving an agent to infer 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.
entain_racing_future_marketsARead-onlyIdempotent
Legacy v1 racing RPC selector (future-markets races feed).
Returns: {status, data:{races:{:{name, advertised_start:{seconds}}}}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Upstream RPC method (observed: future-markets). | future-markets |
| exclude | No | Field mask, e.g. {"markets":true,"prices":true,"entrants":true}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond annotations: this is a legacy v1 RPC, it returns a specific {status, data:{races:{...}}} envelope, and auth is optional with ENTAIN_REFRESH_TOKEN unlocking more. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: role/identify, return shape, and auth each get their own short section with no filler. The return-shape block is useful because there is no output schema, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with zero required parameters and fully documented schema, the description is complete enough: it covers what the tool returns and its auth behavior. It could clarify what 'unlocks more' means, but this is a minor gap given the annotations and schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'method' and 'exclude' are already documented in the schema. The description itself adds no additional parameter-level meaning, so the baseline of 3 is appropriate because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a 'Legacy v1 racing RPC selector' for the 'future-markets races feed,' which clearly distinguishes it from sibling racing tools like entain_racing_next_races or sportsbet_racing_futures. It lacks an explicit verb like 'get' or 'list,' but the stated return shape and feed name make the operation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is a legacy v1 future-markets racing feed and works without a key, with an optional token unlocking more data. It does not explicitly name excluded alternatives or say when not to use it, but the 'Legacy v1' and 'future-markets' framing is enough to guide selection among the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_racing_meetingARead-onlyIdempotent
All race meetings + races for one date (normalised UUID-keyed tables).
Returns: {compounds, domestic_countries, meetings:{}, races:{}, venues:{}}
Example: Melbourne card for a given day {"date": "", "timezone": "Australia/Melbourne"}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Race date, YYYY-MM-DD. | |
| timezone | Yes | IANA timezone, e.g. Australia/Melbourne. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior. The description adds useful context beyond those: the normalized UUID-keyed table structure, the top-level return fields, and the auth behavior (works without a key, with an optional refresh token unlocking more). This is meaningful behavioral and data-shape context with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well organized: scope, return keys, example, and auth. It is front-loaded with the most important selection information and contains no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only tool with no output schema, this is complete: required parameters are documented in the schema, the return shape is enumerated, auth requirements are stated, and an example clarifies timezone handling. The return-key list is especially valuable because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The example reinforces the date/timezone pattern and the 'Melbourne card' use case, but it does not add substantial semantics beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the tool returns all race meetings and races for a single date, giving a specific resource and scope. The return-key list and Melbourne example reinforce the purpose. It does not explicitly differentiate itself from sibling Entain racing tools like entain_racing_racecard, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'for one date' phrasing implies this is the tool for full daily meeting/race lookups, and the timezone example hints at regional usage. However, it never explains when to prefer this over entain_racing_racecard, entain_racing_search, or other racing-related siblings, leaving usage guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_racing_next_racesARead-onlyIdempotent
Next races about to jump, grouped per racing category.
Returns: {category_race_map:{}, race_summaries:{:{race_name, meeting_name, advertised_start, race_form}}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Races per category. | |
| categories | Yes | JSON array of racing category UUIDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint, openWorldHint, and idempotentHint annotations already covering safety, the description adds useful context: it works without a key, ENTAIN_REFRESH_TOKEN unlocks more, and it returns category_race_map and race_summaries with specific fields. No contradiction with annotations. It does not cover pagination or data freshness, but the additions are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one purpose sentence, a concise return-shape block, and an auth note. Every line earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param tool with no output schema, the description adequately provides return structure, required fields, and auth behavior. The main gap is that it does not tell the agent where racing category UUIDs come from or whether there are limits on count, but these are minor given the schema and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters at 100% coverage: count as 'Races per category' and categories as 'JSON array of racing category UUIDs'. The description reinforces the grouping semantics but adds no new syntactic or formatting detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Next races about to jump, grouped per racing category' clearly identifies the resource and temporal scope, and the Returns line further specifies what is produced. It is distinguishable from sibling racing tools like entain_racing_meeting and entain_racing_racecard by the 'about to jump' focus, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies time-sensitive use with 'about to jump' but provides no explicit guidance on when to use this tool versus siblings such as entain_racing_racecard, entain_racing_search, or tab_racing_next_to_go. There are no when/when-not conditions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_racing_racecardARead-onlyIdempotent
Full priced racecard for one race — entrants, fixed-odds fluctuations, form.
Returns: {status, data:{races:{}, markets:{}, prices:{}, entrants:{}, price_fluctuations:{:[floats — LAST is the live fixed win price]}, meetings:{}}}
Example: One priced racecard {"id": "7f553143-1ed4-4ef8-a622-46c7563e6c83"}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Race UUID from the meetings route. | |
| method | No | Upstream RPC method (racecard). | racecard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior. The description adds valuable context beyond that: the exact return envelope, the meaning of price_fluctuations (LAST is the live fixed win price), and auth requirements with and without ENTAIN_REFRESH_TOKEN. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with purpose, followed by a terse return structure, a concrete example, and an auth note. Every sentence carries information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description correctly supplies the return shape and the critical interpretation of price_fluctuations. It covers invocation via example and auth conditions; minor omissions like error/status semantics keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description contributes only an example invocation, while id and method are already documented in the schema, so it does not add significant semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States that the tool returns a full priced racecard for a single race, listing entrants, fixed-odds fluctuations, and form. This is specific about the resource and scope, but it does not explicitly contrast with sibling racecard or meeting tools, so differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through 'for one race' and the schema's 'Race UUID from the meetings route', suggesting the agent should first fetch a meeting. However, it never explicitly states when to choose this over entain_racing_meeting, entain_racing_next_races, or other racecard tools, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_racing_searchARead-onlyIdempotent
Racing search facets (barrier/country/jockey/trainer buckets); optional full-text.
Returns: {facets:{barrier:{buckets}, country:{buckets}, jockey:{buckets}, trainer:{buckets}}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional full-text query. | |
| category_ids | No | Optional JSON array of category UUIDs to filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly, idempotent, and openWorld, and the description adds useful auth context: it works without a key and ENTAIN_REFRESH_TOKEN unlocks more. It also discloses the exact facet output shape, going beyond the structured fields, though pagination and limits are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with purpose stated first, followed by a brief Returns block and an auth note. The facet list appears twice, but the Returns line adds structural precision rather than pure redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-optional-param search tool, the description plus schema covers inputs, output shape, and auth. The absence of an output schema is compensated by the explicit Returns block; minor details like how q interacts with facets are not explained but are non-critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description confirms q is an optional full-text query but adds no additional meaning for category_ids or any syntax/format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the operation ('racing search') and the exact facet buckets returned (barrier/country/jockey/trainer), making its purpose concrete. The 'Returns' block further disambiguates it from sibling tools like entain_racing_meeting or entain_racing_racecard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for racing search with optional full-text filtering, but it does not explicitly state when to choose it over sibling racing tools. It provides clear context but no exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it selections from one Entain (Ladbrokes/Neds) event, get the correlation-adjusted combined price. Prices combinations the book has not pre-built (for those, see entain_graphql_call SportingEventPopularSameGameMultis). Several events can be priced in one call.
Returns: {prices:{:{available: true, odds:{numerator: 27, denominator: 10}}}} — keyed by event id, one entry per event you asked about. VERIFIED live 2026-08-27 against AFL Melbourne v Carlton (event eccdc4f5-e01e-4aca-afab-570869b53702), unauthenticated.
ODDS ARE FRACTIONAL AND DECIMAL = numerator/denominator + 1. 27/10 is 3.70 — not 2.7, and not 27. Confirmed against the site's own displayed prices on the same event: Melbourne showed 2.15 and returns 23/20, Over showed 1.88 and returns 22/25. Every price in entain_sport_event_card is the same shape, so the conversion is the provider's convention rather than this endpoint's quirk. FORGETTING THE +1 UNDERSTATES EVERY PRICE.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Melbourne (2.15) with Over 173.5 (1.88) prices 3.70, against a naive 4.042.
IT SILENTLY COLLAPSES A REDUNDANT LEG AND STILL SAYS available: true. Melbourne to win plus Melbourne on the line returned 23/20 — 2.15, the SINGLE-LEG price — with no echo of the legs and nothing marking the drop. Repeating one selection twice does the same. There is no leg list in the response, so RESTATE THE SELECTIONS YOU SENT whenever you report a price, and treat a price equal to a shorter combination's as a collapse.
SOME IMPOSSIBLE COMBINATIONS ARE QUOTED RATHER THAN REFUSED, AT BIG PRICES. The conflict detector is good but not complete. Every exactly-two-entrant SGM-available market on the verified event was tested (41 of them): 35 correctly refused their mutually exclusive pair, and FIVE priced it — Match Betting, both teams to win, at 146.51, plus each of the four Quarter Match Betting markets at 70-82. The failing set is the WIN-MARKET FAMILY with two entrants and an implicit draw; the three-entrant version that lists Tie as an entrant (1st Half Betting) is refused correctly.
TWO CLIENT-SIDE DEFENCES, because nothing in the payload marks exclusivity. FIRST, honour same_game_multi_available from entain_sport_event_card — THE PRICER IGNORES ITS OWN FLAG (12 of 14 markets marked unavailable were priced anyway, including the two worst impossible quotes, Highest Scoring Half at 143.65 and 1st Half Match Betting at 110.18). SECOND, do not combine two legs from the SAME market_id unless you know that market permits it: every hole found is a same-market pair. Legitimate same-market pairs do exist — nested Alternate Handicaps/Totals lines, and multi-winner props like Anytime Goal Kicker — so a blanket rule costs a little coverage and removes the whole class.
DO NOT USE num_winners FOR THIS. It was tried and it does not mean exclusivity in either direction: Melbourne Alternate Handicaps is num_winners 1 with 96 nested lines that legitimately combine, while Race To 15 is num_winners 3 with two mutually exclusive entrants.
A bet that cannot win, quoted at 146.51, looks exactly like a longshot with enormous edge, which is what an automated screener selects for. Never trust available: true as proof a combination is coherent.
WHEN IT DOES DETECT A CLASH IT IS THE BEST DIAGNOSTIC OF ANY BOOK HERE: {available: false, conflicting_selections:[{market_id, entrant_id}, …]} names the exact pair. It correctly refused Over with Under, both line sides, two margin bands, and cross-market impossibilities like Melbourne to win with Carlton by 1-39.
available: false WITH NO odds KEY is also what an unknown event returns, quietly and alongside the events that did price. Unlike the other Australian books there is no fake zero to guard against — a refusal simply has no number — but a missing odds must never be read as 0.
Malformed requests are real HTTP 400s naming the problem: a selection missing market_id or entrant_id, and event id must match key when the map key and the inner event_id disagree.
Example: Price Melbourne to win with over 173.5 points {"same_game_multies": {"eccdc4f5-e01e-4aca-afab-570869b53702": {"event_id": "eccdc4f5-e01e-4aca-afab-570869b53702", "selections": [{"market_id": "c73591e5-b00e-4c92-abfb-b3737acbdd30", "entrant_id": "49475673-c7b8-4b49-8c87-e14637ebfa5c"}, {"market_id": "2bc6b298-4fce-4545-93cd-ed232a9c69a0", "entrant_id": "8ada7d51-2a67-4bcb-9593-f9fcbbbd5188"}]}}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| same_game_multies | Yes | The whole request envelope: a MAP KEYED BY EVENT ID whose value repeats that id. {"<eventId>": {"event_id": "<eventId>", "selections": [{"market_id": "…", "entrant_id": "…"}, …]}}. THE KEY AND THE INNER `event_id` MUST BE THE SAME STRING — they are not redundant, a mismatch is a 400 saying so. Both ids per selection come from entain_sport_event_card: `market_id` is a key of `markets`, `entrant_id` a key of `entrants` (whose own `market_id` must be that market). More than one event may be priced in a single call — that is what the map is for — and each is answered independently under its own key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint, openWorldHint, idempotentHint, so the risk profile is covered. The description adds a wealth of beyond-annotation behavior: fractional odds conversion (+1 gotcha), silent leg collapse, impossible combinations quoted, market_id exclusion defence, HTTP 400 on malformed requests, and the missing-odds meaning for unknown events. No contradiction exists between the description 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but nearly every sentence carries a distinct operational fact, and the most important warnings (fractional odds, collapse, conflict detection) are front-loaded with explicit real-world confirmations. Some redundancy exists (e.g., the num_winners and same-market defences could be trimmed), but it is structured with clear paragraph breaks and an example at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description fully describes the return shape, including the availability flag, odds key, conflicting_selections diagnostics, and missing-odds behavior. The example request and auth note complete the picture. For a pricing endpoint with these edge cases, nothing operationally necessary is left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description and schema description together add critical semantic detail beyond the type: the map key must match inner event_id, the ids come from entain_sport_event_card, and the example request shows the exact nesting. The description also explains the independence of multiple event entries and the 'not just redundant' key/event_id repetition. This fully compensates and exceeds the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with an explicit imperative ('PRICE A SAME GAME MULTI you choose'), specifies the resource (correlation-adjusted combined price for selections from one Entain/Ladbrokes/Neds event), and distinguishes itself from entain_graphql_call for pre-built popular SGMs. It also covers multi-event support, so an agent knows both the core action and the boundary of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong when-to-use guidance: use for any user-selected SGM combination, and use entain_graphql_call SportingEventPopularSameGameMultis for book pre-built combinations. It also gives exclusion rules (avoid same-market pairs, don't trust the flag, don't use num_winners) and client-side defence guidance, which is more than enough for an agent to decide when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_sport_event_cardARead-onlyIdempotent
Complete event card — every market, selection and price for one sport event.
Returns: {entrants:{}, events:{}, markets:{}, prices:{}, regions:{}, market_type_groups:{}}
Example: One NBA event card {"id": "339e26d0-72a8-49bc-a85f-a2d02c0a1a70"}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sport event UUID (bare, no type prefix). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, and open-world behavior. The description adds useful context beyond that by documenting the return shape and the auth requirement: no key is required, and ENTAIN_REFRESH_TOKEN provides additional access. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and structured into Returns, Example, and Auth sections. Every sentence contributes practical information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one required parameter, clear annotations, and no output schema, the description is sufficiently complete. It documents the return object shape, gives a concrete example, and explains auth behavior, which is enough for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents the id parameter as a bare sport event UUID. The NBA example reinforces the expected input format but does not add substantial semantic meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a complete event card with every market, selection, and price for one sport event. It defines a specific resource and scope, but it does not explicitly name or distinguish sibling tools such as entain_sport_event_request or entain_event_market_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'complete event card' implies the tool is for fetching the full set of markets, selections, and prices for a single event. However, there is no explicit when-to-use guidance, no alternatives mentioned, and no exclusions to help an agent choose between this and closely related Entain tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_sport_event_requestARead-onlyIdempotent
Bulk events + markets + prices for one or more sport categories.
Returns: {events:{}, markets:{}, prices:{}, entrants:{}, next_events:[], regions:{}}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| category_ids | Yes | JSON array of sport category UUIDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses the response shape with top-level keys and explains authentication behavior ('works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set'). This adds useful operational context not available in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the main capability stated first, followed by return structure and auth notes. Every line contributes meaningful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter bulk fetch tool with read-only annotations, the description covers the main capability, return keys, and auth requirements. It does not mention pagination or response size limits, but the provided details are otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents category_ids as a required JSON array of sport category UUIDs. The description adds minimal new meaning beyond clarifying 'one or more' categories, which is already implied by the JSON array type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns bulk events, markets, and prices for one or more sport categories, which is specific and distinguishes it from single-event tools like entain_sport_event_card. It lacks an explicit verb such as 'Get' or 'Fetch', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one or more sport categories' clearly signals the intended use case of bulk retrieval across categories. It does not explicitly name alternatives or say when not to use the tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entain_video_channelsARead-onlyIdempotent
Racing live-video channels (HLS .m3u8 URLs; verify token expires within minutes).
Returns: {channels:[{id, name, url}]}
Auth: works without a key; ENTAIN_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful operational detail beyond the readOnlyHint/idempotentHint annotations: it warns that the video URLs' tokens expire within minutes and explains the auth behavior (works without a key; ENTAIN_REFRESH_TOKEN unlocks more). This is useful, non-obvious context that helps the agent handle the returned URLs correctly. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, information-dense lines: the resource type and caveat, the return contract, and the auth note. Every sentence earns its place, and the most critical warning (URL token expiry) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description is essentially complete: it names the returned object structure, explains the HLS/token caveat, and specifies auth behavior. An agent has enough information to call the tool and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already covers everything with 100% coverage, so no parameter documentation is required. The description still clarifies the output shape and token behavior, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource clearly — racing live-video channels with HLS .m3u8 URLs — and specifies the return shape. It lacks an explicit verb like 'list' or 'get', so purpose is somewhat implied rather than stated, but it is still distinguishable from sibling Entain tools by the video-channel/HLS specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus other Entain or racing tools, and no exclusions or alternatives are named. The name implies the purpose, but the description does not help an agent decide between this and related tools such as entain_racing_meeting or entain_sport_event_card.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitysport_competitionsBRead-onlyIdempotent
Competitions and tours.
Returns: {status:'ok', response:{items:[{cid, title, abbr, category, game_format, status, season, datestart, dateend, total_matches, total_teams}], total_pages}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Live competitions {"status": "live"}
Auth: needs your own key in ENTITYSPORT_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| paged | No | Page number. | |
| status | No | live, upcoming, result. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds that the response shape is unverified and that an ENTITYSPORT_TOKEN is required for auth. This provides useful context about reliability and access, exceeding what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into concise sections: purpose, return shape, verification note, example, and auth. It front-loads the core information and includes essential warnings without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 optional params, no output schema), the description provides a return shape, an example, a reliability warning, and auth details. It covers the key operational aspects, though the unverified shape leaves some uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters (paged, status, per_page) with clear descriptions. The example for status adds a sample value but does not fundamentally extend the schema's meaning. With 100% schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Competitions and tours.' with a returned item shape implies a list operation, but it lacks an explicit verb like 'list' or 'get'. It distinguishes from siblings primarily by the tool name rather than a clear statement of its action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternative competitions tools. The example `{"status": "live"}` demonstrates a filter but provides no context for selection among siblings or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitysport_match_commentaryARead-onlyIdempotent
Ball-by-ball commentary for an innings — the reason to choose this provider over cricketdata.
Returns: {status:'ok', response:{commentaries:[{event:'ball'|'overend'|'wicket', over, ball, batsman_id, bowler_id, score, run_str, commentary, noball, wide, byes, legbyes, six, four}]}} — SHAPE FROM VENDOR DOCS. Rows include NON-BALL events ('overend'), so filter on event before counting deliveries.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: An innings' commentary {"matchId": 12345, "inningsId": 1}
Auth: needs your own key in ENTITYSPORT_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id. Required — part of the URL path. | |
| inningsId | Yes | Innings id (`iid` from the scorecard). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent hints, the description discloses critical behavioral aspects: the response shape is unverified from vendor docs, includes non-ball events that need filtering, and requires a personal API key (ENTITYSPORT_TOKEN). These add substantial transparency about what the agent will receive and what prerequisites exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each section earns its place: one-line summary, return shape, filtering caveat, verification alert, usage example, and auth requirement. Formatting with bolded notes and an indented example improves scannability without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a detailed return-shape sketch, an explicit warning about unverified fields, a filtering note, a JSON example, and auth guidance. This gives an agent nearly everything needed to invoke the tool and interpret its response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents both parameters (matchId, inningsId) and even clarifies inningsId as 'iid from the scorecard.' The description adds an explicit usage example and clarifies the context (an innings's commentary), reinforcing the meaning but not adding substantial new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Ball-by-ball commentary for an innings' — a specific verb and resource. It also explicitly differentiates from a sibling: 'the reason to choose this provider over cricketdata.' This uniquely identifies the tool among the many data-provider tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context by naming cricketdata as an alternative and explaining why to choose this provider. It also gives operational guidance ('filter on `event` before counting deliveries'). However, it stops short of enumerating explicit when-not-to-use scenarios or other alternative providers (e.g., entitysport_match_scorecard).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitysport_matchesARead-onlyIdempotent
Cricket matches — live, upcoming and completed.
Returns: {status:'ok', response:{items:[{match_id, title, short_title, subtitle, format_str:'T20'|'ODI'|'Test', status, status_str, game_state_str, teama:{team_id, name, short_name, scores_full, scores, overs}, teamb:{…}, date_start, venue, toss:{text, winner, decision}}], total_items, total_pages}} — SHAPE FROM VENDOR DOCS. scores_full is the display string ('187/4 (20)') and scores the bare runs — do not parse the first when you want the second.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Live matches {"status": 3}
Auth: needs your own key in ENTITYSPORT_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| paged | No | Page number. | |
| status | No | 1 = scheduled, 2 = completed, 3 = live, 4 = cancelled. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the agent knows it's a safe read. The description adds significant transparency: it discloses the response shape is from vendor docs and unverified, clarifies the distinction between scores_full and scores, and states the auth key requirement. These go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with line breaks separating the summary, return shape, caveat, example, and auth. The return shape is detailed but necessary given no output schema. Each section serves a purpose, though the overall length is above average.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a full return shape, an authenticity caveat, a status example, and auth requirements. It covers all relevant aspects of using the tool, including the unverified nature of the payload, which is important for an agent to handle appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions (date, paged, status, per_page). The description adds only an example using status=3, which reinforces the schema but doesn't add new meaning beyond what's already documented. Per the baseline, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Cricket matches — live, upcoming and completed', which clearly identifies the resource and the three match states. The return shape listing 'items' confirms it returns a collection. However, it lacks an explicit verb like 'List' or 'Fetch', and does not directly mention alternative tools for per-match details, so it doesn't fully distinguish from sibling entitysport tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Live matches {"status": 3}' provides concrete guidance on how to request live matches, and the auth note tells the agent it needs ENTITYSPORT_TOKEN. The schema's status descriptions also contextualize usage. However, it doesn't explicitly state when to use this tool instead of entitysport_match_info/scorecard/commentary, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitysport_match_infoARead-onlyIdempotent
One match with squads, toss and current state.
Returns: {status:'ok', response:{match_id, title, format_str, status_str, teama, teamb, venue, toss, umpires, referee, players:[…], equation, live}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One match {"matchId": 12345}
Auth: needs your own key in ENTITYSPORT_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent hints. The description adds valuable context: auth requires a key in ENTITYSPORT_TOKEN, and the response shape is from vendor docs and unverified, advising the agent to inspect the actual payload. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, returns shape, verification note, example, and auth. Each sentence has a purpose, though the returns line is somewhat verbose and could be trimmed without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers the response shape (even if approximate), provides an example, auth requirements, and a caveat about unverified data. The lack of output schema is compensated by the explicit return fields, though the unverified nature limits completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with matchId described as 'Required — part of the URL path.' The description adds an example invocation but no additional semantic meaning beyond what the schema already provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'One match with squads, toss and current state,' which conveys the resource and scope. It distinguishes itself from sibling tools like entitysport_matches (list) and match_scorecard/commentary by focusing on match info details, though it lacks an explicit verb like 'Get' or 'Fetch.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description only implies single-match usage via 'One match' without mentioning that entitysport_matches lists matches or that scorecard/commentary are separate tools. No exclusions or alternative suggestions are made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entitysport_match_scorecardARead-onlyIdempotent
Full innings-by-innings scorecard.
Returns: {status:'ok', response:{innings:[{iid, number, name, batsmen:[{name, batsman_id, runs, balls_faced, fours, sixes, strike_rate, how_out}], bowlers:[{name, overs, maidens, runs, wickets, econ}], extras, equations:{runs, wickets, overs, runrate}, fows:[…], did_not_bat:[…]}]}} — SHAPE FROM VENDOR DOCS. fows is the fall-of-wickets list.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One match's scorecard {"matchId": 12345}
Auth: needs your own key in ENTITYSPORT_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds critical transparency: the response shape is from vendor documentation and NOT verified against a live response, warning agents to inspect the actual payload. It also discloses the authentication requirement (ENTITYSPORT_TOKEN). These are valuable behavioral insights that annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: a one-sentence purpose, a compact return-shape block, a clear caveat about unverified data, an example, and an auth note. Every sentence carries necessary information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description takes on the full burden of explaining the return structure, which it does in detail (innings, batsmen, bowlers, extras, equations, fows, did_not_bat). It also includes the important caveat that the shape is approximate and the auth requirement, making it complete for an agent to invoke correctly and set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes matchId with type and required status, and the description merely adds an example value (12345). With schema description coverage at 100%, the description adds minimal new parameter semantics, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Full innings-by-innings scorecard,' which clearly identifies the tool's specific function and resource. It distinguishes itself from sibling tools like entitysport_match_info and entitysport_match_commentary by emphasizing the detailed inning-by-inning breakdown with batting and bowling statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives among the siblings. It does not state when to prefer this over entitysport_match_info or entitysport_match_commentary, nor does it mention any exclusions or prerequisites beyond the auth note. The example shows a call but does not help select the tool contextually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_cdn_callARead-onlyIdempotent
Gateway to the ESPN CDN core live feed (cdn.espn.com). Fast, lightly-cached
scoreboard/game/boxscore/playbyplay JSON. The path slug is the LEAGUE, not the
sport (nfl, nba, mlb, college-football, mens-college-basketball) — for
soccer use the competition slug directly (eng.1, esp.1, uefa.champions).
The CDN covers ESPN's front-page leagues only (no nhl). gameId comes from the
scoreboard op. Every request carries ?xhr=1 (added by default). Browse
espn://cdn/operations.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses caching behavior, the default xhr=1 query parameter, league coverage limitations, and the error behavior for guessing operations. This adds substantial operational context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence in the description earns its place: source, data types, slug rules, coverage limits, operation discovery, and auth. The information is front-loaded and the Returns/Auth lines are terse yet useful, making this a well-structured and efficient description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the generic gateway nature with no output schema and three parameters, the description covers essential knowledge: endpoint source, slug semantics, default query parameter, how to discover operations, and auth. It also notes a key error-recovery behavior (guessing an operation returns alternatives), making it complete for first-time invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is met. The description adds practical meaning beyond the schema by giving concrete slug examples (nfl, eng.1), clarifying that path_params uses the league slug, and noting the automatic xhr=1 for query_params. These details are more actionable than the schema's generic catalogue references.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a gateway to the ESPN CDN core live feed, listing the data types (scoreboard/game/boxscore/playbyplay JSON). It distinguishes itself from siblings by emphasizing the CDN source and providing league-slug examples, though the verb 'gateway' is slightly generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context: path slug is the league not the sport, soccer uses competition slugs, no NHL coverage, and gameId comes from the scoreboard op. It also directs users to browse espn://cdn/operations. It doesn't name alternative sibling tools, but the guidance is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_core_callARead-onlyIdempotent
Gateway to the ESPN core data model (sports.core.api.espn.com). The deepest,
most canonical surface: athletes + statistics + career logs, per-event odds /
win-probabilities / plays / situation / broadcasts / predictor / power-index,
per-competitor line-scores + statistics, season teams/coaches/draft/futures,
venues, leaders, rankings, franchises and coaches. NOTE the path uses
leagues/{league} (plural). Supply operation + path_params (sport, league,
plus eventId/competitionId/athleteId/year as needed). Most responses use ESPN's
$ref-linked envelope ({count, items:[{$ref}]}); follow the refs for detail.
Browse every operation in the espn://core/operations resource.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds valuable context beyond annotations: auth requirements ('none needed'), the $ref-linked envelope and the need to follow refs for detail, and a caution about the plural 'leagues' path. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured, front-loading the purpose and scope. The enumerated content categories are dense but relevant, and the Note/Returns/Auth lines are clear. Slightly long, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by explaining the response envelope ($ref, count, items) and how to access detail. It covers operation discovery, required inputs, and auth. It lacks pagination and rate-limit details, but for an open-world gateway with annotations, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all three parameters with descriptions, but the tool description adds meaningful examples for path_params (sport, league, eventId/competitionId/athleteId/year) and explains the operation concept. It also directs users to the operations resource for valid operation names, which complements the schema's pointer to list_resources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a gateway to the ESPN core data model, lists specific content areas (athletes, statistics, odds, plays, etc.), and notes the path uses 'leagues/{league}'. It distinguishes itself from other ESPN tools by naming the core API surface and instructing users to browse the espn://core/operations resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical guidance on how to use the tool (supply operation + path_params, follow $ref links, browse operations). It implies this is the canonical/deepest surface, but does not explicitly state when to choose this over sibling ESPN tools like espn_site_call or espn_web_call, nor 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.
espnfantasy_boxscoreARead-onlyIdempotent
Week box scores — each matchup with both lineups, per-player actual and projected points. The start/sit post-mortem view.
Returns: {schedule:[{matchupPeriodId, home:{teamId, totalPoints, tiebreak, pointsByScoringPeriod, rosterForCurrentScoringPeriod:{entries:[{playerId, lineupSlotId, playerPoolEntry:{player:{fullName, stats:[{appliedTotal, appliedAverage, statSourceId, statSplitTypeId}]}}}]}}, away:{…}}]}
Example: Week-3 box scores {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | mBoxscore carries the lineups; mMatchupScore adds the head-to-head totals. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | Yes | The week / scoring period to score. REQUIRED — omitting it yields season totals with no lineup detail. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: it explains auth requirements ('works without a key; ESPN_FANTASY_COOKIE unlocks more'), provides the full return structure (important since there is no output schema), and warns that omitting scoringPeriodId yields season totals. This goes well beyond the readOnlyHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: a clear purpose sentence, followed by a compact return type, an example, and an auth note. Every section earns its place, with no redundancy. The return type is dense but necessary given the lack of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and moderately complex parameters, the description covers all essential gaps: return shape, example invocation, auth behavior, and the critical requirement for scoringPeriodId. Annotations handle safety and idempotency, and the schema covers parameter details. The description is complete enough for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a concrete example showing how the parameters map together (game, seasonId, leagueId, scoringPeriodId) and implicitly uses the default view. While it doesn't add new semantic explanations beyond the schema, the example helps agents understand typical usage and parameter relationships, justifying a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies what the tool does: 'Week box scores — each matchup with both lineups, per-player actual and projected points.' It also distinguishes from similar tools by calling it 'the start/sit post-mortem view,' which implies post-week analysis, differentiating it from live scoring or matchup summary tools. The return structure further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: 'Week box scores' and 'post-mortem' indicate it is for after-the-fact review, and an example for Week 3 is provided. However, it does not explicitly mention when not to use it or name alternative tools (like live_scoring or matchup_score), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_communicationARead-onlyIdempotent
League message board / activity feed (chat topics, trade chatter, activity posts). 404s when the league has no communication group.
Returns: {topics:[{id, type, date, author, messages:[{id, messageTypeId, to, for, content}]}]} — HTTP 404 'This Communication Group does not exist.' when the league never used the board
Example: Recent league activity {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | `kona_league_communication` (activity) or `kona_league_messageboard` (chat). | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| fantasy_filter | No | Topic filter, e.g. {"topics":{"filterType":{"value":["ACTIVITY_TRANSACTIONS"]},"limit":25,"sortMessageDate":{"sortPriority":1,"sortAsc":false}}}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds valuable behavioral context: the 404 error when no communication group exists, the exact return shape, and auth behavior (works without key, cookie unlocks more). This goes beyond the annotations and helps the agent anticipate edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear sections: summary, return shape, example, and auth. It is efficient with no fluff, though the 404 condition is mentioned twice (once in the summary, once in the return note), which is a minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully supplies the return structure. It also covers the error case (404), provides a concrete example, and explains authentication. This is highly complete for a read-only data access tool, giving the agent everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters like game, seasonId, and leagueId are already well-documented. The description adds a concrete example with real values, which reinforces usage but does not introduce new semantic meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the league message board / activity feed with examples of contents (chat topics, trade chatter, activity posts). It distinguishes this from sibling espnfantasy tools by focusing on communication data. While it lacks an explicit verb like 'get' or 'list', the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage example and mentions authentication constraints, but it does not explicitly state when to use this tool versus alternatives such as espnfantasy_league or espnfantasy_teams. Usage context is implied through the resource name rather than explicitly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_draftARead-onlyIdempotent
Draft results — every pick in order with round, team, player, keeper flag and auction bid.
Returns: {draftDetail:{drafted, inProgress, completeDate, picks:[{id, overallPickNumber, roundId, roundPickNumber, playerId, teamId, owningTeamIds, keeper, reservedForKeeper, bidAmount, autoDraftTypeId, lineupSlotId, memberId}]}}
Example: Full draft board {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the description does not contradict them. It adds genuine behavioral context beyond the annotations: the auth requirement ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set') and the precise return shape including status flags (drafted, inProgress, completeDate) and all pick-level fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly organized into four distinct sections: a one-line purpose, a compact return-structure spec, a minimal JSON example, and a one-line auth note. Each part earns its place, and there is no filler or repetition of the schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description compensates by inlining the full draftDetail/picks return structure, demonstrating a realistic call with an example, and disclosing auth behavior. Minor gaps remain — such as no explicit explanation of status-flag semantics or guidance for choosing among the game enum values beyond the schema — but overall the tool is well specified for a read-only data lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: leagueId and seasonId are documented as required URL path parts, game has a full enum, and view is described as 'Leave as-is.' The description's example repeats these values (game=ffl, seasonId=2018, leagueId=1234), which reinforces usage but does not materially extend the schema's meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'Draft results — every pick in order with round, team, player, keeper flag and auction bid' names the resource (the fantasy draft) and enumerates the exact scope of what is returned, making the purpose unmistakable. It clearly distinguishes this from sibling espnfantasy tools like rosters, transactions, or standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example invocation ('Full draft board' with game, seasonId, leagueId) which implies when to use the tool, but it never explicitly states when to use it versus alternatives such as espnfantasy_teams or espnfantasy_transactions. Usage is implied through the example and content summary, not directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_everythingARead-onlyIdempotent
UNDOCUMENTED mega-view (allon): settings + teams + rosters + schedule + draft + the whole player pool in ONE response. VERY LARGE (multi-MB) — prefer a targeted tool unless you genuinely need everything.
Returns: {settings, status, teams, members, schedule, draftDetail, players, playersHighlighted, creationInfo, lastUpdateInfo, lastAccessInfo} (~4 MB on a 10-team league)
Example: Everything about a league in one shot {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | No | Scoring period to anchor roster/boxscore sections to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations indicating readOnly/idempotent, the description adds critical behavioral context: it is undocumented, returns a very large payload (~4 MB), lists the exact return keys, and explains auth requirements (works without key, cookie unlocks more). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but every line carries useful information: the mega-view contents, size warning, return keys, example, and auth note. It is front-loaded with the most important warning, though it could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a tool with no output schema: it lists return keys, size, auth, and an example. However, it doesn't explain the structure of each returned section or how they relate to the targeted sibling tools, leaving minor gaps for an agent deciding between this and alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters fully. The description does not add significant parameter semantics beyond the example call, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a mega-view returning settings, teams, rosters, schedule, draft, and the player pool in one response. The verb 'mega-view' and enumeration of contents distinguishes it from targeted sibling tools like espnfantasy_league_settings or espnfantasy_rosters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns that the response is very large (multi-MB) and advises to prefer a targeted tool unless everything is genuinely needed. This provides clear context for when to choose this tool over alternatives, and the auth note adds usage nuance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_gamesARead-onlyIdempotent
All five ESPN fantasy games with each one's CURRENT season id and scoring period — call this first to resolve seasonId/scoringPeriodId.
Returns: [{abbrev:'FFL', id, name, proSportAbbrev, currentSeasonId, currentSeason:{id, currentScoringPeriod:{id}, startDate, endDate}}] (top-level array of 5)
Example: Resolve the current NFL fantasy season + week
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds auth behavior (works without key, cookie unlocks more) and details the exact return structure, which is valuable context. It doesn't mention error cases or rate limits, but for a simple read-only discovery endpoint, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet fully informative: a one-line purpose, a mock return shape, a concrete example, and an auth note. Every sentence serves a purpose, and it is front-loaded with the core directive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no parameters, the description fully explains what the tool returns and how to use it. The mock return object covers field names and nesting, the example clarifies usage, and auth is addressed. This is complete for a discovery endpoint of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the input schema covers 100% by default. The description compensates by explaining the output structure (top-level array of 5 with currentSeason/currentScoringPeriod), which is essential for using the returned values. It provides a mock return object and clarifies how to resolve IDs, adding meaning beyond an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all five ESPN fantasy games with their current season IDs and scoring periods, with the specific directive to call it first to resolve seasonId/scoringPeriodId. This verb+resource structure (list/resolve) distinguishes it from sibling tools like espnfantasy_season, which appears to handle individual seasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'call this first to resolve seasonId/scoringPeriodId', providing a clear when-to-use directive. The example (resolve current NFL fantasy season + week) illustrates a concrete use case. It also notes auth requirements, indirectly guiding when a cookie is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_leagueARead-onlyIdempotent
Raw league read with ANY combination of views — the escape hatch when no dedicated tool below fits, or to fetch several views in one round trip.
Returns: {id, seasonId, scoringPeriodId, settings, status, teams:[…], members:[…]} plus whatever the requested views add (schedule, draftDetail, players, …)
Example: Teams + rosters + settings in one call {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "view": ["mTeam", "mRoster", "mSettings"]}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | One or more views, sent as repeated params. Verified: mTeam, mRoster, mMatchup, mMatchupScore, mSettings, mStandings, mBoxscore, mScoreboard, mSchedule, mDraftDetail, mTransactions2, mPendingTransactions, mPositionalRatings, mLiveScoring, mNav, mStatus, kona_player_info, kona_playercard, allon. | |
| leagueId | Yes | Your league id — the `leagueId=` in the fantasy site URL. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018; use espnfantasy_league_history for older). Required — part of the URL path. | |
| fantasy_filter | No | Filter object; league-scoped views nest under an entity key, e.g. {"players":{"limit":50,"sortPercOwned":{"sortPriority":1,"sortAsc":false}}}. | |
| scoringPeriodId | No | Scoring period (NFL week / daily-sport day). Required by mBoxscore, mRoster-at-week, mTransactions2. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context beyond those: the exact return shape, that it returns 'whatever the requested views add,' and the auth note. No contradictions; this is a solid addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, with a front-loaded purpose, a clear return shape, and a compact example. Every sentence earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, flexible tool with 6 parameters and many possible views, the description covers the escape-hatch purpose, view selection, an example, scoringPeriodId requirements, and auth. It could more explicitly recommend dedicated tools when they suffice, but the 'no dedicated tool fits' phrase covers that. Overall, sufficient for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, giving a baseline of 3. The description goes further by providing a concrete example, listing verified views, and highlighting that scoringPeriodId is required for specific views like mBoxscore and mRoster-at-week. This adds meaningful meaning beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Raw league read with ANY combination of views' and immediately frames it as 'the escape hatch when no dedicated tool below fits, or to fetch several views in one round trip.' This clearly distinguishes it from the many dedicated sibling tools (espnfantasy_teams, espnfantasy_rosters, etc.) and states its specific resource and capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it: 'when no dedicated tool below fits, or to fetch several views in one round trip.' It also provides an example and notes that scoringPeriodId is required by certain views, and explains the auth context ('works without a key; ESPN_FANTASY_COOKIE unlocks more'). This is complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_league_defaultsARead-onlyIdempotent
ESPN's stock league templates (scoring/roster presets) by scoring-type id — the defaults a new league starts from.
Returns: {gameId, id, seasonId, scoringPeriodId, settings:{name:'FFL PPR Scoring', ...}, status:{...}}
Example: The PPR football preset {"game": "ffl", "seasonId": 2025, "scoringTypeId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| seasonId | Yes | Season year, e.g. 2025. Required — part of the URL path. | |
| scoringTypeId | No | Preset id. Verified for ffl: 1=Standard, 3=PPR, 5=All-Play PPR, 6=Knockout. Other ids return 200 with no settings.name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds meaningful behavior beyond these: it discloses the auth requirement (works without a key, cookie unlocks more) and provides a sample return structure. It does not contradict annotations, and adds context about edge cases (other ids return 200 with no settings.name). This is valuable, though it could mention rate limits or pagination if relevant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded with the core purpose. It includes a return-format snippet, a concrete example, and an auth note, all in a few lines. There is no fluff; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple lookup tool with no output schema, the description provides a sample return structure, an example call, and important edge-case info. It also mentions authentication. This is complete for an agent to select and invoke the tool correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description adds extra value by providing verified scoringTypeId values for ffl (1=Standard, 3=PPR, 5=All-Play PPR, 6=Knockout) and noting edge behavior. This goes beyond the schema's generic descriptions, enriching the agent's understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns ESPN's stock league templates (scoring/roster presets) by scoring-type id, the defaults a new league starts from. It uses a specific verb ('returns'), names the resource ('stock league templates'), and distinguishes itself from siblings like espnfantasy_league_settings by focusing on defaults.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for retrieving the preset league defaults, as indicated by 'the defaults a new league starts from'. However, it does not explicitly mention alternatives or when not to use this tool, lacking exclusions. The given example and auth note help, but no sibling comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_league_historyARead-onlyIdempotent
Pre-2018 seasons and cross-season history via the leagueHistory path. Only works for leagues that HAVE history — check espnfantasy_status.status.previousSeasons first; an empty list there means this returns 404. Returns a single-element ARRAY, not an object.
Returns: [{id, seasonId, settings, teams, status, …}] — ARRAY wrapper; index [0] for a single seasonId. 404 when the league has no leagueHistory record (verified: public league 1234 reports status.previousSeasons == [] and 404s here) — fall back to the seasons path.
Example: A 2017 season for a long-running league {"game": "ffl", "leagueId": 1234, "seasonId": 2017}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Same view vocabulary as the seasons path. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | No | Season year to read. Omit to get every season the league has history for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavior beyond annotations: it returns a single-element ARRAY (not an object), 404s when the league lacks history, and provides a verified example of that failure. It also mentions auth requirements and that a cookie unlocks more data. None of this contradicts annotations (readOnlyHint, openWorldHint, idempotentHint) — it complements them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, prerequisites, return format, example, auth) and front-loads the core purpose. It's slightly verbose with the 'verified: public league 1234...' detail, but every part earns its place given the complexity of the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description thoroughly explains the return structure ('Returns: [{id, seasonId, settings, teams, status, …}] — ARRAY wrapper'), error behavior (404 and fallback), how to verify availability, and authentication. It leaves no ambiguity about how to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds meaningful semantics: explains that omitting seasonId returns every season with history, describes the view as 'same vocabulary as the seasons path,' and provides a concrete example request. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves pre-2018 seasons and cross-season history via the leagueHistory path. It uses a specific verb (returns history) and resource (leagueHistory path), and distinguishes itself from sibling tools like espnfantasy_league and espnfantasy_status by focusing on historical data and returning an array.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is provided: 'Only works for leagues that HAVE history — check espnfantasy_status.status.previousSeasons first; an empty list there means this returns 404.' It also names an alternative ('fall back to the seasons path') and explains the condition for using that alternative. This is excellent usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_league_settingsARead-onlyIdempotent
League rules: name, size, scoring items, roster slots, schedule/playoff format, waiver + keeper + trade settings.
Returns: {settings:{name, size, isPublic, draftSettings, rosterSettings:{lineupSlotCounts}, scoringSettings:{scoringItems:[{statId, points}]}, scheduleSettings, tradeSettings, acquisitionSettings}, status}
Example: Scoring + roster rules for a league {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the auth requirement ('works without a key; ESPN_FANTASY_COOKIE unlocks more') and specifies the return structure, which are not present in annotations. This adds meaningful behavioral context without contradicting any hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into three parts: purpose, return format, and example/auth. It is front-loaded with the outcome and does not repeat schema details. Slightly verbose with the full return type declaration, but each section adds value and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only settings tool with no output schema, the description provides the return structure, an example, and auth details. It lacks explanations of each returned field (e.g., what 'status' means), but given the simplicity of the operation and high schema coverage, the provided info is largely sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% as every parameter has a description (e.g., game enum, view 'Leave as-is', leagueId and seasonId explained). The description does not add extra parameter-level meaning beyond an example that shows typical values. With high schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'League rules:' and explicitly enumerates the settings categories (name, size, scoring items, roster slots, schedule/playoff format, waiver + keeper + trade settings). This clearly distinguishes it from sibling tools like espnfantasy_league (general league info) and espnfantasy_rosters. The verb/resource is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example ('Scoring + roster rules for a league') which implies a use case, but it does not explicitly state when to use this tool versus alternatives like espnfantasy_league or espnfantasy_teams. No explicit 'use when' or 'not for' guidance is given, leaving the agent to infer from examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_live_scoringARead-onlyIdempotent
Live in-progress scoring for the current period — points so far and how many roster spots have yet to play.
Returns: {schedule:[{matchupPeriodId, home:{teamId, totalPoints, totalPointsLive, gamesPlayed}, away:{…}}]} — the *Live fields only populate while pro games are in progress
Example: Live scores right now {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | No | Scoring period; omit for the current one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds valuable behavioral context beyond these: the live-field population caveat, the return structure shape, and the auth behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set'). This enriches the agent's understanding without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose in the first sentence. It efficiently packs return structure, a worked example, and auth notes without redundancy. Every sentence adds information, and the structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only live-scoring tool with no output schema, the description is thorough: it explains the return format with nested fields, highlights the critical live-only behavior, provides a concrete example, and addresses authentication. The 5 parameters, 2 of which are required, are fully covered by the schema, so the description fills the gap with usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add parameter-level meaning beyond the schema; it only provides an example call showing game, seasonId, and leagueId. The 'view' parameter is noted as 'Leave as-is' in the schema, but the description doesn't clarify it further. This is acceptable but not exemplary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement: 'Live in-progress scoring for the current period' and elaborates on exactly what data is returned ('points so far and how many roster spots have yet to play'). It clearly distinguishes this live-scoring tool from siblings like espnfantasy_boxscore or espnfantasy_matchups by emphasizing 'Live' and 'in-progress'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: for in-progress scoring during the current period. It states the key timing caveat that 'Live fields only populate while pro games are in progress,' which guides the agent on when results will be meaningful. However, it does not explicitly name alternative tools or state when not to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_matchupsARead-onlyIdempotent
Full season schedule of head-to-head fantasy matchups with each side's total and per-period points.
Returns: {schedule:[{id, matchupPeriodId, winner:'HOME'|'AWAY'|'UNDECIDED', home:{teamId, totalPoints, gamesPlayed, pointsByScoringPeriod:{'1':98.4}}, away:{…}}]}
Example: Every matchup in the season {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
Also answers this: sleeper_matchups, sleeper_playoff_bracket.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as readOnly, openWorld, and idempotent; the description adds that authentication is optional and that setting ESPN_FANTASY_COOKIE 'unlocks more'. It also details the return JSON structure, providing transparency about what the tool will output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively brief but includes multiple components: purpose, return schema, example, auth, and a sibling pointer. The 'Also answers this' line is ambiguous and could be omitted or clarified, and the example could be more integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by showing the return structure with example fields like winner, home, away, and pointsByScoringPeriod. It covers auth and gives an example call. However, it doesn't mention potential limitations such as whether playoff matchups are included or how to handle a full season's data size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with 100% coverage, so the description's example with concrete values (ffl, 2018, 1234) is helpful but not necessary. It does not add significant new meaning beyond what the schema provides, hence a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Full season schedule of head-to-head fantasy matchups with each side's total and per-period points,' clearly indicating the tool returns a comprehensive matchup schedule. It distinguishes itself from espnfantasy_matchup_score or boxscore by focusing on the full season schedule. However, it lacks a direct verb like 'get' or 'list', making it slightly less explicit than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a pointer to 'sleeper_matchups, sleeper_playoff_bracket' under 'Also answers this,' suggesting alternatives for the Sleeper platform, but it does not provide explicit when-to-use or when-not-to-use guidance. The example call shows typical use, but the decision framework between this and sibling tools is not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_matchup_scoreARead-onlyIdempotent
Compact matchup scores for the season — totals only, no lineups. Much smaller than the box score.
Returns: {schedule:[{id, matchupPeriodId, winner, home:{teamId, totalPoints, gamesPlayed}, away:{…}}]}
Example: All matchup results {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
Also answers this: sleeper_matchups, sleeper_playoff_bracket.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| fantasy_filter | No | Limit to given matchup periods, e.g. {"schedule":{"filterMatchupPeriodIds":{"value":[3]}}}. | |
| scoringPeriodId | No | Narrow to one scoring period. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds auth details (works without a key, ESPN_FANTASY_COOKIE for more), the return shape, and the fact that it returns only totals, not lineups. This extra context goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with a clear summary. It includes return format, an example, and auth note in a structured way. The 'Also answers this' line is a bit cryptic but does not significantly bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides the return structure, an example request, and auth requirements. It does not explain error cases or pagination, but given the simple nature of returning compact season totals and the 100% schema coverage, this is reasonably complete. The cross-reference to sleeper tools adds a broader answer context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds a concrete example call with game, seasonId, and leagueId, which clarifies how the required parameters are used together and reinforces the default for game. It doesn't add much detail for optional filters, but the schema covers those adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns compact matchup scores for the season, totals only, without lineups, and explicitly contrasts itself with the box score. It also names sibling tools (sleeper_matchups, sleeper_playoff_bracket) it can answer for, helping distinguish from other ESPN tools. This is a specific verb+resource+scope description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use this tool: when you need compact season matchup totals rather than full box scores or lineups. It mentions an alternative (box score) and even cross-references sleeper tools, but does not explicitly state when not to use it or outline an exclusion rule. The guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_pending_transactionsARead-onlyIdempotent
Pending/unprocessed transactions — waiver claims and trade offers awaiting processing (needs the private cookie in most leagues).
Returns: {pendingTransactions:[…]} when any are pending; the key is ABSENT (not an empty list) when there are none.
Example: Outstanding waiver claims / trade offers {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | No | Scoring period. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses key behavioral details: the return key is ABSENT (not empty) when no pending transactions exist, and cookie-based auth unlocks more data. These are not visible in annotations and provide valuable operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized into purpose, return shape, example, and auth. Every sentence conveys a distinct piece of information with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the top-level return shape (pendingTransactions array and its absence behavior). However, it does not describe the structure of individual pending transaction items, leaving a gap for agents needing item-level details. Still, for a list-type read tool with good annotations, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a concrete example call with realistic values for game, seasonId, leagueId, and scoringPeriodId, demonstrating parameter usage beyond the schema's basic definitions. This example aids an agent in constructing a valid request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly identifies the resource as 'Pending/unprocessed transactions' and further specifies 'waiver claims and trade offers awaiting processing.' It distinguishes from sibling espnfantasy_transactions by the 'pending/unprocessed' qualifier, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a use-case example ('Outstanding waiver claims / trade offers') and mentions auth prerequisites ('needs the private cookie in most leagues') and behavior without a key. It does not explicitly name alternates like espnfantasy_transactions, but the contrast is implied by 'pending/unprocessed.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_player_cardARead-onlyIdempotent
Deep card for specific players — full season + per-period stat splits and projections, as the site's player popup shows.
Returns: {players:[{id, player:{fullName, stats:[{id, seasonId, scoringPeriodId, statSourceId:0|1, statSplitTypeId, appliedTotal, appliedAverage, stats:{…}}]}}]} — statSourceId 0=actual, 1=projected
Example: Season + projection splits for one player {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "fantasy_filter": {"players": {"filterIds": {"value": [15825]}, "filterStatsForTopScoringPeriodIds": {"value": 16, "additionalValue": ["002018", "102018"]}}}}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| fantasy_filter | No | REQUIRED to target players. {"players":{"filterIds":{"value":[3139477]},"filterStatsForTopScoringPeriodIds":{"value":16,"additionalValue":["002025","102025"]}}} — additionalValue ids are "00"+season (actual) and "10"+season (projected). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides the exact return shape, clarifies that statSourceId 0=actual and 1=projected, includes a complete request example, and discloses authentication behavior (works without key; cookie unlocks more). This adds substantial value beyond the readOnly/idempotent annotations, which are consistent with the described behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into a purpose statement, return type, example, and auth note. Every section serves a functional purpose, with no redundant filler. The JSON example is compact and aids comprehension. It is longer than a simple two-sentence description but is appropriately detailed for a tool with five parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and no output schema, the description compensates by providing a return structure, a full example, and auth context. It explains the meaning of key fields and the filter construction. The description is complete enough for an agent to call the tool effectively without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage for all 5 parameters. The tool description adds a concrete example that demonstrates how to construct fantasy_filter, including the 'additionalValue' logic ('00'+season actual, '10'+season projected). This enriches parameter understanding beyond the schema's static descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a 'Deep card for specific players' with full season and per-period stat splits and projections. It identifies the resource (player card) and scope (specific players), which distinguishes it from list-oriented sibling tools like espnfantasy_players. Although no explicit verb is used, the noun phrase is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for specific players (as opposed to lists) and provides an example with a single player ID. However, it does not explicitly state when to use this tool over alternatives such as espnfantasy_player_info or espnfantasy_players, nor does it state when not to use it. Usage guidance is thus implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_player_infoARead-onlyIdempotent
The league's player pool with ownership %, ratings, projections and injury status — pass a status filter for FREE AGENTS / WAIVERS (the waiver-wire tool).
Returns: {players:[{id, onTeamId, status:'FREEAGENT'|'ONTEAM'|'WAIVERS', keeperValue, draftAuctionValue, ratings, player:{fullName, defaultPositionId, eligibleSlots, injured, injuryStatus, proTeamId, ownership:{percentOwned, percentChange, percentStarted}, stats:[{appliedTotal, statSourceId, statSplitTypeId}]}}]}
Example: Top available free agents by ownership {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3, "fantasy_filter": {"players": {"filterStatus": {"value": ["FREEAGENT", "WAIVERS"]}, "limit": 25, "sortPercOwned": {"sortPriority": 1, "sortAsc": false}}}}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| fantasy_filter | No | NESTED under "players". Free agents: {"players":{"filterStatus":{"value":["FREEAGENT","WAIVERS"]},"limit":50,"sortPercOwned":{"sortPriority":1,"sortAsc":false}}}. A limit REQUIRES a sort. filterSlotIds narrows by position. | |
| scoringPeriodId | No | Scoring period the stats/projections are anchored to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description does not contradict them. It adds useful behavioral context by disclosing the auth requirements ('works without a key; ESPN_FANTASY_COOKIE unlocks more') and by detailing the return structure, which is absent from an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections for the main purpose, return shape, example, and auth. The first sentence is front-loaded and the additional content (returns, example) is directly useful, though it could be condensed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a read-only list tool with no output schema, so the description takes on the burden of explaining both usage and return values. It provides a full return structure, a concrete invocation example, and auth notes, making it highly complete for an agent to select and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds value by explaining the fantasy_filter for free agents/waivers and showing a full example with sort and limit. This goes beyond the raw schema descriptions and clarifies the intended usage pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the league's player pool with ownership %, ratings, projections, and injury status, and explicitly brands it as 'the waiver-wire tool'. This distinguishes it from sibling ESPN Fantasy tools by focusing on player data and free-agent/waiver use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells users to 'pass a status filter for FREE AGENTS / WAIVERS' and provides a concrete example for top free agents, giving clear context for when to use it. However, it does not explicitly name alternatives or say when not to use it, just that it is the waiver-wire tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_player_newsARead-onlyIdempotent
Recent fantasy news items for one player (injury/usage blurbs that drive start-sit calls).
Returns: {news:{feed:[{id, headline, description, published, lastModified, playerId, links, images}], resultsCount, resultsLimit, timestamp}}
Example: News for one player {"game": "ffl", "playerId": 3139477}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| playerId | Yes | ESPN player id (from espnfantasy_players or a roster entry). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description need not re-state safety. It adds valuable behavioral context: the return structure (news feed with fields), auth behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more'), and the example input. This goes beyond the annotations without contradicting them, though it does not detail rate limits or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently organized: one-sentence purpose, a compact return schema, an example, and an auth note. No filler or redundancy; every segment earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 2 parameters, no output schema, and rich annotations, this description is complete. It covers purpose, usage, parameters (via example and source context), return format, and auth. The safety profile is handled by annotations, and the remaining operational details are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both params with descriptions (100% coverage). The description adds an example ({"game": "ffl", "playerId": 3139477}) and clarifies playerId as 'from espnfantasy_players or a roster entry' (schema says 'ESPN player id'). These additions provide practical context beyond the schema, but the schema already carries most semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'Recent fantasy news items for one player' with a specific focus on 'injury/usage blurbs that drive start-sit calls.' This is a specific verb+resource+scope that distinguishes it from general news tools like espn_news and other espnfantasy tools. The mention of 'one player' specifies the resource granularity precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (getting player-specific fantasy news for start-sit decisions) and includes an example call. It does not explicitly name alternatives or provide 'when not to use' guidance, but the single-player scope makes the usage context clear. Lacks explicit exclusion such as 'for team-wide news use espn_news instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_playersARead-onlyIdempotent
The player universe for a season (id, name, position, pro team, % owned). Defaults to 50 players — pass fantasy_filter to widen or filter.
Returns: [{id, fullName, firstName, lastName, defaultPositionId, eligibleSlots:[int], proTeamId, droppable, universeId, ownership:{percentOwned}}] (top-level array)
Example: Default slice (50 players) {"game": "ffl", "seasonId": 2025}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is; `players_wl` is the only view this path serves. | |
| seasonId | Yes | Season year, e.g. 2025. Required — part of the URL path. | |
| fantasy_filter | No | ROOT-level filter object (NOT nested under "players" on this path), e.g. {"filterActive":{"value":true}}. A "limit" MUST be paired with a sort or the API 400s with FILTER_LIMIT_MISSING_SORT. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds meaningful behavioral details: the default 50-player limit, the role of fantasy_filter in widening/filtering, an example request, and the auth note that a key is not required but a cookie unlocks more. This goes beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into a summary, return shape, example, and auth note, with the primary purpose front-loaded. Each section provides useful information; however, the example JSON and detailed field list make it slightly longer than strictly necessary. Still, there is no wasted repetition, and the structure is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return field list, and the schema covers all parameters. The description fills in the default size, a usage example, and authentication context. It does not discuss pagination or sorting beyond the schema's note about limit requiring sort, but for a list-retrieval tool with this schema and annotations, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context by explaining the default 50-player limit and positioning fantasy_filter as the widening/filtering mechanism, plus a concrete default example. While the schema's fantasy_filter description is already detailed, the description reinforces the default-limit behavior and provides a quick-start example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the season's player universe and lists the fields returned, and the Returns section confirms it returns a top-level array. However, it lacks an explicit action verb like 'Get' or 'List', and it does not directly name sibling tools for differentiation, though the phrase 'player universe for a season' distinguishes it from player-specific tools like espnfantasy_player_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the default 50-player limit and says to pass fantasy_filter to widen or filter, which implies when to adjust usage. However, it does not explicitly explain when to use this tool instead of sibling tools such as espnfantasy_rosters or espnfantasy_player_info, nor does it mention exclusions. Usage context is implied but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_positional_ratingsARead-onlyIdempotent
Positional ratings — average fantasy points allowed by each pro defence to each position (the strength-of-matchup table).
Returns: {positionAgainstOpponent:{positionalRatings:{'1':{average, total, ratingsByOpponent:{'proTeamId':{average, rank}}}}}} (keys are position ids). IN-SEASON ONLY: verified 2026-07-02 that completed/old seasons return 200 with the whole positionAgainstOpponent block ABSENT — that is upstream behaviour, not an error.
Example: Which defences are soft against each position {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | Yes | Scoring period to rate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds crucial behavioral details: the exact return structure, the odd non-error behavior on old seasons (absent block), and authentication requirements. This gives the agent confidence in interpreting unexpected responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear sections (definition, return type, in-season caveat, example, auth). Each section is informative, but the example is questionable and the return structure line is dense. Slightly verbose but no wasted words, justifying a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by providing the full return structure, a scenario for when it fails, and auth info. However, the misleading example and lack of clarification about position IDs (e.g., what '1' means) leave minor gaps. Overall highly complete, so a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds value through a concrete usage example (though the seasonId is problematic) and clarifies the default game 'ffl' implicitly. This nudges the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it returns average fantasy points allowed by each pro defense to each position, explicitly calling it the strength-of-matchup table. This is a specific verb+resource+scope that distinguishes it from sibling tools like espnfantasy_players or espnfantasy_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is 'IN-SEASON ONLY' and explains what happens with completed/old seasons (200 with absent block, not an error). It also includes an example with parameter values. However, the example uses seasonId 2018, which contradicts the in-season-only warning since 2018 is a completed season, potentially leading an agent astray.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_pro_teamsARead-onlyIdempotent
Pro (real-world) teams for a fantasy season: ids, abbreviations, BYE weeks, and each team's games keyed by scoring period.
Returns: {settings:{proTeams:[{id, abbrev, location, name, byeWeek, universeId, proGamesByScoringPeriod:{'1':[{...game}]}}]}} — 33 entries for NFL (id 0 = free-agent/none)
Example: NFL teams + bye weeks + week-by-week pro schedule {"game": "ffl", "seasonId": 2025}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. `proTeamSchedules_wl` is what carries the pro schedule. | |
| seasonId | Yes | Season year, e.g. 2025. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the description does not contradict these. It adds valuable behavioral context: auth behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more'), a special team id (id 0 = free-agent/none), and the data structure with 33 NFL entries. This goes beyond the annotations without being excessive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line purpose, a returns block with structure, an example, and an auth note. No filler sentences; every line contributes. It is front-loaded with the main purpose, making parsing and understanding effortless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a concrete return shape, a note about team count (33 entries for NFL), and a special case (id 0). It also mentions auth needs. It could be slightly more complete regarding non-NFL sports or variations in proGamesByScoringPeriod, but the essentials for correct invocation and interpretation are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; every parameter is already described in the input schema (game enum, view default, required seasonId). The description adds an example binding game='ffl' and seasonId=2025, which helps illustrate valid input but does not explain parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Pro (real-world) teams for a fantasy season' with a specific verb and resource scope, distinguishing it from fantasy-team-centric sibling tools like espnfantasy_teams. It enumerates exactly what is returned (ids, abbreviations, BYE weeks, games by scoring period), leaving no ambiguity about 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for use (fetching real-world pro teams and schedules for a fantasy season) with an explicit example ('NFL teams + bye weeks + week-by-week pro schedule'). It does not explicitly name alternatives or exclusion criteria, but the 'Pro' designation and sibling contrast make appropriate usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_rostersARead-onlyIdempotent
Every fantasy team's roster — who each manager holds, their lineup slot, acquisition type and player stats. LARGE (hundreds of KB).
Returns: {teams:[{id, roster:{entries:[{playerId, lineupSlotId, acquisitionType, playerPoolEntry:{player:{fullName, defaultPositionId, eligibleSlots, injuryStatus, stats:[…]}}}]}}]}
Example: All rosters, week 3 {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | No | Roster as it stood in this scoring period (week). Omit for the current one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnly/openWorld/idempotent annotations: the response is explicitly flagged as LARGE (hundreds of KB), the auth behavior is disclosed, and the return shape is shown. The 'unlocks more' cookie note is slightly vague, but no annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and compact: an overview, a size warning, a return shape, an example, and an auth note. Each section earns its place and the most important caveat (LARGE response) is front-loaded near the start.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description supplies a useful return-shape sketch, example request, auth note, and size warning. It does not discuss pagination, errors, or rate limits, but the essential context for invoking the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already handles parameter semantics. The description adds a concrete example illustrating seasonId/leagueId/scoringPeriodId for a weekly roster request, but it does not add much beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and scope: every fantasy team's roster with manager ownership, lineup slot, acquisition type, and player stats. It is distinct from sibling tools like espnfantasy_teams and espnfantasy_standings, though it lacks an explicit imperative verb like 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example ('All rosters, week 3') and wording 'Every fantasy team's roster' imply when to use this tool, but there is no explicit statement about when not to use it or what to use instead. The LARGE-size warning is useful, but the guidance is mostly implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_scoreboardARead-onlyIdempotent
Scoreboard for a scoring period — matchup totals plus the pro-game state behind each fantasy team.
Returns: {schedule:[{matchupPeriodId, home:{teamId, totalPoints, rosterForCurrentScoringPeriod, cumulativeScore:{wins,losses,ties}}, away:{…}}]}
Example: This week's scoreboard {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| scoringPeriodId | No | Scoring period; omit for the current one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context about authentication (works without a key; cookie unlocks more) and the return structure, which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a one-line summary, Returns block, Example, and Auth note. Every section earns its place, and the description is front-loaded with the purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a return shape and example. It covers authentication and main parameters. It could further clarify what 'pro-game state' includes, but overall it is sufficiently complete for a read-only tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage), so baseline is 3. The description adds a concrete example with parameter values and clarifies the meaning of scoringPeriodId ('omit for the current one' is in schema, but the example reinforces it). This adds useful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is a scoreboard for a scoring period, providing matchup totals and pro-game state. This distinguishes it from sibling tools like espnfantasy_matchups or espnfantasy_boxscore by focusing on the scoreboard view with aggregate totals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context (scoring period scoreboard) but offers no explicit guidance on when to use this tool versus alternatives like espnfantasy_matchups or espnfantasy_boxscore. The example implies usage for 'this week's scoreboard' but does not address exclusions or sibling distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_seasonARead-onlyIdempotent
One game-season's status: current scoring period, start/end dates, whether it is active.
Returns: {abbrev:'FFL 2025', id:2025, gameId, name, active, display, startDate, endDate, currentScoringPeriod:{id}}
Example: 2025 fantasy football season status {"game": "ffl", "seasonId": 2025}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code: ffl=football, flb=baseball, fba=basketball, fhl=hockey, wfba=WNBA. | ffl |
| seasonId | Yes | Season year, e.g. 2025 (from espnfantasy_games.currentSeasonId). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint) already convey safety profile. The description adds useful context: the exact return fields, an example usage, and authentication behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set'). This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, a return format block, an example call, and auth note. Every sentence earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only status tool, the description covers the return shape, an example, and auth requirements. It lacks edge-case behavior or error conditions, but these are less critical for a straightforward status endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (game, seasonId) are well documented in the schema itself. The description adds an example that illustrates parameter values, but does not introduce new semantic information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One game-season's status' with a specific verb and resource, listing the key data points (current scoring period, start/end dates, active flag). This distinguishes it from sibling tools like espnfantasy_games or espnfantasy_league by focusing on a single season's status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example call but does not explicitly state when to use this tool versus alternatives such as espnfantasy_status or espnfantasy_games. The intended use is implied by the title and content, but no direct 'use this when' or 'instead of' guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_standingsARead-onlyIdempotent
League standings — records, points for/against, division and playoff seeding.
Returns: {teams:[{id, name, playoffSeed, rankCalculatedFinal, record:{overall:{wins,losses,ties,percentage,pointsFor,pointsAgainst}, division:{...}, home:{...}, away:{...}}}], schedule:[…]}
Example: Final standings {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | mStandings alone omits team names/records — mTeam is what carries them. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, lowering the burden. The description adds useful context beyond annotations: auth behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set') and a detailed return shape. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and information-dense: a one-line summary, a clear return type, an example, and an auth note. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by providing the return structure and an example. It doesn't elaborate on the view parameter's effect beyond the schema, but for a simple read-only standings tool, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description contributes an example invocation but no new parameter meanings beyond what the schema provides, justifying the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'League standings — records, points for/against, division and playoff seeding' and provides a detailed return object, making the tool's purpose unmistakable. It distinguishes itself from sibling tools like espnfantasy_teams or espnfantasy_rosters by focusing specifically on standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not guidance or alternatives are given. The description implies use when league standings are needed, and the example shows a typical request, but it does not compare to other espnfantasy tools or explain when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_statusARead-onlyIdempotent
League lifecycle status — current matchup period, latest scoring period, whether the season is active, waiver process dates.
Returns: {status:{currentMatchupPeriod, latestScoringPeriod, finalScoringPeriod, isActive, previousSeasons:[int], teamsJoined, waiverProcessStatus:{…}}}
Example: Where the league is up to {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, open-world, idempotent), the description adds auth behavior (works without a key, cookie enables more) and the return object shape. This expands on the structured metadata, though it does not cover error conditions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, return shape, example, and auth note. Every sentence adds value and the format is scannable, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description provides a useful return-shape outline and an auth note. It covers the core status fields, but the waiverProcessStatus sub-object is truncated and field meanings like previousSeasons are unexplained. For a simple status tool, this is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, parameter descriptions already document game, view, leagueId, and seasonId. The description's example reinforces the combination but provides no new semantic details beyond the schema, earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving league lifecycle status including current matchup period, latest scoring period, season activity, and waiver dates. This distinguishes it from sibling fantasy tools focused on rosters, scores, or transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing the status fields, but it does not explicitly state when to choose this over other espnfantasy_* tools or mention alternatives/exclusions. The example clarifies the input format but not the decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_teamsARead-onlyIdempotent
Fantasy teams with records, points for/against, playoff seed and projected rank.
Returns: {teams:[{id, abbrev, name, owners, primaryOwner, divisionId, playoffSeed, points, pointsAdjusted, currentProjectedRank, rankCalculatedFinal, record:{overall:{wins,losses,ties,pointsFor,pointsAgainst}}, transactionCounter, waiverRank}], members:[{id, displayName, firstName, lastName}]}
Example: All fantasy teams + records {"game": "ffl", "seasonId": 2018, "leagueId": 1234}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds valuable behavioral context by disclosing authentication behavior ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set') and fully specifying the return payload structure, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a summary line, return schema, example, and auth note. It is moderately sized and each section serves a purpose, though the return schema is somewhat lengthy. Overall, it is concise without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by providing the full return structure and a concrete example. Combined with complete parameter descriptions and safety annotations, the description is sufficiently complete for an agent to invoke the tool correctly, though it omits details like pagination, error conditions, or rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full documentation for all 4 parameters (100% coverage), including descriptions for leagueId, seasonId, game, and view. The description adds an example with concrete values but does not explain parameters beyond what the schema already states, so the baseline 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides fantasy teams with records, points for/against, playoff seed and projected rank, and includes a detailed return shape and example. It distinguishes from sibling tools by focusing on team-level data rather than standings, rosters, or matchups, though it lacks an explicit verb like 'retrieves' or 'lists.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not mention alternative tools or specific conditions for when to use this tool vs siblings. The example implies usage for fetching teams in a league, but there are no exclusions or comparisons to related tools such as espnfantasy_standings or espnfantasy_rosters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espnfantasy_transactionsARead-onlyIdempotent
Completed transactions (adds, drops, trades, waiver claims) for a scoring period.
Returns: {transactions:[{id, type, status, teamId, memberId, scoringPeriodId, proposedDate, bidAmount, items:[{type:'ADD'|'DROP', playerId, fromTeamId, toTeamId}]}]}
Example: Week-3 transactions {"game": "ffl", "seasonId": 2018, "leagueId": 1234, "scoringPeriodId": 3}
Auth: works without a key; ESPN_FANTASY_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Fantasy game code. One of: ffl, flb, fba, fhl, wfba. | ffl |
| view | No | Leave as-is. | |
| leagueId | Yes | League id. Required — part of the URL path. | |
| seasonId | Yes | Season year (>= 2018). Required — part of the URL path. | |
| fantasy_filter | No | Optional type filter, e.g. {"transactions":{"filterType":{"value":["TRADE_ACCEPTED","WAIVER","FREEAGENT"]}}}. | |
| scoringPeriodId | Yes | Scoring period to read. REQUIRED — without it the response carries no `transactions` key at all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds valuable context: auth requirements ('works without a key; ESPN_FANTASY_COOKIE unlocks more if set') and the return shape. This goes beyond the structured data without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, return format, example, and auth note. Each section serves a purpose with no filler. The front-loaded purpose sentence is immediately informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description provides the return structure, an example, and auth notes. It's sufficient for a read-only list tool, though it doesn't mention potential pagination or error behaviors. Overall, it's a complete enough description for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a usage example with default parameter values but doesn't introduce new semantics beyond what the schema already provides for parameters like game, leagueId, or scoringPeriodId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Completed transactions (adds, drops, trades, waiver claims) for a scoring period', clearly identifying the resource and scope. This distinguishes it from the sibling tool espnfantasy_pending_transactions by explicitly saying 'Completed'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: for completed transactions in a scoring period, and provides a concrete example. It doesn't explicitly name alternatives (like espnfantasy_pending_transactions), but the 'Completed' qualifier makes the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_game_summaryARead-onlyIdempotent
Full summary for one game: box score, scoring plays, drives/play-by-play,
leaders, win-probability and odds. event is an id from espn_scoreboard. No
example here on purpose — it needs a live event id, so the doctor probes
espn_scoreboard instead.
Returns: {boxscore:{teams, players}, plays:[...], scoringPlays:[...], leaders:[...], winprobability:[...]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Event/game id from espn_scoreboard, e.g. 401547439. | |
| sport | Yes | Sport slug, e.g. football, basketball. Required — part of the URL path. | |
| league | Yes | League slug, e.g. nfl, nba. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly/openWorld/idempotent hints, so the description adds value by describing the dependency on a live event id and the shape of the returned data. It also states 'Auth: none needed,' which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose first, then dependency explanation, return format, and auth note. Every sentence earns its place, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only summary tool with good annotations and full schema coverage, the description is complete. It explains the dependency on espn_scoreboard, outlines the return structure, and notes auth requirements, sufficing despite lacking an explicit output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a clear description. The description adds the note that `event` comes from espn_scoreboard, which slightly reinforces the schema, but overall it largely repeats what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full summary for one game' and enumerates specific components (box score, scoring plays, drives/play-by-play, leaders, win-probability and odds). This distinguishes it from sibling tools like espn_scoreboard, which lists games rather than providing detailed summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs that `event` is an id from espn_scoreboard and explains why no example is provided ('it needs a live event id, so the doctor probes espn_scoreboard instead'). This gives clear usage context and points to the prerequisite tool, though it doesn't explicitly state when not to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_newsARead-onlyIdempotent
League news feed: recent articles (headline, description, links, images, related athletes/teams) for one league.
Returns: {header, articles:[{headline, description, published, links, categories}]}
Example: Latest NFL news. {"sport": "football", "league": "nfl"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max articles to return. | |
| sport | Yes | Sport slug, e.g. football, basketball. Required — part of the URL path. | |
| league | Yes | League slug, e.g. nfl, nba. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint) and open world. The description adds valuable behavioral context: return format ({header, articles}), content fields (headline, description, links, images), and 'Auth: none needed'. It doesn't mention rate limits or failure behavior, but with annotations and a simple read-only feed, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely efficient: one lead sentence stating purpose, one line for return format, one snippet example, and a one-line auth note. Every sentence earns its place. No fluff, front-loaded purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only news feed with full parameter coverage and strong annotations. The description covers return structure, example usage, and auth. No output schema needed since return format is explicitly defined inline. It's complete for an agent to select and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions (sport slug, league slug, limit). The description adds a concrete usage example ('sport': 'football', 'league': 'nfl') that demonstrates exact parameter values, reinforcing the schema's 'e.g.' hints. It doesn't add syntax details but the example meaningfully aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a 'League news feed' returning 'recent articles' for one league, which distinguishes it from score/standings/team tools like espn_scoreboard or espn_teams. However, it doesn't explicitly differentiate from other news tools like pl_news_latest or nbl_news, so it's clear but not fully sibling-distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for one league's news, with an example showing sport/league values. It doesn't explicitly state when to use this over alternatives or exclude other uses, but the 'for one league' scope and example give solid contextual guidance. No misleading alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_scoreboardARead-onlyIdempotent
Scoreboard for one league: today's (or a given date's) games with status,
clock, live scores and event ids. The fastest way to get the event ids that
espn_game_summary / espn_core_call (event_*) need. sport+league are slugs, e.g.
football/nfl, basketball/nba, soccer/eng.1.
Returns: {leagues:[...], events:[{id, name, status, competitions:[{competitors:[{team, score}]}]}]}
Example: Today's NFL scoreboard. {"sport": "football", "league": "nfl"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | Week number (NFL/college football). | |
| dates | No | Date filter YYYYMMDD (or a range YYYYMMDD-YYYYMMDD); omit for today. | |
| sport | Yes | Sport slug, e.g. football, basketball, baseball, hockey, soccer. Required — part of the URL path. | |
| league | Yes | League slug, e.g. nfl, nba, mlb, nhl, eng.1. Required — part of the URL path. | |
| seasontype | No | Season phase: 1=pre, 2=regular, 3=post, 4=off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the tool is known to be safe and non-mutating. The description adds valuable behavioral context beyond annotations: the return structure, that no auth is needed, and that it can operate on today's or a specified date. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured: a one-sentence purpose, a return shape, a short example, and an auth note. Every part earns its place, and it avoids unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description explicitly states the return structure and gives an example. It also mentions the key input parameters and their slug format. For a relatively simple scoreboard tool, this is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description enhances parameter understanding by explaining that sport and league are slugs (with examples like football/nfl) and provides a concrete usage example. This adds useful clarity without overdoing it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a scoreboard for one league with status, clock, score, and event IDs. It also distinguishes itself from siblings by noting it is the fastest way to get event IDs needed by espn_game_summary / espn_core_call, making it specifically actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool: to get event IDs for a league, especially before calling espn_game_summary or espn_core_call. It also clarifies the slug format for sport and league and includes an example, which helps an agent decide when this is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_site_callARead-onlyIdempotent
Gateway to the ESPN site API resource families (site.api.espn.com). Supply an
operation plus a path_params map containing at least sport + league
(slugs like football/nfl, basketball/nba) and any id the op needs (teamId,
athleteId), then optional query_params. Covers team detail/rosters/schedules/
injuries/depth-charts/transactions/history, athlete news, conference/division
groups and poll rankings. For athlete profiles/game-logs/splits use
espn_web_call (or espn_core_call for the canonical model). Browse every
operation in the espn://site/operations resource.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description adds useful context like 'Auth: none needed', return type (JSON object), and that operations are dynamic. It does not mention potential error handling or rate limits, but for a read-only gateway with strong annotations, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, covering purpose, required inputs, coverage scope, alternatives, discovery mechanism, return type, and auth in a clear flow. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides sufficient context for a generic gateway tool: how to discover operations, what path params are expected, and which sibling tools cover alternative needs. This makes the tool usable without additional resources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description enriches the schema by explaining that `path_params` must include at least `sport` and `league` with slug examples (football/nfl, basketball/nba) and optional IDs like teamId/athleteId. It also reinforces the schema's `query_params` description, providing practical guidance beyond the property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a gateway to the ESPN site API resource families, enumerating specific data types (team detail, rosters, schedules, injuries, etc.). It explicitly distinguishes from sibling tools by directing athlete profiles/game-logs/splits to espn_web_call or espn_core_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete instructions on how to supply `operation`, `path_params` (with sport+league and id), and optional `query_params`. Explicitly names alternatives for different data needs (espn_web_call, espn_core_call) and directs users to browse the operations catalogue for valid operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_standingsARead-onlyIdempotent
League standings / ladder: per-team wins, losses, win %, conference/division groupings for the current (or a given) season.
Returns: {name, children:[{standings:{entries:[{team, stats:[{name, value}]}]}}]} (children = conferences/divisions)
Example: Current NBA standings. {"sport": "basketball", "league": "nba"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport slug, e.g. football, basketball. Required — part of the URL path. | |
| league | Yes | League slug, e.g. nfl, nba. Required — part of the URL path. | |
| season | No | Season year, e.g. 2025; omit for current. | |
| seasontype | No | Season phase: 1=pre, 2=regular, 3=post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds the exact return structure, explains that children represent conferences/divisions, and notes 'Auth: none needed.' This adds meaningful context beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, containing only three short sections: purpose, return structure, and example/auth note. Every sentence provides value with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only standings tool, the description covers purpose, return shape, parameter example, and authentication. Given the complete input schema and annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents all parameters with descriptions. The description supplements this with a concrete example showing sport='basketball' and league='nba', and clarifies that season is optional (current or given). This adds practical usage guidance beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'League standings / ladder: per-team wins, losses, win %, conference/division groupings' and provides an example for NBA. This clearly defines the tool's function and distinguishes it from sibling ESPN tools like espn_scoreboard or espn_game_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context by indicating 'for the current (or a given) season' and giving an example call with sport and league. It does not explicitly list alternatives or exclusions, but the generic sport/league parameters make its scope obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_teamsARead-onlyIdempotent
Team catalogue for one league: every team with id, name, abbreviation, colours and logos. Use the team ids with espn_site_call (team_roster, team_schedule, …).
Returns: {sports:[{leagues:[{teams:[{team:{id, displayName, abbreviation}}]}]}]}
Example: All 32 NFL teams. {"sport": "football", "league": "nfl"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport slug, e.g. football, basketball. Required — part of the URL path. | |
| league | Yes | League slug, e.g. nfl, nba. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description needs less disclosure. It adds the return structure and auth requirements, which is useful. However, there is an inconsistency: it claims 'colours and logos' are included but the return structure only shows id, displayName, abbreviation. This minor contradiction in the description reduces trust in behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, usage, return structure, example, and auth note. It is concise but covers all essential aspects. The inclusion of both a return structure and example is valuable, though the discrepancy about colours/logos adds a minor blip, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates nicely by showing the return structure and an example. It also mentions auth and usage context. The only gap is the inconsistent mention of fields (colours/logos vs. the return structure), which leaves a small ambiguity about the exact response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with descriptive text (sport and league slugs). The description adds a concrete example ({'sport': 'football', 'league': 'nfl'}) and the phrase 'for one league' reinforcing the league parameter. This goes beyond the schema by providing a clear, valid input pair, so it earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Team catalogue for one league' and lists the specific fields (id, name, abbreviation, colours, logos). This is a specific verb+resource pair that distinguishes it from sibling tools like pl_teams or mlb_teams, and the reference to using team ids with espn_site_call clarifies its role in the ESPN ecosystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use the team ids with espn_site_call (team_roster, team_schedule, …)' which tells the agent when to use this tool. It also provides an example input. However, it does not state when not to use it or mention alternatives, so it falls short of the explicit when/when-not/alternatives bar for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
espn_web_callARead-onlyIdempotent
Gateway to the ESPN web API (site.web.api.espn.com): site-wide search across
teams/athletes/leagues, plus the common/v3 athlete views (overview, stats,
gamelog, splits) that power player profile pages, and statistics-by-athlete.
search needs only query_params {query, limit}; the athlete_* ops need
path_params {sport, league, athleteId}. Browse the espn://web/operations resource.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that auth is not needed, that it returns a JSON object, and specific operation details. It doesn't describe pagination or rate limits, but with annotations covering the safety profile, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and structured with clear sections (description, parameter hints, return type, auth). Every sentence provides useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation gateway with no output schema, it names the API host, lists operation categories, specifies parameter needs, states return type and auth. The pointer to the catalogue resource fills the gap for exhaustive operation details. Acceptable completeness, though it could mention pagination or error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the three generic parameters and references the catalogue. The description adds operation-specific parameter requirements (query/limit for search; sport/league/athleteId for athlete ops), which is valuable beyond the generic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a gateway to the ESPN web API, enumerating specific operations (site-wide search, common/v3 athlete views, statistics-by-athlete) and the host endpoint. This differentiates it from sibling gateways like espn_site_call by naming the specific host and operation set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that `search` requires only query_params with {query, limit} and athlete_* ops require path_params with {sport, league, athleteId}, plus instructs browsing the espn://web/operations resource for valid operations. This provides clear operation-selection guidance, though it doesn't explicitly contrast against sibling tools for 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.
euroleague_clubsARead-onlyIdempotent
The clubs in one season, with city, country and venue detail.
Returns: {total, data:[{code, name, abbreviatedName, editorialName, city, country:{code, name}, address, images, isVirtual}]} — code (e.g. 'MAD') is the club key used elsewhere
Example: 2024-25 EuroLeague clubs {"competition": "E", "season": "E2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season code, e.g. E2024 (competition letter + starting year). Required — part of the URL path. | |
| competition | No | E = EuroLeague, U = EuroCup. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and idempotent. The description adds value by documenting the return shape, stating that no authentication is needed, and explaining the significance of the `code` field. It does not disclose edge cases, but for a simple read-only list this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it opens with a clear one-sentence purpose, then lists the return format, an example, and authentication requirements. Every line contributes useful information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the response structure and includes a concrete example. The annotations cover safety and idempotency, and the input schema covers parameters. The tool is simple enough that no further context is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides full descriptions for both parameters (100% coverage), so the description does not need to add parameter details. It does include an example request with `competition` and `season` values, which slightly aids understanding, but no additional semantic meaning beyond the schema is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns clubs for a season with city, country, and venue details. The example and the note that `code` is used elsewhere further clarify its role. It is distinct from sibling tools like euroleague_games or euroleague_people.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is obvious: retrieve clubs for a EuroLeague/EuroCup season. The example request and the explanation of the season code provide clear context. No explicit alternatives are mentioned, but none are needed since this is the only EuroLeague club-listing tool among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_gameARead-onlyIdempotent
One game's detail by its per-season game code.
Returns: {id, gameCode, identifier, date, played, gameStatus, local:{club, score}, road:{club, score}, group, phaseType, referee1..4, audience} — a single object, NOT wrapped in {data}
Example: Game 1 of the season {"competition": "E", "season": "E2024", "gameCode": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season code. Required — part of the URL path. | |
| gameCode | Yes | Per-season sequential game code (an integer like 1 or 330) — NOT the uuid. Required — part of the URL path. | |
| competition | No | Competition letter. One of: E, U. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds further useful context: 'Auth: none needed' and a clarification that the response is 'a single object, NOT wrapped in {data}'. These details go beyond the structured annotations, though it doesn't cover error behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: a one-line purpose, a return shape summary, an example, and an auth note. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description covers the key aspects: what it returns (including the exact fields), an example call, and auth requirements. Given the annotations and schema already handle safety and parameter details, this is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with each parameter clearly explained. The description's example demonstrates a valid call but adds little semantic value beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'One game's detail by its per-season game code.' It clearly distinguishes from sibling tools like euroleague_games (likely a list) and euroleague_game_stats (statistics) by focusing on a single game's full detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to get one game's detail using its per-season game code. However, it does not explicitly mention alternative tools (e.g., euroleague_games for multiple games) or exclusions, so it falls short of the explicit alternative guidance seen in top-tier examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_gamesARead-onlyIdempotent
Games in a season with scores, venue and officials. Unpaged this is ~800 KB — pass a limit or filter by round.
Returns: {total, data:[{id (uuid), gameCode, identifier:'E2024_330', date, localDate, played, gameStatus, group, phaseType, local:{club, score}, road:{club, score}, isNeutralVenue, referee1..4, audience}]} — HOME/AWAY are local/road; use gameCode (an int) for the per-game tools, not the uuid
Example: First 50 games of the season {"competition": "E", "season": "E2024", "limit": 50}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. The whole season unpaged is ~800 KB. | |
| offset | No | Page offset. | |
| season | Yes | Season code. Required — part of the URL path. | |
| competition | No | Competition letter. One of: E, U. | E |
| roundNumber | No | Restrict to one round. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial context: return field structure, the local/road naming convention, identifier format, auth requirements, and the crucial gameCode-vs-uuid gotcha. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than typical, the description is tightly structured and every sentence earns its place: purpose, return schema, gotcha, example, auth. It is front-loaded with the core purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return shape with a detailed structure and example. It also covers size/pagination concerns, field naming, and authentication, making it complete for a listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds usage context beyond the schema by explaining why limit/roundNumber matter (size ~800 KB) and providing an example call, which helps the agent choose and combine parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Games in a season with scores, venue and officials,' which is a specific verb+resource. It distinguishes itself from sibling tools like euroleague_game by noting that per-game tools should use gameCode, not the uuid returned here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to 'pass a limit or filter by round' due to the ~800 KB size, and warns to 'use gameCode (an int) for the per-game tools, not the uuid.' This gives clear when-to-use and when-not-to-use guidance relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_game_statsARead-onlyIdempotent
Box score for one game: both teams' player lines plus team totals and coach.
Returns: {local:{team, coach, total:{…team totals…}, players:[{player:{person, dorsal, position, club}, stats:{timePlayed, valuation, points, fieldGoalsMade2/3, freeThrowsMade, offensiveRebounds, defensiveRebounds, assistances, steals, turnovers, plusMinus, foulsCommited}}]}, road:{…}} — a player line is NESTED as {player, stats}: identity under player, numbers under stats. valuation is EuroLeague's PIR efficiency metric. timePlayed is SECONDS as a float (1088.0 = 18:08), not a MM:SS string.
Example: Box score for game 1 {"competition": "E", "season": "E2024", "gameCode": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season code. Required — part of the URL path. | |
| gameCode | Yes | Per-season game code. Required — part of the URL path. | |
| competition | No | Competition letter. One of: E, U. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations (readOnlyHint, idempotentHint, openWorldHint), the description goes well beyond them. It explains the nested structure (player vs stats), defines 'valuation' as EuroLeague's PIR metric, and warns that 'timePlayed' is in seconds as a float (e.g., 1088.0 = 18:08), not a MM:SS string. It also explicitly states 'Auth: none needed,' covering a behavioral aspect not evident from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries useful information: the result structure, nesting, unit conventions, metric explanation, an example call, and auth requirements. It is front-loaded with the core purpose and structured with a clear 'Returns:' block. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex nested return object and no output schema, the description fully compensates by detailing the return structure, the meaning of specific fields, and the required inputs. It includes an example to illustrate correct invocation. This gives an agent everything needed to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage, with each parameter (season, gameCode, competition) clearly documented. The description adds a concrete example using actual values, but it does not provide additional semantic meaning beyond the schema. The example is helpful but not necessary for understanding what each parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Box score for one game: both teams' player lines plus team totals and coach.' It clearly distinguishes this tool from siblings like euroleague_game or euroleague_games by focusing on per-game detailed statistics. The return structure is fully specified, leaving no ambiguity about what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for retrieving a box score for a specific game, and the example shows the required parameters. It implies use when you need detailed player and team stats, but it does not explicitly state when not to use it or name alternative tools for other purposes (e.g., schedule or list of games). Thus, it provides clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_peopleARead-onlyIdempotent
Players and coaches registered for a season. LARGE (~600 KB) — page it.
Returns: {total, data:[{code, name, alias, height, birthDate, country, position, club}]}
Example: First page of registered people {"competition": "E", "season": "E2024", "limit": 100}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size — the unpaged response is ~600 KB. | |
| offset | No | Page offset. | |
| season | Yes | Season code, e.g. E2024. Required — part of the URL path. | |
| competition | No | Competition letter. One of: E, U. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnly/openWorld/idempotent annotations, it alerts users that the response is ~600 KB and must be paged, and it specifies the return shape ({total,data:[...]}) and that no auth is needed. This adds operational context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is compact: two sentences plus example and auth line. The size warning is front-loaded, and every line adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the return field list is helpful. With annotations covering read-only/idempotency, schema covering all params, and description covering pagination and example, the tool is adequately specified for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with descriptions (season required, limit/offset paging, competition enum). The description's example illustrates parameter usage but does not add significant new semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns 'Players and coaches registered for a season,' naming the resource (people) and scope (season). This distinguishes it from sibling Euroleague tools like euroleague_game or euroleague_seasons by content type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: it's for retrieving season rosters, warns about large size and recommends pagination. However, it does not explicitly contrast with sibling tools or state when not to use it, so it falls short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_roundsARead-onlyIdempotent
The rounds (matchdays) in a season, with their date windows.
Returns: {total, data:[{round, name, seasonCode, phaseTypeCode, minGameStartDate, maxGameStartDate}]}
Example: EuroLeague rounds {"competition": "E", "season": "E2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season code. Required — part of the URL path. | |
| competition | No | Competition letter. One of: E, U. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. Description adds response structure and 'Auth: none needed', which is beyond annotations. No contradictory behavior disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is compact, front-loaded with purpose, and includes return shape, example, and auth – no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param read-only tool with no output schema, the description adequately explains the return shape and auth. It could mention ordering or phaseTypeCode meanings, but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions (100% coverage). The example provides concrete values but does not add meaning beyond schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'The rounds (matchdays) in a season, with their date windows' and 'Returns: {total, data:[...]}' – a specific resource with an explicit verb ('returns'). It distinguishes from sibling tools like euroleague_game, euroleague_seasons, and laliga_rounds by focusing on EuroLeague rounds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an example call but no explicit guidance on when to use this vs alternatives. No exclusions or mentioned alternatives. The use case is implied by the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
euroleague_seasonsARead-onlyIdempotent
Seasons for a competition — call this to get valid season codes like E2024.
Returns: {total, data:[{code:'E2024', name:'EuroLeague 2024-25', alias:'2024-25', year, startDate, endDate, competitionCode, winner}]}
Example: EuroLeague seasons {"competition": "E"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| competition | No | E = EuroLeague, U = EuroCup. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return shape ({total, data:[...]}), notes that no authentication is needed, and provides a concrete example — all beyond what the annotations (readOnlyHint, openWorldHint, idempotentHint) already convey. It doesn't discuss rate limits or pagination, but for a simple read-only season list, the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by a useful return-shape block, an example, and a brief auth note. Each section earns its place; the structure is cleanly organized, though slightly segmented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and strong annotations, the description covers the essentials: purpose, return shape (compensating for the absent output schema), an example, and auth requirements. No critical gaps stand out for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the enum parameter is fully described with 'E = EuroLeague, U = EuroCup'), so the baseline is 3. The description's example call ({'competition': 'E'}) reinforces usage but adds no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'call this to get valid season codes like E2024.' It distinguishes itself from sibling tools like euroleague_games or euroleague_rounds, which handle games and rounds rather than season metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use this tool when it needs valid season codes, providing a concrete trigger ('call this to get valid season codes like E2024'). It doesn't name alternatives or exclusions, but the clear use-case phrasing gives sufficient contextual guidance for a simple lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_racing_callARead-onlyIdempotent
Call any FanDuel Racing (TVG) GraphQL operation by name + variables against api.racing.fanduel.com/cosmo/v1/graphql. The full query text lives server-side and the boilerplate variables (brand/product/device/profile) default automatically, so most calls need no variables. Read fanduel://racing/operations for the operation list + variable signatures.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| variables | No | Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering safety. The description adds valuable context: the query text lives server-side, boilerplate variables default automatically, auth is not needed, and returns a JSON object. It also states that guessing an operation returns an error (in schema description), which adds operational 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
At four short sentences plus Returns/Auth lines, the description is compact and front-loaded. The first sentence immediately states the purpose, and every subsequent sentence adds information about operation discovery, defaults, return type, and auth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a generic GraphQL caller with no output schema, but the description covers the key needs: how to discover operations, that variables are optional with defaults, that auth is not required, and the return format. It could be more explicit about error behavior or response structure, but the pointer to the operations resource and the schema's param descriptions fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions are thorough (100% coverage): the operation parameter specifies valid names come from the catalogue resource and warns about errors, and the variables parameter explains that required keys depend on the operation. The description adds 'the boilerplate variables (brand/product/device/profile) default automatically, so most calls need no variables,' which helps the agent decide when to pass variables.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Call any FanDuel Racing (TVG) GraphQL operation by name + variables against api.racing.fanduel.com/cosmo/v1/graphql.' It specifies the verb (call), resource (FanDuel Racing GraphQL API), and scope (any operation), distinguishing it from sibling tools like fanduel_racing_messages or fanduel_sb_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs the agent to 'Read fanduel://racing/operations for the operation list + variable signatures,' providing a clear next step for using the tool. It also explains that most calls need no variables due to automatic defaults, helping the agent decide when to omit variables. However, it does not explicitly state when to prefer dedicated FanDuel racing tools over this generic caller, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_racing_messagesARead-onlyIdempotent
Site message strings (disclaimers, informational copy) for a namespace.
Returns: {response:{:{: }}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Brand key. | fdr |
| device | No | Device key. | desktop |
| product | No | Product key. | tvg5 |
| namespace | No | Message namespace(s), comma-separated (e.g. "Global,InformationalPages"). | Global |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds the exact response envelope and confirms no authentication is needed, providing useful behavioral context beyond the annotations. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three short sentences covering the resource, return format, and auth. Information is front-loaded, and every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only message lookup, the description adequately covers the response shape and auth. Since there is no output schema, providing the return format is helpful. It omits edge-case behavior like error handling, but that is not necessary given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully described in the input schema with defaults and examples, providing 100% schema coverage. The description itself adds no additional parameter semantics, so the baseline for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as site message strings (disclaimers, informational copy) for a namespace and provides the response structure. This distinguishes it from sibling tools like fanduel_racing_promotions and fanduel_racing_quicklinks, making its purpose unambiguous even without an explicit verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what it returns, but it does not explicitly say when to use this tool versus alternatives. No exclusions or comparison with other FanDuel racing tools are provided, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_racing_promotionsARead-onlyIdempotent
Structured racing promotions / placements (POST; empty body returns all).
Returns: {success, promoPlacements:[{...}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Optional filter body; {} returns the default placements. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, idempotentHint=true, openWorldHint=true) already establish the safety profile. The description adds meaningful behavior: it specifies the HTTP method (POST), the auth requirement, and the response shape. This goes beyond annotations, but it stops short of describing pagination or data details, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short segments covering purpose, response, and auth. Every sentence is informative and there is no repetition of structured data, making it a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives the top-level response structure and auth info, but with no output schema, the nested promoPlacements object structure is left as ellipses. The body allows additional properties but no filter guidance is provided. For a simple default call, it's adequate but leaves some gaps, so a 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a full description of the 'body' parameter with 'Optional filter body; {} returns the default placements', giving 100% model coverage. The description's 'empty body returns all' adds a slight clarification but does not substantially enrich the parameter semantics. Baseline for high schema coverage is 3, and no compelling extra context is provided, so a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning structured racing promotions and placements, with 'empty body returns all' specifying the scope. However, it lacks an explicit verb like 'list' or 'get' and does not distinguish itself from sibling FanDuel racing tools beyond the resource name, so it earns a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context by stating that a POST with an empty body returns all placements and that no auth is needed, but it does not explicitly state when to choose this tool over alternatives or any exclusions. The usage is implied by the tool name and description, so this is a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_racing_quicklinksARead-onlyIdempotent
Homepage quick-link tiles for the racing site.
Returns: {quickLinks:[{label, url, ...}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds 'Auth: none needed', which is useful context. It also discloses a partial return structure ({quickLinks:[{label, url, ...}]}), giving agents a sense of the response shape 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the core purpose. The return and auth notes are separate but compact, and every element earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, read-only, trivial return), the description is fully sufficient. It states the purpose, provides a return example, and mentions authentication, covering all necessary context 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema fully covers the input space, and the baseline for no-parameter tools is 4. The description appropriately does not invent parameter details, though it also doesn't explicitly state that no parameters are required (which the schema already shows).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing homepage quick-link tiles for the FanDuel racing site, which matches the tool name and distinguishes it from sibling racing tools for other brands. However, it lacks an explicit verb like 'retrieve' or 'list', and does not elaborate on the exact nature of the tiles beyond the return example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention any exclusions or point to other tools for related data, leaving the agent to infer usage solely 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.
fanduel_sb_callARead-onlyIdempotent
Fetch a FanDuel Sportsbook (US, NJ) REST resource by operation name. Carries
the static public _ak web key + the sportsbook Origin/region headers, so the
caller supplies only the variable query params (eventId, customPageId,
dataEntries, eventIds, …). Read fanduel://sportsbook/operations for the list.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds context beyond annotations: it discloses that the tool carries the static public _ak web key and Origin/region headers, so the caller does not need to provide auth. It also mentions 'Auth: none needed' and points to the operations catalogue, which clarifies behavior. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and front-loaded with the core purpose, then the auth/headers context, then the catalogue pointer, and finally the return type and auth requirement. No filler or repetition; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic operation-based tool with rich schema descriptions and helpful annotations, the description covers the essential behavior: what it does, where to find operations, how auth is handled, and expected return type. It lacks specifics about error handling or pagination, but given the tool's nature and the schema's guidance, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with detailed descriptions for operation, path_params, and query_params. The description adds value by listing concrete examples of query parameters (eventId, customPageId, dataEntries, eventIds), giving the agent a sense of what kind of parameters are expected beyond the generic schema. This exceeds the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a FanDuel Sportsbook REST resource by operation name, specifying the US/NJ region and the static public _ak web key plus Origin/region headers. This distinguishes it from sibling tools like fanduel_sb_live_score by positioning it as a generic operation-based caller, and it points to the catalogue resource for valid operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to read 'fanduel://sportsbook/operations' for the list of valid operations, which is an explicit prerequisite. It also explains that the caller only supplies variable query params, implying when to use this tool (after consulting the catalogue). It does not explicitly name alternatives or state when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_sb_live_scoreARead-onlyIdempotent
Live score + period state for one sportsbook event (NJ).
Returns: {openDate, homeTeam:{shortName, abbreviation, score}, awayTeam:{...}, comp, mediaTypes}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sportsbook event id (from fanduel_sb_call event_page / content_page). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent. The description adds 'Auth: none needed' and specifies the exact return structure (openDate, homeTeam/awayTeam objects, comp, mediaTypes). The 'NJ' restriction is also disclosed. This is useful behavioral context beyond annotations with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise lines: purpose, return shape, and auth. Front-loaded with the most important info. No filler or repetition. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with strong annotations, the description provides the return shape, auth, and geographic limitation. It doesn't explain period state values or mediaTypes, but that's unnecessary for selection and invocation. The combination of schema, annotations, and description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for eventId, including its origin from fanduel_sb_call and URL path requirement. The description itself does not elaborate on the parameter, and the schema already carries the semantic weight. Baseline 3 is appropriate since the schema is sufficient and the description adds no extra parameter nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool provides 'Live score + period state for one sportsbook event (NJ)'. This is a specific verb+resource with a geographic scope, distinguishing it from sibling tools like fanduel_sb_call and other sportsbook tools. The 'one event' qualifier directly maps to the eventId parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use is implied by the purpose: when you need live score for a single sportsbook event. The schema description further guides usage by stating eventId comes from 'fanduel_sb_call event_page / content_page', and the tool description references the return shape. This provides a clear workflow context, though it doesn't explicitly list exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fanduel_sgp_priceARead-onlyIdempotent
PRICE A SAME GAME PARLAY you choose — give it two or more selections from one FanDuel event and get the correlation-adjusted combined price. Read the entry with isSGM: true; the SINGLEs alongside it are the individual leg prices, not the parlay.
Returns: {respCode: 'SUCCESS', betCombinations:[{betType, isSGM, features, winAvgOdds:{trueOdds:{decimalOdds:{decimalOdds}}, americanDisplayOdds}, legCombinations:[…]}], betFailures:[…]} — VERIFIED live 2026-08-27 against NBA Boston Celtics @ Detroit Pistons (event 35928218).
READ THE isSGM: true ENTRY — IT IS THE ONLY ONE THAT IS A SAME GAME PARLAY. The response prices EVERY combination it can make from your legs, so a two-leg request comes back with two SINGLEs and one DOUBLE. The SINGLEs are the individual leg prices, not the parlay; taking the first betCombination gives you a single bet.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Verified: 2.02 and 1.87 as singles, and the SGP DOUBLE prices 3.4128 against a naive 3.7765 — a 9.6% correlation charge.
USE winAvgOdds.trueOdds.decimalOdds.decimalOdds, NOT averageOdds. The latter is a DISPLAY rounding: the same bet reads 3.41 there and 3.41275716 in trueOdds. Rounded odds compared against another book's exact ones manufacture edge that is not there.
betFailures: INVALID_COMBINATION IS USUALLY NOT ABOUT YOUR PARLAY. It says the legs cannot form an ORDINARY multi because they are from the same game — which is the whole point of an SGP. It appears alongside a perfectly good isSGM entry, so never treat its presence as failure; check for the isSGM entry instead.
NO isSGM ENTRY MEANS FANDUEL WILL NOT COMBINE THOSE LEGS. Seen live on legs whose markets were sgmMarket: true in fanduel_sb_call(event_page), so that flag is necessary and not sufficient. A leg whose runner is suspended reports RUNNER_SUSPENDED instead.
THE UPSTREAM RETURNS A betReference PLACEMENT TOKEN ON EVERY COMBINATION. It is PROJECTED AWAY here and never reaches you — this tool prices and cannot place. The stake ceilings, bonus-wallet and promotion fields are dropped with it.
Example: Price a two-leg same game parlay {"betLegs": [{"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180521459", "selectionId": 60427}}]}, {"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180522215", "selectionId": 7017823}}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| betLegs | Yes | The legs: [{"legType": "SIMPLE_SELECTION", "betRunners": [{"runner": {"marketId": "734.180521459", "selectionId": 60427}}]}, …]. NOTE THE DOUBLE NESTING — `betRunners` holds objects with a `runner` key, and writing `runners` or a bare runner object binds to NOTHING: the call still returns 200 with legFailures INVALID_BET_LEG and an empty `betRunners`, so it fails silently rather than erroring. Both ids come from fanduel_sb_call(operation="event_page"): `marketId` from attachments.markets, `selectionId` from that markets `runners[]`. All legs must be from ONE event for an SGP. Two or more legs; one leg just returns that legs own price. | |
| web_key | No | FanDuels static PUBLIC web key. Leave it alone — but do not remove it either: WITHOUT `_ak` the call still returns 200 and prices the SINGLES while silently omitting the same-game combination entirely, which is the one thing you asked for. | FhMFpcPWXMeyZxOx |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, idempotentHint=true), the description discloses critical quirks: the response contains both SINGLEs and the SGP entry, `isSGM: true` marks the parlay, odds must be read from trueOdds rather than averageOdds, `betFailures: INVALID_COMBINATION` is expected for same-game legs, and the `betReference` placement token is intentionally dropped. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and includes an example, but it is long and contains redundant warnings (e.g., the `isSGM: true` entry is emphasized twice). The extra length is mostly justified by the tool's non-obvious response shape and silent-failure traps, so it remains valuable despite not being tightly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values and edge cases, and it does so thoroughly: respCode, betCombinations structure, legCombinations, betFailures meanings, RUNNER_SUSPENDED, no-isSGM behavior, and removed betReference. It also documents verification against a live event, making the tool effectively self-contained for correct invocation and result interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds value beyond the schema with a concrete worked example, the requirement that all legs be from one event, and linkage of marketId/selectionId sourcing to fanduel_sb_call. This is meaningful supplementary meaning, though the schema itself is already strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('PRICE A SAME GAME PARLAY'), the resource ('one FanDuel event'), and the exact result ('correlation-adjusted combined price'). It is immediately distinguishable from sibling SGM/SGP tools by naming FanDuel and emphasizing the same-game, multi-leg scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly sets the context: use it for pricing two or more selections from one FanDuel event, and explicitly says what it cannot do ('this tool prices and cannot place'). It does not explicitly name alternative sibling tools for other books, but the FanDuel-specific scope and pricing-only nature provide strong usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_areasBRead-onlyIdempotent
Countries and regions, used to filter competitions. VERIFIED live — works without a key.
Returns: {count, filters, areas:[{id, name, countryCode, flag, parentAreaId, parentArea}]} — VERIFIED (272 areas)
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All areas
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful caveats beyond the readOnly/idempotent annotations, notably that the return shape is unverified and should be inspected before relying on field names. However, it contains serious internal contradictions: the return shape is labeled 'VERIFIED (272 areas)' while a NOTE declares it has 'NOT been verified against a live response,' and auth is both 'works without a key' and 'needs your own key.' These contradictions actively undermine the agent's ability to trust the disclosed behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but not cleanly structured: 'VERIFIED' and 'has NOT been verified' appear in adjacent statements, and 'works without a key' directly contradicts 'needs your own key.' The 'Example: All areas' line adds little value. Redundant and contradictory content should have been reconciled before including it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter lookup tool, the description covers the essentials: what it is, the return shape, volume (272 areas), and the important caveat to inspect the actual payload. However, the contradictory verification and auth statements leave gaps in reliability, and there is no explicit pointer to the sibling competition tools that would consume these area IDs. It is adequate but not fully dependable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage (vacuously), the description carries no parameter burden. The baseline of 4 for zero-parameter tools applies, and the description appropriately adds no unsupported parameter claims. The 'Example: All areas' hint reinforces that the tool returns the full set of areas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as countries/regions for filtering competitions, which adds meaning beyond the bare tool name. It includes a returns shape and example, reinforcing that this is a lookup tool. However, it lacks an explicit verb like 'List' or 'Get' and doesn't directly contrast with sibling tools such as footballdataorg_competitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'used to filter competitions' provides clear contextual usage for when this lookup should be invoked. However, there are no explicit exclusions, alternative tool recommendations, or a described workflow (e.g., 'use returned area IDs with footballdataorg_competitions'). The contradictory auth statements ('works without a key' vs 'needs your own key in FOOTBALL_DATA_ORG_KEY') further muddy the practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_competitionARead-onlyIdempotent
One competition with its current season and available seasons. NEEDS A KEY (403 without).
Returns: {id, name, code, type, emblem, area, currentSeason:{id, startDate, endDate, currentMatchday, winner}, seasons:[…]} — SHAPE FROM VENDOR DOCS, not probed.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Premier League {"competition": "PL"}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| competition | Yes | Competition code (PL, CL, BL1, SA, PD, FL1, DED, PPL, BSA) or numeric id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, and open-world. The description adds that an API key is required (403 without it) and candidly notes that the return shape is from vendor docs and unverified, which is a valuable caveat for the agent. No contradiction with annotations; it supplements them with auth and data reliability context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized with clear sections: summary, return shape, caveat, example, and auth. Each part adds value, though the note about vendor docs could be considered slightly verbose. Overall it is well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the expected JSON shape and highlights that it is unverified, which is important context. It covers auth, an example, and the purpose. Given the tool's simplicity and strong annotations, the description is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter with valid competition codes and a note about URL path integration (100% coverage). The description adds a concrete example (`PL` for Premier League) but no additional semantic meaning beyond the schema. The example helps with format but does not elevate semantics significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One competition with its current season and available seasons,' identifying the resource and scope. The singular form distinguishes it from the sibling `footballdataorg_competitions`. The return shape and example reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for fetching a single competition, but it does not explicitly state when to use this versus the plural `footballdataorg_competitions` or other competition-specific tools. The example shows a typical invocation and the auth note provides a prerequisite, but no explicit when-not guidance is given. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_competition_matchesARead-onlyIdempotent
All matches in one competition. NEEDS A KEY (403 without).
Returns: {filters, resultSet, competition, matches:[{id, utcDate, status, matchday, homeTeam, awayTeam, score:{winner, fullTime:{home, away}, halfTime}}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A Premier League matchday {"competition": "PL", "matchday": 1}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | YYYY-MM-DD. | |
| season | No | Season starting year. | |
| status | No | Match state. One of: SCHEDULED, LIVE, IN_PLAY, PAUSED, FINISHED, POSTPONED, SUSPENDED, CANCELLED. | |
| dateFrom | No | YYYY-MM-DD. | |
| matchday | No | Restrict to one matchday. | |
| competition | Yes | Competition code or id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds significant behavioral context: the requirement of an API key (403 without), the unverified nature of the returned shape (from vendor docs, not tested live), and the instruction to inspect the actual payload. These go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and includes essential details: auth requirement, return shape, a caveat about unverified data, and an example. It is somewhat redundant with the auth notice appearing twice ('NEEDS A KEY (403 without)' and 'Auth: needs your own key...'), which prevents a perfect score, but overall it is well-organized and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description compensates by providing a detailed return shape (filters, resultSet, competition, matches with nested fields), a concrete example, auth requirements, and a warning about unverified field names. It also covers the key filters (matchday, season, date range, status). This is comprehensive for a read-only, idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 6 parameters, so the schema already documents each parameter's meaning. The description adds no new parameter-level semantics beyond an illustrative example (competition=PL, matchday=1). With full schema coverage, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'All matches in one competition,' which clearly states the tool's purpose: retrieving matches scoped to a single competition. This distinguishes it from sibling tools like footballdataorg_matches (all matches) and footballdataorg_competition (competition details). The example reinforces the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when you need matches for a specific competition, with optional filters like matchday, season, date range, or status. It provides a concrete example. However, it does not explicitly mention alternative tools or exclusions (e.g., 'for all matches across competitions, use footballdataorg_matches').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_competitionsARead-onlyIdempotent
Every competition the API covers, with its code and current season. VERIFIED live — works without a key.
Returns: {count, filters, competitions:[{id, name, code:'PL', type:'LEAGUE'|'CUP', emblem, plan:'TIER_ONE'…, area:{id, name, code, flag}, currentSeason:{id, startDate, endDate, currentMatchday}, numberOfAvailableSeasons, lastUpdated}]} — VERIFIED (189 competitions). plan tells you which tier a competition needs; the free key covers TIER_ONE only.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All competitions
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| areas | No | Filter to area ids (from footballdataorg_areas). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides a detailed return shape, notes the verification status, and explains the 'plan' field, going beyond annotations. However, it directly contradicts itself by stating 'works without a key' in the first line but later saying 'Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.' This self-contradiction reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description contains a lot of valuable detail, but it is somewhat disorganized with a redundant 'VERIFIED live' claim paired with a later note that the shape is unverified. The 'Example: All competitions' line is vague and adds little value. The contradictory auth statements also hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description covers the return shape, plan semantics, verification caveat, and auth expectations. It is reasonably complete, though the auth contradiction leaves some ambiguity about whether a key is truly required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'areas' is fully described in the schema with a clear reference to footballdataorg_areas. The description adds no additional meaning about this parameter, so the baseline of 3 applies given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every competition in the API along with its code and current season, with a concrete return shape. It distinguishes itself from the singular sibling footballdataorg_competition by explicitly using 'Every competition' and from other providers like pl_competitions by naming the API.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about the free tier (TIER_ONE only) and that the tool works without a key, but it does not explicitly state when to use this tool instead of alternatives like footballdataorg_competition. I'm implied by 'Every competition' but no direct comparison or exclusion is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_matchARead-onlyIdempotent
One match with lineups, goals, bookings and head-to-head. NEEDS A KEY (403 without).
Returns: {id, utcDate, status, competition, homeTeam:{id, name, lineup:[…], bench:[…]}, awayTeam:{…}, score, goals:[{minute, scorer, assist}], bookings:[…], substitutions:[…], referees:[…], head2head:{…}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One match {"matchId": 419516}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explicitly stating the need for a key (403 without), providing a detailed return shape, and warning that the shape is from vendor docs and unverified. This gives the agent critical caveats about data reliability. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and key requirement, then uses labeled sections for return shape, example, and auth. The detailed return shape is justified given there is no output schema, so the length is warranted. It is well-structured and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description provides all necessary context: purpose, parameter, example, auth, return shape, and a caveat about verification. This fully equips an agent to invoke the tool and handle the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already provides 100% coverage with a description of matchId as required and part of the URL path. The description adds an example usage but no additional semantic meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'One match with lineups, goals, bookings and head-to-head' which clearly identifies the resource (a single match) and the data returned. This distinguishes it from sibling tools like footballdataorg_matches which return multiple matches. It uses a specific resource and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for a single match via 'One match' and provides an example with matchId. It also notes the auth requirement. However, it does not explicitly state when to prefer this tool over sibling tools such as footballdataorg_matches or footballdataorg_competition_matches, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_matchesARead-onlyIdempotent
Matches across every competition your key can see, for a date range. VERIFIED live — the envelope works without a key (though a keyless call sees no competitions).
Returns: {filters, resultSet:{count, first, last, played}, matches:[{id, utcDate, status, matchday, stage, competition:{id, name, code}, homeTeam:{id, name, shortName, tla, crest}, awayTeam:{…}, score:{winner, duration, fullTime:{home, away}, halfTime:{…}}}]} — envelope VERIFIED; the match object shape is from the vendor's docs. Note the score lives in score.fullTime, not on the match.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Matches in a date window {"dateFrom": "", "dateTo": "<today+2>"}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | YYYY-MM-DD (max 10 days from dateFrom on the free tier). | |
| status | No | Match state filter. One of: SCHEDULED, LIVE, IN_PLAY, PAUSED, FINISHED, POSTPONED, SUSPENDED, CANCELLED. | |
| dateFrom | No | YYYY-MM-DD. | |
| competitions | No | Competition ids to include. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the envelope is verified live and works without a key (though keyless calls see no competitions), and explicitly warns that the match object shape is unverified and approximate. It also flags the score location in score.fullTime. These enrich the readOnly/openWorld/idempotent annotations with genuine behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but earns its length: a purpose sentence, detailed return shape, an unverified-shape caveat, an example, and auth instructions. It is front-loaded with the core purpose and organized with clear sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies a full return envelope and match object shape, plus a caveat about reliability. It covers auth, keyless behavior, and date constraints, making it sufficient to invoke correctly for a read-only list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all four parameters (dateFrom, dateTo, status, competitions), but the description's opening sentence clarifies that omitting competitions returns matches across every visible competition – a default behavior not in the schema. The example illustrates a minimal date-range call, adding practical usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Matches across every competition your key can see, for a date range' – a specific resource (matches) with clear scope (all visible competitions, date range). It distinguishes from siblings like footballdataorg_competition_matches (competition-specific) and footballdataorg_match (single match).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'every competition your key can see' indicates this is the cross-competition, date-range tool, contrasting with competition-specific endpoints. No explicit alternative is named, but the scope is clear. The example and auth note provide context for when a key is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_scorersARead-onlyIdempotent
Top scorers in a competition. NEEDS A KEY (403 without).
Returns: {count, filters, competition, season, scorers:[{player:{id, name, nationality, position}, team:{id, name}, goals, assists, penalties, playedMatches}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Premier League top scorers {"competition": "PL", "limit": 10}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many scorers. | |
| season | No | Season starting year. | |
| competition | Yes | Competition code or id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds a key requirement (403 without) and a caveat that the return shape is from vendor docs and unverified. This provides valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the core purpose first, followed by return shape, caveat, example, and auth. The auth requirement is mentioned twice, which is slightly redundant, but the overall organization is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers purpose, auth, return shape, and an example. It lacks explicit alternative guidance but is otherwise complete enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description's example ('competition: PL', 'limit: 10') is illustrative but does not add new semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Top scorers in a competition', specifying the resource and scope. It distinguishes from sibling tools like standings or matches. The example reinforces the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use when needing top scorers for a competition. It also notes the auth prerequisite. However, it does not explicitly mention when not to use or name alternatives like footballdataorg_standings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_standingsARead-onlyIdempotent
League table for a competition. NEEDS A KEY (403 without).
Returns: {filters, competition, season, standings:[{stage, type:'TOTAL'|'HOME'|'AWAY', group, table:[{position, team:{id, name, crest}, playedGames, won, draw, lost, points, goalsFor, goalsAgainst, goalDifference, form}]}]} — SHAPE FROM VENDOR DOCS. Note standings is a LIST of tables (TOTAL/HOME/AWAY); pick type == 'TOTAL' for the normal ladder.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Premier League table {"competition": "PL"}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season starting year, e.g. 2024. | |
| matchday | No | Table as at this matchday. | |
| competition | Yes | Competition code or id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description discloses critical behavior: 'NEEDS A KEY (403 without)' and 'Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.' It also warns that the return shape is from vendor docs and unverified, and explains how to interpret the standings list (pick type == 'TOTAL'). This adds significant context for safe and correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by return shape, notes, example, and auth. However, the key requirement is stated twice ('NEEDS A KEY' and 'Auth: needs your own key'), which is mildly redundant. Overall, it is concise and every other piece of information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description compensates with a detailed return shape, a caveat about unverified shape, an example, and authentication instructions. It fully covers the needs for an agent to select and invoke the tool correctly, including how to handle the standings list structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for all three parameters (competition, season, matchday). The description adds only an example (competition: 'PL') and does not introduce new meaning beyond the schema. Per the baseline for high schema coverage, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'League table for a competition,' which clearly identifies the resource and its purpose. It is further clarified by an example ('Premier League table') and the detailed return shape showing standings. This distinguishes it from other footballdataorg tools and general standings tools by explicitly naming the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through an example ({"competition": "PL"}) and notes the auth requirement, but it does not explicitly state when to use this tool versus alternatives like pl_standings or other provider standings. There is no exclusion guidance or mention of specific scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_teamARead-onlyIdempotent
One club with its squad and running competitions. NEEDS A KEY (403 without).
Returns: {id, name, shortName, tla, crest, address, website, founded, clubColors, venue, runningCompetitions:[…], coach:{id, name, nationality, contract}, squad:[{id, name, position, dateOfBirth, nationality}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One club {"teamId": 57}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team id (from footballdataorg_teams). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds value by disclosing the auth requirement (403 without key) and honestly noting that the return shape is unverified and approximate, advising the agent to inspect the live payload. This goes beyond the annotations and sets accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides necessary details in a structured way: auth, return shape, caveat, example, and auth again. Each line earns its place, though the return shape block is lengthy and the auth note appears twice, making it slightly less concise than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple team lookup with no output schema, the description compensates by listing the exact return fields, providing an example, and flagging the unverified shape. The auth requirement is also critical for successful invocation. It is largely complete, though it could mention that the teamId should come from the teams list (already in schema) and lacks any note about expected data freshness or pagination (unlikely needed here).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter teamId, already describing it as the team id from footballdataorg_teams and part of the URL path. The description adds a concrete example with teamId 57 but does not provide substantial extra semantic detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns one club with its squad and running competitions. The phrase 'One club' distinguishes it from the plural 'footballdataorg_teams' sibling, and the example with teamId reinforces the singular fetch. This is a specific verb+resource with clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides important usage context: it requires a key (403 without), and the example shows how to call it. It implies when to use it (getting a single team) versus listing teams, though it does not explicitly name an alternative tool. The auth requirement is a clear prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdataorg_teamsARead-onlyIdempotent
The clubs in a competition. NEEDS A KEY (403 without).
Returns: {count, filters, competition, season, teams:[{id, name, shortName, tla, crest, address, website, founded, clubColors, venue, coach, squad:[…]}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Premier League clubs {"competition": "PL"}
Auth: needs your own key in FOOTBALL_DATA_ORG_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season starting year. | |
| competition | Yes | Competition code or id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the authentication requirement (403 without key) and explicitly warns that the return shape is from vendor docs and unverified, which adds valuable context beyond the annotations. Annotations already declare readOnly, openWorld, and idempotent hints, and the description does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear sections (purpose, return shape, note, example, auth) and front-loads the purpose. The return shape block is lengthy but necessary given the absence of an output schema; overall it avoids unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key invocation details: required competition, optional season, authentication, and a caveat about response shape. It lacks alternative tool guidance but is otherwise sufficient for a read-only listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds an example value ('PL') and mentions the competition is part of the URL path, reinforcing the schema but not significantly extending it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'The clubs in a competition' and includes a return shape, making it clear this tool lists teams for a specified competition. It is distinguishable from sibling tools like footballdataorg_team (single team) and footballdataorg_competition (competition details), though it lacks an explicit action verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by providing an example with 'competition': 'PL' and emphasizes the need for an API key, but it does not state when to prefer this over alternatives such as footballdataorg_standings or pl_teams. There are no explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
footballdatauk_seasonARead-onlyIdempotent
One league season: every match with full/half-time score, shots, cards, and CLOSING ODDS from ~10 bookmakers. The backtesting dataset.
Returns: [{Div, Date:'16/08/2024', Time, HomeTeam, AwayTeam, FTHG, FTAG, FTR:'H'|'D'|'A', HTHG, HTAG, HTR, Referee, HS, AS, HST, AST, HF, AF, HC, AC, HY, AY, HR, AR, B365H, B365D, B365A, PSH, PSD, PSA, WHH, WHD, WHA, MaxH, AvgH, B365CH…}] (one row per match; ~380 rows for a 20-team season). ALL VALUES ARE STRINGS — cast before arithmetic. Dates are DD/MM/YYYY. A C in an odds column means CLOSING (B365CH = Bet365 closing home).
Example: Premier League 2024/25 with closing odds {"season": "2425", "division": "E0"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Four digits, start+end year without century: '2425' = 2024/25, '1516' = 2015/16. Required — part of the URL path. | |
| division | No | Division code: E0 Premier League, E1 Championship, SC0 Scottish Prem, D1 Bundesliga, I1 Serie A, SP1 La Liga, F1 Ligue 1, N1 Eredivisie, P1 Portugal, T1 Turkey, G1 Greece, B1 Belgium. | E0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, openWorld, idempotent), the description discloses that ALL VALUES ARE STRINGS, dates are DD/MM/YYYY, and the C suffix in odds columns indicates closing odds. It also specifies auth is not needed and provides a sample output structure, which are valuable details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence summary, a sample return, explicit notes on types/date/odds, an example, and auth. Every sentence contributes practical information without padding, and the essential detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description enumerates most columns and explains the key formatting pitfalls (strings, date format, closing odds naming). The sample return with '…' suggests some columns are omitted, but the core data shape is clear. Auth and example are included, making it quite complete for a simple season-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% parameter descriptions, including season format and division codes. The description adds a concrete example with 'season': '2425' and 'division': 'E0', and references the division list in the schema. This slightly augments the schema, so a strong baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one league season with every match, scores, shots, cards, and closing odds from ~10 bookmakers. It explicitly calls it 'The backtesting dataset', distinguishing it from other football data tools like footballdataorg_* or pl_*. The included example and field list reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong context by labeling this as 'The backtesting dataset' and emphasizing closing odds, implying it is for backtesting scenarios. It gives an example invocation, but does not explicitly name alternative tools or state when not to use it. Schema documents division codes, so context is clear but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formulae_championshipsARead-onlyIdempotent
Every Formula E season ('championship') with its uuid — call this first, everything else needs the id.
Returns: {championships:[{id (uuid), name:'SEASON 2024-2025', status:'Past'|'Live'|'Future', lastFinishedRound, series:{id, name}}]}
Example: All seasons
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds meaningful context beyond annotations: the exact return shape, status enum values, the 'lastFinishedRound' field, the nested series object, and an explicit auth requirement. This enriches what the agent can expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: first the core purpose and sequencing, then the return format, a brief example, and auth status. Every sentence serves a purpose with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing endpoint with rich annotations, the description is complete. It includes the return structure, status enum, example, auth note, and the crucial 'call this first' guidance. No output schema exists, so the description appropriately carries the return-format responsibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline of 4 applies. The description does not need to add parameter details, and it does not introduce any confusion about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every Formula E season with its UUID, establishing a specific purpose and resource. The phrase 'call this first, everything else needs the id' distinguishes it from sibling Formula E tools like formulae_races and formulae_race.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit sequencing guidance: 'call this first, everything else needs the id.' It also confirms no auth is needed, which helps the agent decide when to call it. It does not name specific alternative tools or exclusions, but for a zero-parameter root endpoint this is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formulae_driver_standingsARead-onlyIdempotent
Drivers' championship standings for one season.
Returns: [{driverPosition, driverFirstName, driverLastName, driverTLA:'ROW', driverPoints, driverTeamName, driverTeamId, driverId, driverCountry}] — a TOP-LEVEL ARRAY, not wrapped
Example: Drivers' championship {"championshipId": "4e287a6d-e2da-471a-9c8a-01141d6a1819"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| championshipId | Yes | Championship uuid from formulae_championships. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description adds behavioral details about the response format—a top-level array with specific fields—and notes no authentication is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but informative, covering purpose, return format, example, and auth. The inclusion of the full return field list is somewhat lengthy but provides necessary detail without an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, one-parameter read-only tool, the description sufficiently covers usage and output shape. Lacks any mention of ordering or filtering, but the schema and annotations provide a clear picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter championshipId is fully described in the schema as a championship UUID. The description supplements this with a concrete example value and clarifies that the standings are for that season.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns drivers' championship standings for one season. The name and description together distinguish it from team standings and other motorsport standings tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use (for driver standings per season) and includes an example of the required championshipId. Does not explicitly mention alternatives, but the description is clear enough that sibling tools like formulae_team_standings would be chosen for team standings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formulae_raceARead-onlyIdempotent
One race's detail: circuit, city, date and whether results exist.
Returns: {id, name, sequence, date, city, country, circuit, championship, hasRaceResults, hasSessionResults, metadata} — a single object; there is no results payload on this host (see the docs)
Example: One E-Prix {"raceId": "c1dd1f8a-5112-4864-8d2d-cfcc8951d197"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceId | Yes | Race uuid from formulae_races. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds valuable behavioral context: 'Auth: none needed' and the limitation 'there is no results payload on this host,' plus the presence of hasRaceResults/hasSessionResults flags. This goes beyond what annotations provide, though it could be more explicit about error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and covers purpose, return fields, an example, and auth in four short sections. The example formatting is a bit ambiguous (it looks like an input payload but is presented as an example), and the 'see the docs' reference is vague, but there is no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with good annotations, this description is fairly complete: it explains the return shape, the absence of results payload, and authentication. It could mention how to obtain the raceId (though the schema implies it comes from formulae_races), but overall it provides enough context for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter raceId, including the description 'Race uuid from formulae_races. Required — part of the URL path.' The description adds an example but no additional semantic meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One race's detail: circuit, city, date and whether results exist,' which clearly identifies the tool as a detail/retrieval endpoint for a single race. It lists the specific resource (race) and differentiates from the plural sibling formulae_races by emphasizing 'One race's detail.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to get race metadata and existence flags. It explicitly notes 'there is no results payload on this host,' implicitly telling the agent not to use this tool for race results. However, it does not name specific alternative tools for results or for listing races, relying on the schema reference to formulae_races.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formulae_racesARead-onlyIdempotent
The race calendar — all seasons, or one championship's rounds.
Returns: {pageInfo:{…}, races:[{id (uuid), name:'Beijing E-Prix', sequence, date, city, country, circuit, championship, hasRaceResults, hasSessionResults}]} — WRAPPED, unlike standings
Example: One season's calendar {"championshipId": "4e287a6d-e2da-471a-9c8a-01141d6a1819"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| championshipId | No | Championship uuid. Omit for every race across all seasons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds value by disclosing the exact return shape (pageInfo and races array with fields), the fact that it is wrapped, an example request, and auth requirements. This goes beyond the structured safety hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into a short title line, a returns block, an example, and an auth note. Every section is purposeful and no word is wasted. It is slightly longer than the two-sentence ideal but remains scannable and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool, the description is quite complete: it covers scope, return fields, an example, and auth. The pageInfo field hints at pagination but omits how to fetch additional pages; however, the schema and annotations are rich enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with 'Championship uuid. Omit for every race across all seasons.' The description restates this concept and adds a concrete UUID example, but it does not add significant new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific resource: 'The race calendar — all seasons, or one championship's rounds.' It clearly states the tool returns races and distinguishes it from sibling tools like formulae_standings by noting the response is 'WRAPPED, unlike standings.' The scope (all seasons vs. one championship) is explicit, making it easy to select over a single-race tool like formulae_race.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is conveyed through the optional championshipId parameter: 'Omit for every race across all seasons' and an example of filtering to one season. It also states 'Auth: none needed.' However, there is no explicit mention of when to prefer this over a sibling like formulae_race, so it slightly misses the 'alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formulae_team_standingsARead-onlyIdempotent
Teams' championship standings, including each team's points race by race.
Returns: [{teamPosition, teamName, teamId, teamPoints, teamRaceStandings:[{raceSequence, raceCountry, racePoints}]}] — top-level array. teamRaceStandings is the per-race points breakdown, and the closest thing to race results this host exposes.
Example: Teams' championship {"championshipId": "4e287a6d-e2da-471a-9c8a-01141d6a1819"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| championshipId | Yes | Championship uuid. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the description is not required to repeat that. It adds value by disclosing the return format, explicitly stating 'Auth: none needed,' and providing a concrete example, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, front-loading the purpose in the first sentence, followed by return format, an example, and auth requirement. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with a single parameter, the description is quite complete: it explains the return shape, provides an example, and notes the auth requirement. The only minor gap is not explicitly pointing to formulae_championships for obtaining the championshipId, but the tool name and sibling context make this inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents championshipId as a required string uuid with 100% coverage, so the baseline is 3. The description provides an example value but adds little additional semantic meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states this returns teams' championship standings with per-race points breakdown. The verb 'standings' and resource 'teams' are specific, and it explicitly distinguishes from driver standings by naming 'teams' and providing the return structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is for team standings and notes it's the closest thing to race results, which guides selection when race-level data is needed. However, it doesn't explicitly name alternative tools like formulae_driver_standings or state when not to use this, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_classic_leagueARead-onlyIdempotent
Classic (total-points) league standings, paginated.
Returns: {league:{id, name, created, closed, admin_entry, start_event, league_type, scoring}, new_entries:{has_next, page, results}, standings:{has_next, page, results:[{id, entry, entry_name, player_name, rank, last_rank, rank_sort, total, event_total}]}} — entry is the manager id for fpl_manager; rank vs last_rank gives movement. Big leagues page at 50.
Example: A league table {"leagueId": 314}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueId | Yes | League id. 314 is the global 'Overall' league; your own mini-league id is in its URL. Required — part of the URL path. | |
| page_standings | No | Standings page (50 per page). | |
| page_new_entries | No | Page of managers who joined recently. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, so the description builds on this by disclosing pagination behavior (50 per page), the meaning of 'entry' vs manager id, rank movement semantics, and auth requirements. These are valuable behavioral details beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose, followed by a compact return shape, field clarifications, a concise example, and an auth note. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex paginated list with no output schema, the description fully specifies the return object, field semantics, pagination, example, and authentication. This is sufficient for an agent to select and invoke the tool correctly, especially given the sibling tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions, and the description adds semantic value by explaining leagueId 314 as the global league, how to find mini-league ids, and clarifying page size. This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Classic (total-points) league standings, paginated,' which precisely names the resource and distinguishes it from H2H leagues. The return structure and example further reinforce the tool's specific function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Classic (total-points)' qualifier clearly indicates when to use this tool versus the H2H sibling, and the pagination note gives practical context. It does not explicitly name alternative tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_dream_teamARead-onlyIdempotent
The highest-scoring XI of a completed gameweek.
Returns: {top_player:{id, points}, team:[{element, position, points}]} — 404s until the gameweek is finished.
Example: A gameweek's best XI {"gameweek": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| gameweek | Yes | A COMPLETED gameweek. An unplayed one 404s — that is seasonal, not drift. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds valuable behavioral context: return payload structure, 404 error semantics until gameweek finishes, and authentication behavior (works without key, FPL_SESSION_COOKIE unlocks more). This exceeds what structured data provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and well-structured: one-sentence purpose, Returns block, Example, Auth. Every line adds unique information with no fluff. Front-loaded with the key concept before details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description provides everything needed: purpose, exact return format, error condition, example, and auth. It fully compensates for missing output schema by listing fields. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'gameweek' is fully documented in the schema (100% coverage) including type, requirement, and error behavior. The description only adds a usage example, which is helpful but not essential; baseline of 3 applies when schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states resource ('highest-scoring XI of a completed gameweek') with specific detail. Distinguishes from siblings like fpl_live_gameweek and fpl_gameweeks by focusing on the final dream team XI per gameweek. Includes return shape, reinforcing purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit context that the tool requires a COMPLETED gameweek and 404s on unfinished ones, establishing a clear when-not-to-use. Doesn't name alternative tools (e.g., fpl_live_gameweek for live scoring), but the exclusionary timing guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_event_statusARead-onlyIdempotent
Whether bonus points and league tables have been finalised for the current gameweek.
Returns: {status:[{bonus_added, date, event, points:'r'|'p'|'l'}], leagues:'Updated'|''} — this is how you know scores are FINAL. bonus_added: false means bonus points are still provisional, so a score read now may change.
Example: Is this gameweek settled?
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context beyond annotations by explaining the return structure and the critical meaning of 'bonus_added: false' (scores are provisional and may change). This is genuinely useful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably compact and well-structured: purpose, return format, key semantic flag, example, and auth. Each sentence contributes value, though the example 'Is this gameweek settled?' is slightly redundant with the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool without an output schema, the description covers the return shape and the meaning of the key field (bonus_added). However, the possible values for 'points' ('r'|'p'|'l') are not explained, leaving a minor gap in interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline per rubric is 4. The description adds no parameter semantics because none exist, but it does mention auth (works without key), which is relevant context for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to check whether bonus points and league tables have been finalised for the current gameweek. It distinguishes from FPL sibling tools by focusing on finalisation status, though it uses a noun phrase rather than an explicit 'get' or 'check' verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need to know if scores are FINAL, illustrated by the example 'Is this gameweek settled?'. It also implies when scores might change (bonus_added: false) but does not explicitly exclude alternatives or list 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.
fpl_fixturesARead-onlyIdempotent
Fixtures with FPL difficulty ratings, and goal/assist/bonus breakdowns once played.
Returns: [{id, code, event, team_h, team_a, team_h_score, team_a_score, kickoff_time, started, finished, finished_provisional, minutes, team_h_difficulty:1-5, team_a_difficulty:1-5, stats:[{identifier:'goals_scored'|'assists'|'bonus'|'bps'|'saves'|…, h:[{element, value}], a:[{element, value}]}]}] — stats is EMPTY until the match is played, then carries per-player contributions keyed by player id. The two difficulty ratings are from each side's perspective. finished_provisional goes true before finished: bonus points are not final until finished.
Example: One gameweek's fixtures {"event": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Restrict to one gameweek (1-38). Omit for the whole season. | |
| future | No | true returns only fixtures not yet played. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description explains key behavioral nuances: stats are empty until the match is played, difficulty ratings are per side, finished_provisional precedes finished with non-final bonus points, and auth behavior is disclosed. This is rich, non-redundant context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then provides a structured return shape, a concrete example, and auth note. Every sentence earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the full burden of explaining the return value, lifecycle states, and auth. It does so completely enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with 100% description coverage. The description's example reinforces event filtering but does not add material semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence precisely identifies the resource: 'Fixtures with FPL difficulty ratings, and goal/assist/bonus breakdowns once played.' The example and return-shape detail make it unambiguous that this is the FPL fixture tool, distinguishing it from siblings like fpl_gameweeks and fpl_player_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear via the resource, the 'Example: One gameweek's fixtures {"event":1}' snippet, and schema hints for filtering. It does not explicitly name alternatives or say when not to use it, so it falls short of a 5, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_game_rulesARead-onlyIdempotent
Positions, chips, phases and scoring settings — the lookup tables the other tools' ids refer to.
Returns: {element_types:[{id:1-4, singular_name:'Goalkeeper', plural_name, squad_select, squad_min_play, squad_max_play, element_count}], chips:[{id, name:'wildcard'|'freehit'|'bboost'|'3xc', number, start_event, stop_event}], phases:[{id, name:'Overall'|'August', start_event, stop_event}], game_settings:{squad_squadplay, squad_total_spend, transfers_cost, transfers_limit, …}, element_stats:[{label:'Goals scored', name:'goals_scored'}], total_players:4085510} — element_types resolves the element_type id on every player (1 GK, 2 DEF, 3 MID, 4 FWD). total_players is how many squads exist worldwide, which is what an overall rank is out of.
Example: The lookup tables
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds behavioral nuance: it works without a key, but FPL_SESSION_COOKIE unlocks more, and it details the return structure. This goes beyond what annotations provide, though less critical since annotations cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but compact, with a clear first sentence, a structured return format example, and a note on auth. Each part serves a purpose, though the return example is verbose – acceptable because it doubles as documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain the return values; it does so thoroughly, including a breakdown of element_types and total_players meaning. It also covers authentication. This is complete for a zero-param read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description no parameter semantics needed. It focuses on return content, which is appropriate and aligns with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns lookup tables for positions, chips, phases, and scoring settings. It explicitly distinguishes this tool as the reference for IDs used by other tools, which sets it apart from sibling tools that provide data itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this tool provides the lookup tables that other tools' ids refer to, and gives a concrete example (element_types resolves element_type id). This gives clear context for when to use it, but does not name specific alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_gameweeksARead-onlyIdempotent
All 38 gameweeks: deadlines, average scores, highest score, chip usage, and which one is current.
Returns: {events:[{id:1-38, name:'Gameweek 1', deadline_time:'2026-08-15T17:30:00Z', deadline_time_epoch, finished, data_checked, is_previous, is_current, is_next, average_entry_score, highest_score, highest_scoring_entry, most_selected, most_transferred_in, most_captained, most_vice_captained, top_element, transfers_made, chip_plays:[{chip_name, num_played}]}]} — deadline_time is THE thing an agent needs: transfers and lineup changes lock at it. is_current/is_next are how you find where the season is without doing date arithmetic.
Example: The full gameweek calendar
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description's addition of auth requirements ('works without a key; FPL_SESSION_COOKIE unlocks more if set') and the significance of key fields adds behavioral context beyond the structured data. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise summary, a comprehensive return schema, usage notes, and auth. It's front-loaded with key information. The field list is long but each element serves a purpose, so it's appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, this is exceptionally complete. It includes the return schema with field descriptions, clarifies critical fields (deadline_time, is_current/is_next), provides an example, and specifies auth behavior. The agent has everything needed to invoke and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description doesn't need to explain parameter semantics; it supplements with a detailed return structure and field explanations, which is appropriate for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns all 38 gameweeks with deadlines, average scores, highest score, chip usage, and current gameweek. The 'Returns:' block explicitly details the response structure, making the purpose unmistakable. It distinguishes from sibling tools like fpl_fixtures and fpl_live_gameweek by focusing on the gameweek calendar and summary data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable context: deadline_time is critical for knowing when transfers lock, and is_current/is_next help locate the season position without date arithmetic. This gives clear guidance on when to use the tool, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_h2h_leagueARead-onlyIdempotent
Head-to-head league standings with win/draw/loss records.
Returns: {league:{id, name, league_type, scoring:'h'}, standings:{has_next, page, results:[{id, entry, entry_name, player_name, rank, last_rank, total, matches_played, matches_won, matches_drawn, matches_lost, points_for}]}} — total is H2H league points (3 a win), points_for the FPL points scored. Ranking is on total, so a high scorer can sit mid-table.
Example: An H2H table {"leagueId": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueId | Yes | H2H league id (from fpl_manager's `leagues.h2h`). A classic-league id 404s here. Required — part of the URL path. | |
| page_standings | No | Standings page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses key behaviors: the return structure, the distinction between total (H2H points) and points_for (FPL points), the ranking on total, the auth behavior (works without key, FPL_SESSION_COOKIE unlocks more), and the 404 on classic-league ids in the schema. This is rich, useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded with the core purpose. It uses a code block for the return shape and a separate example and auth note. However, it is slightly lengthy and the example ('An H2H table' followed by an input object) is a bit confusing, so it loses a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return payload, field meanings, ranking logic, and auth prerequisites. It also covers edge cases (404 for classic ids) and provides an example. This is a complete and self-contained description for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage (100%) for both parameters, including that leagueId is an H2H league id from fpl_manager and that a classic-league id 404s. The description adds only a trivial example, so it does not meaningfully enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Head-to-head league standings with win/draw/loss records,' clearly identifying the tool's function and resource. It differentiates from siblings like fpl_classic_league by explicitly focusing on H2H scoring and even notes in the schema that a classic-league id 404s, reinforcing the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is for H2H league standings, and the schema adds that classic-league ids are invalid. However, it does not explicitly name alternatives like fpl_classic_league or state when to prefer one over the other, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_live_gameweekARead-onlyIdempotent
Live per-player scoring for a gameweek — points as they are being earned.
Returns: {elements:[{id, stats:{minutes, goals_scored, assists, clean_sheets, goals_conceded, saves, bonus, bps, total_points, expected_goals, …}, explain:[{fixture, stats:[{identifier, points, value}]}]}]} — explain breaks a player's points down by WHY they were awarded, which is the only way to reconcile a score. Returns {elements: []} for a gameweek that has not started — empty is normal pre-season, not a failure.
Example: Live scoring for a gameweek {"gameweek": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| gameweek | Yes | Gameweek number (1-38). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent; the description adds valuable behavior: the returned JSON structure, the meaning of `explain` for reconciling scores, and the empty-array pre-season edge case. It also clarifies authentication expectations (no key required, cookie unlocks more), which is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized in clear blocks (purpose, returns, example, auth) and every sentence adds information. The JSON snippet is long but serves to document the output, which is justified given no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the description covers the core output structure, explain semantics, edge case, and auth context. It lacks explicit sibling differentiation, but otherwise provides sufficient context for invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (gameweek: integer 1-38 required), so the schema carries the semantic weight. The description's example `{"gameweek": 1}` confirms usage but adds no extra parameter behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a clear verb+object: 'Live per-player scoring for a gameweek' with the key qualifier 'as they are being earned.' This distinguishes it from sibling FPL tools like fpl_gameweeks or fpl_player_detail, which focus on schedules or static player data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for live scoring, with an example call and a note that empty results pre-season are normal. It does not explicitly name alternatives or state when not to use it, but the 'live' framing and empty-result semantics give enough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_managerARead-onlyIdempotent
A manager's squad summary: overall rank, points, and every league they are in.
Returns: {id, name:'Squad Name', player_first_name, player_last_name, player_region_name, summary_overall_points, summary_overall_rank, summary_event_points, summary_event_rank, current_event, started_event, last_deadline_bank, last_deadline_value, last_deadline_total_transfers, leagues:{classic:[{id, name, entry_rank, entry_last_rank}], h2h:[…], cup:{…}}} — last_deadline_value and last_deadline_bank are in TENTHS of a million, like player prices.
Example: A manager's summary {"managerId": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| managerId | Yes | Manager (entry) id — the number in the URL when you view a squad on the FPL site. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, open-world operation. The description adds meaningful behavioral context beyond that: optional auth via FPL_SESSION_COOKIE, the detailed return structure, and the unit clarification for last_deadline_value/bank. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into distinct sections (summary, return shape, unit note, example, auth) and front-loads the primary purpose. The return structure is verbose but necessary since no output schema exists. No filler sentences are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description is thorough: it explains the full return object, units, auth behavior, and gives a concrete example. The only minor omission is the exact effect of the session cookie on the response, but this does not prevent correct invocation or interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for managerId is 100% and the schema already explains it thoroughly. The description's example merely restates the parameter and adds no new format or syntax information beyond the schema, so it does not elevate above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a manager's squad summary including overall rank, points, and leagues. It uses a specific resource ('manager's squad') and identifies the core outputs, though it does not explicitly contrast with sibling fpl tools like fpl_manager_history or fpl_manager_picks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied via the described purpose (use this to get a manager's squad summary), but there are no explicit when-to-use/when-not-to-use instructions or named alternatives. The auth note (works without a key; cookie unlocks more) is useful but not a substitute for selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_manager_historyARead-onlyIdempotent
A manager's gameweek-by-gameweek history, past seasons, and chips already used.
Returns: {current:[{event, points, total_points, rank, overall_rank, bank, value, event_transfers, event_transfers_cost, points_on_bench}], past:[{season_name:'2024/25', total_points, rank}], chips:[{name:'wildcard', time, event}]} — chips is what has ALREADY been played, which is how you know what is still available. current is empty before gameweek 1.
Example: A manager's season {"managerId": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| managerId | Yes | Manager (entry) id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only and idempotent; description adds auth behavior ('works without a key; FPL_SESSION_COOKIE unlocks more if set') and edge case (current empty before GW1). These go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with a summary line, return schema, notes, example, and auth. Dense but every line earns its place; no fluff. Slightly long but justified by lack of output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with no output schema, the description provides full return shape, interpretation of chips, and auth requirements. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers managerId 100% with description; the tool description repeats the required param in an example but doesn't add new semantic detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the resource: 'A manager's gameweek-by-gameweek history, past seasons, and chips already used.' It specifies the scope and distinguishes from sibling tools like fpl_manager_picks by focusing on history and chips, not current picks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: explains that chips shows what has already been played, which lets the user infer availability, and notes that current is empty before gameweek 1. However, it doesn't explicitly name alternative tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_manager_picksARead-onlyIdempotent
The exact XI, bench order, captain and chip a manager used in a gameweek.
Returns: {active_chip, automatic_subs:[{element_in, element_out}], entry_history:{event, points, total_points, rank, bank, value, event_transfers, event_transfers_cost, points_on_bench}, picks:[{element, position:1-15, multiplier:0|1|2|3, is_captain, is_vice_captain}]} — position 1-11 is the XI and 12-15 the bench IN ORDER. multiplier 2 is the captain, 3 a triple-captain chip, and 0 means they did not play (benched).
Example: A manager's gameweek team {"managerId": 1, "gameweek": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| gameweek | Yes | A gameweek that has STARTED — picks are hidden until the deadline passes, and an unplayed one 404s. Required — part of the URL path. | |
| managerId | Yes | Manager (entry) id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly, openWorld, and idempotent annotations, the description discloses critical behavioral details: the deadline dependency (hides picks before deadline), the 404 for unplayed gameweeks, the meaning of multiplier values (0=benched, 2=captain, 3=triple captain), and position semantics (1-11 XI, 12-15 bench). This significantly exceeds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. It includes a compact return-type summary with semantic explanations, followed by an example and auth note. While somewhat detailed, every section earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description fully explains the return payload, including nested structures and value meanings (positions, multipliers). It covers authentication requirements and a call example. Nothing essential for calling this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with descriptions, and the gameweek description includes the deadline/404 condition. The tool description does not add further meaning to the parameters themselves; it only provides an example call. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it retrieves the exact XI, bench order, captain, and chip used by a manager in a gameweek. This clearly distinguishes it from related FPL tools like fpl_manager or fpl_manager_history by focusing on the specific lineup and captaincy details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives important usage context: picks are hidden until the gameweek deadline passes, and an unplayed gameweek returns a 404. It also notes the authentication behavior (works without a key, FPL_SESSION_COOKIE unlocks more). However, it does not explicitly compare to sibling tools or state when NOT to use it, so it misses an explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_my_teamARead-onlyIdempotent
YOUR current squad including picks not yet visible to others, plus bank, free transfers and chip availability. Needs your FPL session cookie.
Returns: {picks:[{element, position:1-15, multiplier:0|1|2|3, is_captain, is_vice_captain, element_type:1-4, selling_price, purchase_price}], picks_last_updated, chips:[{id, status_for_entry:'available'|'played'|'unavailable', played_by_entry:[], name:'bboost'|'3xc'|'wildcard'|'freehit', number, start_event, stop_event, chip_type:'team'|'transfer', is_pending}], transfers:{cost, status:'unlimited'|'limited', limit, made, bank, value}} — VERIFIED against a live squad. The ONE place selling_price and purchase_price appear: FPL sells a risen player back at half the gain, so selling_price is often below now_cost and that difference decides whether a transfer is affordable.
TWO FIELDS THAT CHANGE THE ANSWER: transfers.status is 'unlimited' BEFORE the first deadline — unlimited free changes, so cost and limit do not apply and limit is null. And chips[].chip_type splits how a chip is played: 'team' chips (bboost, 3xc) ride POST /api/my-team/, 'transfer' chips (wildcard, freehit) ride POST /api/transfers/.
Returns 403 {'detail':'Authentication credentials were not provided.'} without FPL_SESSION_COOKIE.
Example: Your own squad {"managerId": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| managerId | Yes | Your own manager id — this endpoint only ever returns YOUR squad. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint, openWorldHint, and idempotentHint annotations. It explains the exact return structure, the meaning of selling_price vs purchase_price, edge cases like transfers.status 'unlimited' and chip_type routing, authentication failure (403), and verification against a live squad. This is rich behavioral disclosure that materially assists a correct call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose in the first sentence. Subsequent paragraphs provide necessary detailed return structures and edge cases. While verbose, every section is informative and not redundant. It is structured logically (purpose, return shape, edge cases, auth, example), though it could be trimmed slightly without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (one parameter but a rich nested response) and the absence of an output schema, the description fully compensates. It provides a complete inline return schema, explains critical fields, covers two conditional behaviors that affect results, and documents error handling and auth. An agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter managerId, including its meaning and URL placement. The description adds an example usage and reinforces that it only returns your squad, but this duplicates schema content. No additional semantic value beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns YOUR current squad including picks not yet visible, bank, free transfers, and chip availability. This is a specific verb+resource with clear scope. However, it does not explicitly differentiate it from sibling tools like fpl_manager_picks or fpl_manager, though the emphasis on 'YOUR' squad and 'picks not yet visible to others' implies a unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for your own squad only (repeatedly says YOUR) and requires an FPL session cookie. It provides context but no explicit comparisons to alternative tools or when-not-to-use. The auth requirement is clear, but there is no mention of cases where another tool would be more appropriate, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_player_detailARead-onlyIdempotent
One player in full: every gameweek this season, past seasons, and upcoming fixtures with difficulty.
Returns: {fixtures:[{id, event, team_h, team_a, is_home, difficulty:1-5, kickoff_time}], history:[{element, fixture, round, total_points, minutes, goals_scored, assists, clean_sheets, bonus, bps, expected_goals, value, transfers_balance, selected, was_home, opponent_team}], history_past:[{season_name:'2024/25', total_points, minutes, goals_scored, end_cost, start_cost}]} — difficulty is FPL's own 1 (easiest) to 5 (hardest) rating, and it drives most fixture-run analysis. value in history is the price AT THAT GAMEWEEK, so you can see price movement.
Example: One player's full record {"playerId": 1}
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Player id from fpl_players (`elements[].id`). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: auth requirements ('works without a key; FPL_SESSION_COOKIE unlocks more'), the meaning of difficulty, and that value represents gameweek-level price. It doesn't cover every edge case but does well given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides a compactly formatted return structure, field clarifications, an example, and auth note. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the three return sections and their key fields. It explains the difficulty scale and price semantics, making the tool usable for FPL analysis directly from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already explains playerId source and URL path. The description adds a concrete example (playerId: 1) and reinforces that it refers to a full player record. This exceeds the baseline for a high-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One player in full' and enumerates exactly what is returned: every gameweek this season, past seasons, and upcoming fixtures with difficulty. This clearly distinguishes it from list-level tools like fpl_players or simpler per-player tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when you need a comprehensive player record including fixtures and history. It does not explicitly name alternatives or exclusions, but the scoping language makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_playersARead-onlyIdempotent
Every FPL player with price, form, ownership, expected goals and availability. LARGE — ~65k tokens for all 581 players; use fpl_player_detail for one player's depth.
Returns: {elements:[{id, web_name:'Salah', team:11, element_type:3, now_cost:145, total_points, points_per_game:'6.2', form:'5.4', selected_by_percent:'42.1', status:'a'|'i'|'d'|'s'|'u', news:'Knock - 75% chance of playing', chance_of_playing_next_round, minutes, goals_scored, assists, clean_sheets, bonus, expected_goals:'0.54', expected_assists, defensive_contribution, ict_index, ep_next:'6.1'}]} — now_cost is TENTHS of a million (145 = £14.5m). status: a available, i injured, d doubtful, s suspended, u unavailable. Trimmed from 105 fields per player to 22; the upstream blob is ~362k tokens, which no context window holds.
Example: Every player, key fields
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, and the description adds substantial context beyond those: the large response size warning, the fact that the data is trimmed from 105 to 22 fields, the upstream blob size (362k tokens), the meaning of status codes, and the unit convention for now_cost. This gives the agent a clear behavioral model of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, with a clear statement of purpose, a prominent size warning, a detailed return shape, unit/status explanations, and an auth note. The 'Example: Every player, key fields' line is slightly redundant filler, but the rest of the content is information-dense and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of documenting return values. It does this thoroughly by listing all 22 fields, explaining the now_cost unit, defining status codes, and warning about the large token count. This is complete enough for a zero-parameter bulk read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and coverage is 100%. The description doesn't need to explain parameter meaning, and the baseline of 4 for zero-parameter tools applies. The description does not introduce any parameter-related ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Every FPL player with price, form, ownership, expected goals and availability,' using a specific verb ('Every FPL player' as the resource) and a precise field list. It also explicitly distinguishes itself from fpl_player_detail by directing users to that tool for one player's depth, which clearly separates its scope from a close sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (for all players with key fields) and when not to (for one player's depth, use fpl_player_detail). It also provides a practical usage guideline by warning about the large token size (~65k tokens) and mentions authentication prerequisites (works without key, cookie unlocks more).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_set_piece_notesARead-onlyIdempotent
Official set-piece taker notes per club — who takes penalties, corners and free kicks.
Returns: {last_updated, teams:[{id, notes:[{external_link, info_message:'Penalties: Haaland, then Alvarez', source_link}]}]} — genuinely useful for FPL and priced-market work alike: penalty duty is worth several points a season and moves with injuries.
Example: Who takes the penalties
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses the return structure, auth behavior (works without a key, FPL_SESSION_COOKIE unlocks more), and the nature of the data (official notes, subject to injuries). This adds substantial context not encoded in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, return format, use case, example, and auth info clearly delineated. It's slightly promotional in the 'genuinely useful' section and the 'Example' line is a bit informal, but overall each part adds value and it remains reasonably concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is remarkably complete. It covers what the tool does, the shape of the returned data, an example note, the auth requirement, and practical use cases, giving an agent all necessary information to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is complete and a baseline of 4 is appropriate. The description enriches the tool's semantics by showing an example of the data content (e.g., 'Penalties: Haaland, then Alvarez'), though it doesn't need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides official set-piece taker notes per club, specifying who takes penalties, corners, and free kicks. This is a specific, distinguishable purpose among the many FPL sibling tools, and the 'Example: Who takes the penalties' reinforces the use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes the tool is 'genuinely useful for FPL and priced-market work alike' and adds context about penalty duty being valuable and subject to injuries. However, it doesn't explicitly mention when to avoid it or name alternative tools, so it lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_teamsARead-onlyIdempotent
The 20 Premier League clubs with FPL's attack/defence strength ratings.
Returns: {teams:[{id:1-20, name:'Arsenal', short_name:'ARS', code, strength:1-5, strength_overall_home, strength_overall_away, strength_attack_home, strength_attack_away, strength_defence_home, strength_defence_away, played, win, draw, loss, points, position, form}]} — id is FPL's own alphabetical 1-20, NOT the Premier League's official team id; join to the premierleague provider by name. The strength_* numbers are FPL's internal ratings (~1000-1400) and are what fixture-difficulty is derived from.
Example: All 20 clubs
Auth: works without a key; FPL_SESSION_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent hints. The description adds valuable context: the id is FPL's own 1-20, strength ratings are internal (~1000-1400), and auth works without a key. It does not mention potential errors or staleness, but for a simple zero-param tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with main description, return schema, id/strength notes, example, and auth. It is a bit lengthy but every section provides essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a tool with no parameters and no output schema: it explains the return structure, the id mapping, the strength rating scale, and authentication. No important details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description need not explain input semantics. It provides an example and notes on authentication, which is helpful. Baseline for zero params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the 20 Premier League clubs with FPL's attack/defence strength ratings. It uses specific terms like 'FPL's attack/defence strength ratings' and explains the id is FPL's own 1-20, not the official PL id, which distinguishes it from sibling tools like pl_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: it provides FPL-specific club data and strength ratings, and suggests joining to the premierleague provider by name for integration. However, it does not explicitly state when to use this tool versus alternatives like fpl_fixtures or pl_teams, nor provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
golfcourseapi_courseARead-onlyIdempotent
One course in full: every tee box with per-hole par, yardage and stroke index.
Returns: {course:{id, club_name, course_name, location:{…}, tees:{male:[{tee_name, course_rating, slope_rating, par_total, total_yards, number_of_holes, holes:[{par, yardage, handicap}]}], female:[…]}}} — SHAPE FROM VENDOR DOCS. NOTE tees is split by MALE/FEMALE tee sets, each a LIST of tee boxes, each with its own 18-hole array — three levels before a hole. handicap here is the hole's stroke index (1 = hardest), not a player handicap.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One course in full {"id": 1}
Auth: needs your own key in GOLFCOURSE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Course id (from golfcourseapi_search). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, and idempotentHint, so the core safety profile is covered. The description adds substantial value by disclosing the unverified nature of the response shape, explaining the male/female tee split, and clarifying that 'handicap' means stroke index, not a player handicap. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured with a purpose statement, return shape, caveats, example, and auth note. Every part contributes meaningful information, though the 'Example: One course in full' section is slightly redundant and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed return shape including the nested structure and field meanings. It also includes a reliability caveat and auth requirement. The description is reasonably complete for a single-course detail endpoint, though location subfields are left as '…' and error behavior is not mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains that 'id' is required and comes from golfcourseapi_search. The description adds only a trivial example ({"id": 1}) without new semantic insight into the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a single course with full tee box details including per-hole par, yardage, and stroke index. The phrase 'One course in full' distinguishes it from the sibling golfcourseapi_search, though it lacks an explicit verb like 'Get' or 'Retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description indicates this returns full details for one course, so an agent can infer it should be used after obtaining a course ID (likely from golfcourseapi_search). However, no explicit guidance is given about when to prefer this tool over alternatives 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.
golfcourseapi_searchARead-onlyIdempotent
Search the course catalogue by name or club.
Returns: {courses:[{id, club_name, course_name, location:{address, city, state, country, latitude, longitude}}]} — SHAPE FROM VENDOR DOCS. Search returns the summary only; per-hole data needs golfcourseapi_course.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Find a course {"search_query": "Pebble Beach"}
Auth: needs your own key in GOLFCOURSE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| search_query | Yes | Course or club name, e.g. 'Pebble Beach'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, openWorldHint, and idempotentHint, which already signal safe read-only behavior. The description adds valuable context beyond annotations: it warns that the response shape is from vendor docs and unverified, advises inspecting the actual payload, and notes the auth key requirement—key behavioral caveats that an agent needs before relying on the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficiently organized: one-line purpose, return shape, caveat about unverified shape, example, and auth note. Every sentence earns its place and provides essential operational info without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single required param, simple search semantics), the description covers all key aspects: purpose, return shape, limitations, example, and auth. The explicit caveat about unverified vendor shape is crucial for a tool without a live key, and the pointer to golfcourseapi_course completes the necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (only one param, search_query, described as 'Course or club name'), so the schema already documents the parameter. The description adds a concrete example ('Pebble Beach') and further explains the parameter semantics ('name or club'), which supplements the schema without needing to restate everything. Baseline of 3 applies, but the example and the name/club clarification add modest value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Search the course catalogue') with clear scope (by name or club), and explicitly differentiates from sibling golfcourseapi_course by noting this returns summary only while per-hole data needs the sibling. The verb+resource+scope combination is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it (to search summary info) and when not to (per-hole data needs golfcourseapi_course), effectively naming the alternative tool. It also provides an example call and notes the auth requirement (GOLFCOURSE_API_KEY), giving clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_baseball_highlightsARead-onlyIdempotent
Baseball highlight clips.
Returns: {data:[{id, title, url, embedUrl, imgUrl, match:{…}}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's baseball highlights {"date": "2024-07-04"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size. | |
| matchId | No | One match. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, lowering the bar. The description adds substantial context: the return shape is from vendor docs and unverified (advising caution), and it discloses the auth requirement (HIGHLIGHTLY_API_KEY). This goes beyond annotations and helps the agent handle potential schema drift.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively brief and includes the return shape, a caveat, an example, and auth info. It is not highly structured (free-form text) but every sentence earns its place. Slightly disjointed, yet efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a return shape, pagination field, a concrete example, and auth note. It also compensates for uncertainty with the unverified shape warning. It doesn't explain the nested match object in detail, but the approximation warning mitigates that. Fairly complete for a simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with each parameter having a short description (date format, page size, filter by match/league). The description adds a usage example but no deeper parameter semantics, such as how multiple filters interact or default behavior. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Baseball highlight clips' and the return shape confirms a retrieval function. It distinguishes from sibling tools like soccer/basketball highlights by sport. However, it lacks an explicit action verb (e.g., 'Get', 'List'), instead using a noun phrase, and the intended operation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool name and the example showing a date-based query. There is no explicit guidance on when to choose this over other highlightly_* tools, though the sport-specific naming makes alternatives obvious. No exclusion or alternative tool is mentioned, so guidance is largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_basketball_highlightsARead-onlyIdempotent
Basketball highlight clips (NBA, EuroLeague and others).
Returns: {data:[{id, title, url, embedUrl, imgUrl, match:{…}}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's basketball highlights {"date": "2024-01-15"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size. | |
| matchId | No | One match. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable caveats beyond annotations: the return shape is 'from vendor docs' and unverified, advising to 'inspect the actual payload before relying on a field name'. It also discloses the auth requirement (HIGHLIGHTLY_API_KEY), which is not in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a one-sentence purpose, a return shape, a caveat about shape reliability, an example, and auth note. Each part earns its place, and the most critical information (purpose) is front-loaded. The caveat is slightly verbose but necessary for transparency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a return shape (even if marked approximate), an example call, and auth requirements. Given the tool's simplicity and the schema covering all parameters, this is reasonably complete. It could mention pagination behavior, but the return shape includes 'pagination', and the openWorldHint suggests the response may vary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters (date, limit, matchId, leagueId), giving 100% coverage. The description adds an example for 'date' but does not explain the semantics of limit, matchId, or leagueId beyond what the schema already states. This meets the baseline but doesn't exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Basketball highlight clips (NBA, EuroLeague and others)', specifying both the resource (highlight clips) and the domain (basketball). This distinguishes it from sibling tools for other sports like soccer, NFL, baseball, and hockey, which share the 'highlightly_' prefix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example using the 'date' parameter and notes the need for an API key, implying when the tool might be used. However, it doesn't explicitly state when to prefer this over sibling tools or how to choose between parameters like matchId versus leagueId. Usage context is implied but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_hockey_highlightsARead-onlyIdempotent
Ice-hockey highlight clips.
Returns: {data:[{id, title, url, embedUrl, imgUrl, match:{…}}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's hockey highlights {"date": "2024-01-15"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size. | |
| matchId | No | One match. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value beyond these by disclosing the unverified response shape and the need for a personal HIGHLIGHTLY_API_KEY. It also warns that the returned structure is approximate and should be inspected. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose statement, return shape, caveat, example, and auth note are each distinct and logically ordered. It is concise overall, though the vendor-docs caveat is a bit wordy. Every section earns its place, keeping it within a reasonable length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a return shape with key fields, a note about verification, an example call, and authentication requirements. It covers the essential information needed to select and invoke the tool, though it could briefly mention that it is hockey-specific or that pagination behavior is not detailed. Overall, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all four parameters with descriptions (e.g., date as YYYY-MM-DD, limit as 'Page size'), giving 100% coverage. The description adds a usage example for 'date' but does not enrich the meaning of matchId or leagueId beyond their schema descriptions. Baseline 3 is appropriate since schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Ice-hockey highlight clips,' which clearly identifies the tool's domain and resource. It distinguishes from sibling tools like highlightly_soccer_highlights and highlightly_basketball_highlights by specifying the sport. However, it lacks an explicit verb like 'retrieve' or 'list,' relying on the noun phrase to imply the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example ('A day's hockey highlights' with a date parameter) that implies typical usage, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. No mention of sibling highlightly tools or exclusion criteria, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_nfl_highlightsARead-onlyIdempotent
American-football highlight clips.
Returns: {data:[{id, title, url, embedUrl, imgUrl, match:{…}}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's NFL highlights {"date": "2024-01-15"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size. | |
| matchId | No | One match. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds valuable context beyond annotations by warning that the response shape is unverified from vendor docs and advising inspection of the actual payload. It also discloses the need for a personal API key, which is not in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by response shape, caveat, example, and auth. Each section serves a purpose. It is slightly longer than necessary but every sentence contributes useful information, especially the vendor-doc caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the lack of an output schema, the description provides an approximate return shape, pagination indicator, an example call, and auth requirements. The caveat about unverified shape is important for the agent to set expectations. It could improve by noting when no parameters are provided, but this is a reasonably complete description for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema carries the full weight of parameter semantics. The description adds only an example using 'date', without elaborating on limit, matchId, or leagueId behavior beyond their schema descriptions. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('American-football highlight clips') and indicates retrieval via 'Returns:'. It distinguishes the sport from sibling highlight tools like highlightly_soccer_highlights. However, it lacks an explicit verb like 'get' or 'list', making it slightly less direct than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example query and notes the auth requirement, but gives no explicit guidance on when to use this tool versus alternatives or any exclusions. It does not clarify whether certain parameters are preferred for common use cases (e.g., date vs matchId).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_soccer_highlightsARead-onlyIdempotent
Football highlight clips, by match, league or date. The main tool here.
Returns: {data:[{id, title, type, url, imgUrl, embedUrl, channel, source, match:{id, date, league, homeTeam, awayTeam}}], pagination:{totalCount, limit, offset}} — SHAPE FROM VENDOR DOCS. url is a page link and embedUrl an iframe source; they are not interchangeable.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's football highlights {"date": "2024-08-17"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size (max 40). | |
| offset | No | Page offset. | |
| matchId | No | One match. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints, lowering the bar for behavioral disclosure. The description goes far beyond by warning that `url` and `embedUrl` are not interchangeable, that the return shape is unverified vendor documentation and must be inspected, and that a personal API key is required—valuable context preventing misuse and unrealistic expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose, followed by a compact return-shape block, a critical URL distinction, a verification caveat, a concrete example, and auth requirements. Every sentence earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description provides the essential return shape, a concrete example, auth requirements, and a useful caveat that the shape is approximate. It does not specify default behavior when no filter is provided or how multiple filters interact, but the annotations and schema fill most critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes all five parameters with 100% coverage, so the description need not compensate. The date example illustrates a valid usage pattern but adds little semantic meaning beyond the schema; no extra detail is given for matchId or leagueId formats, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning football highlight clips filterable by match, league, or date, with the phrase 'The main tool here' establishing its primary role among highlightly siblings. The verb+resource+scope is specific and unambiguous, distinguishing it from the broader set of tool names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames the tool as the go-to for football highlights and provides a concrete date-based example, making when to use it clear. However, it does not explicitly name alternatives like highlightly_soccer_matches or highlightly_soccer_leagues or state when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_soccer_leaguesCRead-onlyIdempotent
Football competitions covered, with the leagueId filters.
Returns: {data:[{id, name, logo, country:{code, name, logo}, seasons:[…]}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Competitions covered
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| leagueName | No | Name search. | |
| countryCode | No | Two-letter country code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing the return shape, including a caveat that it is unverified from vendor docs, and the authentication requirement. This transparency is positive. However, it introduces a misleading reference to a leagueId filter and lacks details on pagination behavior or rate limits. With annotations already covering readOnlyHint, openWorldHint, and idempotentHint, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and includes essential notes about the return shape, verification caveat, and auth. However, the line 'Example: Competitions covered' is redundant and adds no information, and the phrasing 'Football competitions covered' as an opening is awkward. It is still reasonably structured and not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool, the description provides the return shape and auth, but the inaccurate leagueId mention and lack of clarity on pagination/filtering behavior leave gaps. The schema covers parameters, but the description could have resolved the leagueId discrepancy. Since there is no output schema, the return shape is helpful, though unverified. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all three parameters (limit, leagueName, countryCode) at 100%, so the description doesn't need to repeat them. It adds no meaningful parameter information and even mentions a non-existent leagueId parameter, which is a negative. The baseline of 3 holds because the description doesn't enhance schema semantics but also doesn't materially detract, aside from the misleading reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase lacking an explicit verb, making the operation unclear. 'Football competitions covered, with the leagueId filters' doesn't clearly state that this tool lists football leagues, and it references a 'leagueId' filter that does not exist in the input schema. It gives the domain (football) but fails to specify the action or distinguish it from sibling tools like highlightly_soccer_matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention use cases for competition data, nor does it offer exclusions. The phrase 'with the leagueId filters' implies a use case but is unsupported by the schema. No alternative tools or conditions are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
highlightly_soccer_matchesARead-onlyIdempotent
Football matches, to find the matchId a highlight lookup needs.
Returns: {data:[{id, date, country, league:{id, name, logo}, homeTeam:{id, name, logo}, awayTeam:{…}, state:{description, score:{current, penalties}}}], pagination} — SHAPE FROM VENDOR DOCS. The score is nested under state, not on the match.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's matches {"date": "2024-08-17"}
Auth: needs your own key in HIGHLIGHTLY_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| limit | No | Page size. | |
| season | No | Season year. | |
| leagueId | No | One competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable behavioral context: the return shape is unverified from vendor docs, the score is nested under state, auth via HIGHLIGHTLY_API_KEY is required, and the actual payload should be inspected. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but each section earns its place: purpose, return shape with caveat, example, and auth note. The structure is front-loaded with the core purpose and the caveat about unverified shape is important. It could be slightly tighter but is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description provides an approximate return shape, which is critical. It also includes auth requirements and an example. The mention that the shape is unverified and should be inspected is excellent for setting expectations. This is complete for a simple list-like tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to define parameters. It adds a brief example of using the date parameter, but does not provide additional semantics for limit, season, or leagueId. This is sufficient given the schema already documents all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (football matches) and the intended purpose (finding matchId for highlight lookup). It distinguishes itself from sibling tools like highlightly_soccer_highlights by stating the matchId need. However, it lacks an explicit verb like 'get' or 'list', making the action somewhat implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool to obtain a matchId before performing a highlight lookup. This distinguishes it from the highlighted sibling tool. It does not explicitly state when not to use or name alternative tools, but the context is clear for a straightforward match lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isportsapi_basketball_scheduleARead-onlyIdempotent
Basketball fixtures and results by date.
Returns: {code:0, data:[{matchId, leagueId, homeName, awayName, matchTime, status, homeScore, awayScore, quarterScores}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's games {"date": "2024-01-15"}
Auth: needs your own key in ISPORTS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| leagueId | No | Restrict to one competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds valuable transparency beyond annotations: it warns that the return shape is from vendor docs and unverified, and it explicitly mentions the required ISPORTS_API_KEY auth. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by return shape, unverified note, example, and auth. Each component earns its place, though it's slightly longer than necessary for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with no output schema, the description provides a return shape (with caveat), an example, and auth context. It doesn't explain behavior when both parameters are omitted, but the openWorldHint annotation partially covers that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with 100% coverage, so the description carries minimal burden. It adds an example date value ('2024-01-15') but no additional semantics beyond what the schema provides, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (basketball fixtures and results) and scope (by date), though it lacks an explicit verb like 'Get' or 'List.' It is unambiguous but does not explicitly distinguish this from sibling basketball schedule tools, so it doesn't earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by showing an example for a day's games and noting the optional leagueId restriction. However, it does not mention when to prefer this tool over alternatives or state exclusions, so it misses the explicit guidance required for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isportsapi_football_competitionsARead-onlyIdempotent
Football competitions with their ids.
Returns: {code:0, data:[{competitionId, name, shortName, logo, type, color}]} — SHAPE FROM VENDOR DOCS. code: 0 means success; anything else is an error delivered with HTTP 200.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every competition
Auth: needs your own key in ISPORTS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint/idempotentHint annotations by documenting the return shape, the meaning of code:0, the HTTP 200 error delivery, and the caveat that the shape is unverified. It also discloses the auth requirement (ISPORTS_API_KEY). This is useful behavioral context, though the unverified warning is more about data reliability than tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Returns, NOTE, Example, Auth) and no wasted words. It conveys the essential purpose, return shape, caveat, and auth in a compact form. Every sentence contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool, the description covers what is needed: the resource, the return format, error semantics, and the unverified nature of the data. The example clarifies the scope, and the auth note covers a critical prerequisite. No output schema exists, so the description appropriately takes on the role of documenting return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% (empty object), so the baseline is 4. The description adds no parameter details because none exist, which is acceptable. The return shape example partially compensates for the lack of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Football competitions with their ids', which is a specific resource and implies a list operation. The return shape with field names confirms this, but the description lacks a verb like 'list' or 'get' and does not differentiate this from other competition tools like pl_competitions or laliga_competitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus the many sibling competition tools. The example 'Every competition' implies it returns all competitions, but there is no discussion of intended use cases, prerequisites, or alternatives. For a simple list tool, this is a partial gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isportsapi_football_liveARead-onlyIdempotent
Football matches in play now.
Returns: {code:0, data:[{matchId, status, homeScore, awayScore, homeHalfScore, awayHalfScore, homeRed, awayRed, homeYellow, awayYellow, homeCorner, awayCorner, updateTime}]} — SHAPE FROM VENDOR DOCS. Corners and cards live here rather than in a separate statistics call.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: In play now
Auth: needs your own key in ISPORTS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent. The description adds valuable behavioral context: the return shape is from vendor docs and unverified, the actual payload should be inspected, and a personal API key is required. This reliability caveat and auth requirement go beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and economically written: purpose, return shape, caveat, example, and auth. Every sentence contributes information; there is no fluff. The front-loaded purpose sentence immediately answers 'what does this do?'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is thorough: it provides the return field names, distinguishes data placement, notes the unverified shape, includes an example, and gives auth information. It lacks explicit status vocabulary but is sufficient for an agent to select and invoke the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so the baseline is 4. The description correctly focuses on the return shape and data placement rather than parameters. It adds no parameter details because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and scope: 'Football matches in play now.' It distinguishes from siblings by noting that corners and cards 'live here rather than in a separate statistics call' and by the live vs. schedule/odds context of sibling tool names. Despite lacking an explicit verb, the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use it to get live in-play matches, and it explicitly indicates where to find corners/cards ('live here rather than in a separate statistics call'). It also states the auth prerequisite. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isportsapi_football_odds_asianARead-onlyIdempotent
Asian-handicap odds across companies — the reason to use this provider.
Returns: {code:0, data:{handicap:[[matchId, companyId, initialHandicap, initialHome, initialAway, liveHandicap, liveHome, liveAway, …]], europeOdds:[[…]], overUnder:[[…]]}} — SHAPE FROM VENDOR DOCS. NOTE the payload is ARRAYS OF POSITIONAL ARRAYS, not objects: fields are identified by INDEX. Read the vendor's column order before parsing, and do not assume it matches other providers here.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Asian handicap odds
Auth: needs your own key in ISPORTS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | No | One match. | |
| companyId | No | Odds company id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the bar is lower. The description adds critical context: the payload uses positional arrays, the shape is unverified and approximate, and authentication requires the ISPORTS_API_KEY. This exceeds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a lead sentence, a returns section, cautionary notes, and auth. Though a bit long, every sentence earns its place by adding essential warnings about the payload shape and verification status.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes responsibility for explaining the return format, including the positional array warning. It also covers authentication and the unverified nature of the vendor docs. Still, it lacks a concrete example of the positional arrays and doesn't elaborate on the meaning of each index.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with clear descriptions (matchId: 'One match', companyId: 'Odds company id'), so the schema does the heavy lifting. The description does not add parameter details beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides Asian-handicap odds across companies and explicitly positions it as the differentiator for this provider. This distinguishes it from sibling tools like isportsapi_football_schedule and apisports_football_odds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the reason to use this provider' strongly implies this is the default choice for Asian-handicap odds, but it does not explicitly state when to use it versus alternatives like apisports_football_odds. There is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isportsapi_football_scheduleARead-onlyIdempotent
Football fixtures and results by date.
Returns: {code:0, data:[{matchId, competitionId, homeId, homeName, awayId, awayName, matchTime, status, homeScore, awayScore, halfHomeScore, halfAwayScore}]} — SHAPE FROM VENDOR DOCS. matchTime is a UNIX TIMESTAMP, not an ISO string.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A day's fixtures {"date": "2024-08-17"}
Auth: needs your own key in ISPORTS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| leagueId | No | Restrict to one competition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent hints, lowering the transparency burden. The description adds valuable behavioral context: it explicitly warns the return shape is from vendor docs and unverified, clarifies matchTime is a UNIX timestamp, and notes that a provider API key is required. These details go beyond the annotations, though it doesn't discuss rate limits, pagination, or behavior when both params are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear summary, then includes structured sections for return shape, a caveat, an example, and auth. Each section earns its place: the caveat is important for trust, the example clarifies usage, and the auth note is essential. It's slightly verbose due to the cautionary note, but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by giving the full return shape and flagging it as unverified, which is crucial for an agent. It also provides an example and auth context. Missing details include the default behavior when no date is supplied, pagination, timezone handling, and sort order, but for a simple date-based list tool, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both date ('YYYY-MM-DD.') and leagueId ('Restrict to one competition.'). The description adds an example for date and implies usage, but it doesn't provide additional meaning for leagueId beyond the schema. Since the schema already carries the parameter semantics, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Football fixtures and results by date' which clearly identifies the verb (returns), resource (football fixtures/results), and scope (by date). This distinguishes it from siblings like isportsapi_football_live (live scores) and isportsapi_football_competitions (leagues), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example ({"date": "2024-08-17"}) and mentions an optional leagueId in the schema, implying usage for date-based fixture/result lookup. However, there is no explicit guidance on when to choose this over alternatives (e.g., live vs. scheduled results, or other providers), nor does it state exclusions or prerequisites (e.g., required date format is in schema, not fully elaborated).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_circuitsBRead-onlyIdempotent
Circuits, with location and coordinates.
Returns: {MRData:{CircuitTable:{Circuits:[{circuitId, circuitName, Location:{lat, long, locality, country}, url}]}}}
Example: 2024 circuits {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the exact JSON return shape and states no authentication is required, which is useful. However, it does not disclose pagination behavior, error handling, or rate limits, leaving some behavioral uncertainty 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—three short lines plus an example and an auth note. Every element contributes: the resource definition, return structure, a concrete example, and auth requirement. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent list endpoint with full schema coverage and an explicit return structure, the description is mostly sufficient. The main gap is the lack of usage context relative to sibling tools, but the example and output format provide adequate operational detail for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters (season, limit, format) with descriptions, defaults, and constraints, achieving 100% schema coverage. The description's example illustrates passing season and format but adds no semantic detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Circuits' and states it includes location and coordinates, plus a full return structure. The example with season 2024 demonstrates the intended use of retrieving circuits for a season. However, the opening is a noun phrase without an explicit verb like 'lists' or 'gets', so it is clear but not fully explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example call but no guidance on when to use this tool over sibling F1 tools (e.g., jolpicaf1_races, jolpicaf1_drivers). It does not mention any exclusions or alternatives, so an agent receives no decision-making information about when this tool is the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_constructorsBRead-onlyIdempotent
Constructors (teams) — all-time, or those entered in one season.
Returns: {MRData:{ConstructorTable:{season, Constructors:[{constructorId, name, nationality, url}]}}}
Example: 2024 constructors {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context about the return structure (MRData) and states that no auth is needed, but it does not explain pagination via limit or any quirks about the required season parameter. It adds some value but not a rich behavioral layer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line scoping statement, a return format block, an example, and an auth note. Every section earns its place, though the all-time/season ambiguity adds slight unnecessary confusion. It is efficiently formatted with clear line breaks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description's inclusion of the return shape is helpful. However, it lacks clarity on the all-time mode versus the required season parameter, and doesn't discuss the limit behavior or why openWorldHint might matter. For a simple list tool with strong annotations, it is adequate but leaves room for user confusion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description introduces ambiguity: it claims support for 'all-time' constructors while the schema marks 'season' as required, with no explanation of how to request all-time data. The example only shows a season-specific call, and the limit parameter's semantics are left entirely to the schema. This confuses rather than clarifies the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource (constructors/teams) and the scoping dimension (all-time vs. a single season), which distinguishes it from the sibling jolpicaf1_constructor_standings. The verb is implicit rather than explicit ('Constructors' as a noun), but the intended action of retrieving a list is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the two key use contexts (all-time or one season) and provides a concrete example with the season parameter. However, it does not explicitly state when to prefer this tool over siblings like jolpicaf1_races or jolpicaf1_constructor_standings, nor does it mention any exclusions or fallbacks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_constructor_standingsARead-onlyIdempotent
Constructors' championship standings.
Returns: {MRData:{StandingsTable:{StandingsLists:[{season, round, ConstructorStandings:[{position, points, wins, Constructor:{constructorId, name, nationality}}]}]}}}
Example: 2024 constructors' championship {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds value by disclosing the return JSON structure and explicitly stating 'Auth: none needed.' This is more than sufficient for a read-only tool with no destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It includes a useful example and an auth note, with no wasted words. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description compensates for the lack of an output schema by providing a detailed return structure. It also includes an example and auth clarification. It does not mention pagination or limit behavior, but these are covered in the schema and are not critical for a simple read-only standings tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all parameters (season, limit, format). The description's example shows season and format in action, which is helpful but adds little beyond the schema. The limit parameter is not mentioned in the description, leaving the schema to carry that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource: 'Constructors' championship standings.' It is unambiguous and distinguishes from siblings like jolpicaf1_driver_standings by explicitly specifying 'Constructors'. The example further clarifies the scope (2024 season). The verb is implicit but the intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives such as jolpicaf1_driver_standings. The example provides a concrete use case, but there are no exclusions or alternative recommendations. Usage is implied by the tool name and description rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_driversARead-onlyIdempotent
Drivers — all-time, or the field for one season.
Returns: {MRData:{DriverTable:{season, Drivers:[{driverId, permanentNumber, code, givenName, familyName, dateOfBirth, nationality, url}]}}} — driverId (e.g. 'max_verstappen') is the key every other tool filters on
Example: 2024 field {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| offset | No | Page offset. | |
| season | Yes | Season year (e.g. 2024), or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the description only needs to add context beyond that. It does so by showing the exact return structure, explaining the significance of `driverId`, providing a request example, and noting auth is not needed. This goes beyond a minimal read-only disclosure, though it does not cover pagination behavior (which is left to the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a brief scope statement, the return payload, a key clarification about `driverId`, an example, and an auth note. Every sentence contributes useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description provides the return structure explicitly. It covers auth, an example, and the critical relationship to other tools. With four parameters all documented in the schema and simple read-only semantics, this is a complete description for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with descriptions, so the baseline is 3. The description adds semantic value by explaining that `season` can mean 'all-time' or 'the field for one season' and by showing a concrete example with `season` and `format`. This clarifies the parameter's role beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Drivers' and specifies the dual scope: all-time or a single season's field. It also highlights the critical `driverId` field and its role as the key for other tools, distinguishing this from sibling F1 data tools like results or standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: to obtain driver details and the `driverId` that other tools filter on. It gives an explicit example of the `season` parameter. However, it does not explicitly name alternative tools or state when not to use this tool, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_driver_standingsARead-onlyIdempotent
Drivers' championship standings — after a season, or after a specific round.
Returns: {MRData:{StandingsTable:{season, round, StandingsLists:[{season, round, DriverStandings:[{position, points, wins, Driver:{driverId, code, familyName}, Constructors:[{constructorId, name}]}]}]}}} — note the extra StandingsLists layer
Example: 2024 drivers' championship {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already label it read-only, open-world, and idempotent. The description adds useful context like auth requirements and the return structure, but also mentions 'after a specific round' which is not reflected in the input schema, potentially misleading. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, return schema, example, and auth note. The return schema is lengthy but necessary to highlight the 'extra StandingsLists layer'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by providing the full return structure, an example, and auth info. However, the 'specific round' mention is unexplained and the limit parameter is not described behaviorally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds an example using season and format but does not add further meaning to the limit parameter or clarify the round discrepancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns 'Drivers' championship standings' and explicitly distinguishes from sibling tools like constructor standings by using 'Drivers''. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context on when to use: for driver standings after a season or round. However, it does not explicitly mention alternatives or when not to use this tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_lapsARead-onlyIdempotent
Lap-by-lap times for every driver in a race. LARGE — page it or narrow to one lap.
Returns: {MRData:{total, RaceTable:{Races:[{Laps:[{number, Timings:[{driverId, position, time}]}]}]}}} — one entry per lap, each holding every driver's timing
Example: First laps of 2024 round 1 {"season": "2024", "round": "1", "format": "json", "limit": 100}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). A full race is thousands of rows — check MRData.total. | |
| round | Yes | Round number. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| offset | No | Page offset. | |
| season | Yes | Season year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a read-only, idempotent operation. The description adds valuable behavioral context: the large payload requiring pagination, the exact return shape, and confirmation that no auth is needed. This exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, size warning, return structure, example, and auth in a few sentences. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining the return structure, which it does explicitly with a nested type sketch. It also covers pagination, example usage, and auth, making it complete for a data-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters. The description adds an example call but does not go beyond the schema in explaining parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Lap-by-lap times for every driver in a race' – a specific verb and resource. This distinguishes it from siblings like results, qualifying, and pitstops within the same F1 family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description warns 'LARGE — page it or narrow to one lap', providing clear context on when and how to use the tool. It also includes a concrete example with season/round and limit. It does not explicitly state when NOT to use it versus alternatives, but the purpose distinction is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_pitstopsARead-onlyIdempotent
Pit stops for a race: lap, time of day and stationary duration.
Returns: {MRData:{RaceTable:{Races:[{PitStops:[{driverId, lap, stop, time, duration}]}]}}} — duration is stationary time ('23.2'), time is clock time of day
Example: 2024 round 1 pit stops {"season": "2024", "round": "1", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| round | Yes | Round number. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| season | Yes | Season year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, read-only, idempotent operation. The description adds valuable context beyond annotations: it clarifies the semantics of 'duration' vs 'time', states that auth is not needed, and shows the response structure. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: definition, return shape, field clarification, example, and auth note. Each line earns its place, and the return shape is especially useful given the lack of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with well-documented parameters and helpful annotations, the description is complete: it provides the return structure, an example call, and permission requirements. It sufficiently compensates for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds a concrete example of parameter values, but does not add significant semantic detail beyond what the schema already provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving pit stops for a race, listing the key fields (lap, time, duration). It distinguishes itself from other jolpicaf1 tools by focusing specifically on pit stop data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its definition and provides an example invocation, but it does not explicitly state when to use this tool versus alternatives or mention exclusions. The context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_qualifyingARead-onlyIdempotent
Qualifying results with Q1/Q2/Q3 times per driver.
Returns: {MRData:{RaceTable:{Races:[{QualifyingResults:[{position, Driver, Constructor, Q1, Q2, Q3}]}]}}} — Q2/Q3 absent for drivers eliminated earlier
Example: 2024 round 1 qualifying {"season": "2024", "round": "1", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| round | Yes | Round number, or 'last'. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is established. The description adds value beyond annotations by detailing the exact return structure (MRData:RaceTable:...) and the behavior that Q2/Q3 are absent for drivers eliminated earlier. This is useful behavioral context not covered by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose. The first sentence states what the tool does, followed by the return shape, an example, and an auth note. Each line adds value. It is slightly longer than necessary due to the inline return schema, but this is informative rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity, the description covers the key aspects: purpose, return format, example, auth requirement, and special case for Q2/Q3 omission. The schema covers parameter details, and annotations cover safety. The only missing piece is explicit differentiation from sibling tools, but the purpose line largely handles that. Overall it is sufficiently complete for an agent to invoke successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with all four parameters (season, round, limit, format) having descriptions. The description's example shows the expected usage of season, round, and format, which reinforces the schema but does not add new semantic information. Since the schema already does the heavy lifting, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific statement: 'Qualifying results with Q1/Q2/Q3 times per driver.' This clearly identifies the resource (qualifying results) and the content per driver (Q1/Q2/Q3 times). It distinguishes itself from sibling tools like jolpicaf1_results (race results) and jolpicaf1_sprint (sprint results) by focusing narrowly on qualifying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example ('2024 round 1 qualifying') and notes that 'Auth: none needed,' which gives practical usage context. However, it does not explicitly state when to use this tool versus alternatives like jolpicaf1_results or jolpicaf1_sprint. The usage guidance is implied by the name and description rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_racesARead-onlyIdempotent
A season's race calendar with dates, circuits and (from 2021) each session's date/time.
Returns: {MRData:{RaceTable:{season, Races:[{season, round, raceName, date, time, url, Circuit:{circuitId, circuitName, Location}, FirstPractice, Qualifying, Sprint}]}}} — round is what the result tools take
Example: 2024 calendar {"season": "2024", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world hints. The description adds that no authentication is needed and specifies the exact return structure, which is useful. It also notes data availability from 2021 for session times, providing extra context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and includes a compact return structure and example. The return schema is somewhat verbose but adds value in the absence of an output schema. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with good annotations and full schema coverage, the description is complete: it states the purpose, shows the output shape, gives a concrete example, and notes authentication. Minor gaps like pagination behavior are not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters. The description does not add meaningful parameter details beyond the schema, as the example merely repeats the season and format values. The baseline of 3 applies because the schema fully documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a season's race calendar with dates, circuits, and session times. This distinguishes it from sibling tools like jolpicaf1_results and jolpicaf1_qualifying, though it lacks an explicit verb like 'list' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example and the note that 'round is what the result tools take' imply this is a precursor to result/qualifying/sprint tools, but there is no explicit statement about when to use this tool versus alternatives. The usage context is implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_resultsARead-onlyIdempotent
Race results: finishing order, grid, laps, time/status, points and fastest lap.
Returns: {MRData:{RaceTable:{Races:[{season, round, raceName, Results:[{position, positionText, points, grid, laps, status, Driver:{driverId, code}, Constructor:{constructorId}, Time:{millis, time}, FastestLap:{rank, lap, Time, AverageSpeed}}]}]}}} — all values are STRINGS
Example: 2024 round 1 {"season": "2024", "round": "1", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). | |
| round | Yes | Round number, or 'last'. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and open-world. The description adds useful behavioral context beyond annotations: 'Auth: none needed' and 'all values are STRINGS'. It does not mention rate limits or pagination, but the annotations cover the safety profile, so this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a concise summary, followed by a detailed return structure and a brief example. The return structure is somewhat verbose but necessary to convey the nested output format. Overall, it is efficient and well-organized, though it could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The detailed return structure compensates for the absence of an output schema, and the example clarifies the required parameters. However, it does not explain the meaning of specific result fields (e.g., status, positionText) or handle edge cases like invalid season/round values. For a simple read-only tool, this is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with descriptions at 100% coverage. The description only repeats an example with season and round, adding little parameter-level meaning beyond what the schema already provides. The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning race results with specific fields (finishing order, grid, laps, time/status, points, and fastest lap). It distinguishes from sibling tools like jolpicaf1_qualifying and jolpicaf1_sprint by focusing on race results rather than qualifying or sprint sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly compare this tool to alternatives or state when to use it over sibling tools like jolpicaf1_laps or jolpicaf1_qualifying. It provides an example (2024 round 1) and notes that auth is not needed, giving some context, but lacks explicit 'use this when...' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_seasonsARead-onlyIdempotent
Every F1 season on record (1950 onward).
Returns: {MRData:{total, limit, offset, SeasonTable:{Seasons:[{season, url}]}}}
Example: First page of seasons {"format": "json", "limit": 30}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (max 100). Check MRData.total for how many exist. | |
| format | No | Leave as json — the API defaults to XML. | json |
| offset | No | Page offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context by specifying the exact return structure (MRData with SeasonTable) and 'Auth: none needed', which are not present in annotations. It does not describe rate limits or pagination behavior, but for a simple list operation that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, return format, example, and auth note. Every line adds value, with no filler or redundant repetition of schema annotations. This is appropriately sized for a simple paginated list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, rich schema coverage, and annotations, the description is sufficient. It provides the return shape (compensating for the absent output schema), an example, and authentication note, while the schema covers parameter details. No critical gaps remain for an agent to select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions for limit, format, and offset. The description contributes an explicit usage example ({"format": "json", "limit": 30}) that demonstrates how to request the first page, reinforcing the schema's guidance. It does not introduce new parameter semantics but adds a practical illustration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns every F1 season from 1950 onward and provides a return example showing 'Seasons:[{season, url}]'. This clearly indicates a list/retrieve operation over a distinct resource (seasons) and implicitly distinguishes it from sibling tools like jolpicaf1_drivers and jolpicaf1_races. The lack of an explicit verb like 'list' is minor, but the example and return structure make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use vs alternatives or exclusions. The example and read-only annotations imply it should be used when a user needs the catalog of F1 seasons, but no rival tool or alternative is referenced. This is an implied usage pattern rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jolpicaf1_sprintARead-onlyIdempotent
Sprint race results (weekends that have one — 2021 onward).
Returns: {MRData:{RaceTable:{Races:[{SprintResults:[{position, points, grid, laps, status, Driver, Constructor, Time}]}]}}} — Races is EMPTY for a weekend with no sprint, which is not an error
Example: A 2024 sprint weekend {"season": "2024", "round": "5", "format": "json"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| round | Yes | Round number. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| season | Yes | Season year, or 'current'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the tool is known to be a safe, idempotent read. The description adds valuable context beyond annotations: the response shape, the specific empty-array behavior for non-sprint weekends, and the fact that no authentication is needed. This goes beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, including the return shape, an edge-case warning, an example, and auth status in a few sentences. It is well-structured and each sentence earns its place, though the inline JSON return shape makes it slightly dense for quick skimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does so explicitly with the MRData structure and field list. It also covers the empty-Races case, which is critical for correct interpretation. It doesn't detail nested Driver/Constructor fields, but the top-level shape is sufficient for an agent to understand the result. Given the tool's moderate complexity, this is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (season, round, format) is already documented in the input schema. The description's only addition is a concrete example with sample values, which reinforces usage but doesn't add deeper semantic meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns 'Sprint race results' for F1 weekends that have a sprint, with a specific scope ('2021 onward'). The verb+resource combination ('Sprint race results') is precise and distinguishes it from sibling tools like jolpicaf1_results or jolpicaf1_qualifying by focusing exclusively on sprint races.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: for sprint results on weekends that have one. It also explicitly explains the edge case where Races is EMPTY for no-sprint weekends, which guides an agent on interpreting results. However, it does not explicitly mention alternatives or state 'use this instead of jolpicaf1_results', so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_candlesticksARead-onlyIdempotent
OHLC price candlesticks for one market over a time window (1m/1h/1d periods).
Returns: {ticker, candlesticks:[{end_period_ts, yes_bid, yes_ask, price, volume, open_interest}]}
Auth: none needed.
Also answers this: polymarket_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| end_ts | Yes | Window end (unix seconds). | |
| ticker | Yes | Market ticker. Required — part of the URL path. | |
| start_ts | Yes | Window start (unix seconds). | |
| seriesTicker | Yes | Series ticker (the market ticker's prefix before the first '-'). Required — part of the URL path. | |
| period_interval | No | Candle width in minutes: 1, 60, or 1440. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the agent knows it's a safe, idempotent read. The description adds the return format and auth requirement, which is useful context. It doesn't disclose potential rate limits or pagination behavior, but given the strong annotations, the added value is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the purpose, then return format and auth. Every sentence earns its place, and there is no fluff or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only data tool, the description provides the core information: purpose, scope, return shape, and auth. It does not state time-window limits or pagination behavior, but given the straightforward nature and rich annotations, the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning each parameter is already documented with descriptions. The description adds no additional parameter semantics beyond what the schema provides (e.g., period_interval mapping is already in the schema). Per the rubric, baseline 3 applies when the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns OHLC price candlesticks for one market over a time window, with 1m/1h/1d periods. The phrase 'one market' distinguishes it from the batch sibling, and the tool's scope is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Auth: none needed,' which is a practical usage guideline. It also cross-references 'polymarket_price_history' as an alternative use case. However, it doesn't explicitly state when to prefer this tool over kalshi_candlesticks_batch or other siblings, so it lacks an exclusionary note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_candlesticks_batchARead-onlyIdempotent
OHLC candlesticks for MANY markets in one call — pass the tickers as a list.
Returns: {markets:[{market_ticker, candlesticks:[{end_period_ts, price, volume, open_interest}]}]}
Auth: none needed.
Also answers this: polymarket_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| end_ts | Yes | Window end (unix seconds). | |
| start_ts | Yes | Window start (unix seconds). | |
| market_tickers | Yes | Market ticker(s). | |
| period_interval | No | Candle width in minutes: 1, 60, or 1440. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description need not repeat those. It adds value by stating 'Auth: none needed' and providing the exact response shape (markets, candlesticks fields), which goes beyond the structured metadata. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: first sentence states the core purpose, second gives the return structure, third covers auth and a cross-reference. No wasted words, though the final 'Also answers this: polymarket_price_history' is ambiguous and slightly hurts clarity, preventing a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the return shape and fields, which is useful. It also notes auth requirements. Combined with the rich annotations and full schema coverage, the tool is sufficiently described for an agent to invoke it. Minor gaps: no mention of pagination or potential response size, but these are less critical given the batch nature and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter has its own description. The description only adds 'pass the tickers as a list', which is already implied by the 'Market ticker(s)' schema description. It does not provide additional meaning about period_interval, start_ts, or end_ts beyond the schema, so the baseline of 3 is appropriate both because the schema covers everything and the description contributes little extra.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides OHLC candlesticks for 'MANY markets in one call', which distinguishes it from the single-market sibling kalshi_candlesticks. It also specifies the resource (markets, candlesticks) and the verb implied (get/fetch). The return format is shown, further clarifying what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for batch/multi-market requests via 'MANY markets' and notes it also answers polymarket_price_history, offering a hint about overlap with that sibling. However, it lacks explicit when-to-use vs. alternatives, no exclusions, and no guidance on when to prefer the single-market tool. The mention of polymarket_price_history is cryptic rather than a clear routing instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_eventARead-onlyIdempotent
One event by ticker, optionally with its markets embedded.
Returns: {event:{event_ticker, series_ticker, title, category, mutually_exclusive, markets:[…]}, markets}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventTicker | Yes | Event ticker (from kalshi_events or a market's event_ticker). Required — part of the URL path. | |
| with_nested_markets | No | Embed the event's markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable beyond-annotation context: the exact return shape and that no authentication is needed. This provides behavioral transparency that the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a purpose sentence, a return shape, and an auth note. It is front-loaded with the core purpose and contains zero filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 2 fully documented parameters and rich annotations, the description is nearly complete. It provides the return structure and auth requirement, both important for invocation expectations. It doesn't discuss not-found errors, but that is an edge case beyond the required scope for this tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the tool description's 'optionally with its markets embedded' simply restates the with_nested_markets parameter without adding new semantics. The schema already fully documents both parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single event by ticker, optionally embedding its markets. This distinguishes it from sibling tools like kalshi_events (list of events) and kalshi_market (single market), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a singular lookup use case, and the schema's note that eventTicker comes from kalshi_events or a market's event_ticker provides workflow context. However, it stops short of explicitly naming alternatives for when not to use this tool, so it's clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_eventsARead-onlyIdempotent
Event catalogue (an event groups related markets) — filter by series or status. Paginated by cursor.
Returns: {cursor, events:[{event_ticker, series_ticker, title, sub_title, category, mutually_exclusive, strike_period}], milestones}
Example: First page of open events {"limit": 5, "status": "open"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1-200). | |
| cursor | No | Pagination cursor. | |
| status | No | Comma-separated: unopened, open, closed, settled. | |
| series_ticker | No | Filter to one series. | |
| with_nested_markets | No | Embed each event's markets in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior, so the description does not need to repeat those. It adds value by explaining the return structure (cursor, events, milestones), pagination behavior, auth requirement, and a worked example. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and efficiently packs return format, pagination, example, and auth into four short sentences. Every sentence contributes information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description provides the essential return fields and an example, making it largely self-contained. Minor missing details like sort order or the meaning of 'milestones' would improve completeness but are not critical for selecting or invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are documented in the schema (100% coverage), so the baseline is 3. The description adds explanatory context by mapping 'filter by series or status' to the relevant parameters, and the example demonstrates how to use `limit` and `status` together. This is above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an 'Event catalogue' with an explicit definition of what an event is ('an event groups related markets'). It specifies the filterable dimensions (series, status) and mentions pagination, distinguishing it from singular tools like kalshi_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use it: as a catalogue for browsing/filtering events by series or status. Includes a concrete example (first page of open events) that demonstrates a use case. Does not explicitly name alternative tools, but the purpose is unambiguous enough that an agent can infer it from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_exchange_announcementsARead-onlyIdempotent
Active exchange-wide announcements.
Returns: {announcements:[{type, message, delivery_time, status}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description adds useful context: it specifies that announcements are 'active' (not historical) and includes an explicit 'Auth: none needed' note, which addresses authentication requirements. The return shape is also given, providing behavioral clarity without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is minimal yet complete: a clear definition, a structured return description in a concise format, and an auth note. Each sentence serves a purpose with no redundancy or unnecessary filler. It is well-front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, the comprehensive annotations, and the presence of a return format in the description, it is largely complete. The only minor gap is not clarifying how 'active' announcements relate to time or whether they are updated dynamically, but the openWorldHint partially covers this. Overall, the description gives sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty with 100% coverage by definition. The baseline for zero parameters is 4, and the description appropriately does not need to explain parameters. It adds no irrelevant parameter information, which is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource: 'Active exchange-wide announcements.' It specifies the type of data returned and includes a functional return format. While it lacks an explicit verb like 'list' or 'retrieve,' the meaning is unambiguous and distinct from sibling tools like kalshi_exchange_status and kalshi_exchange_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention the difference between announcements and status/schedule, nor any context for when announcements would be relevant. The only extra operational hint is 'Auth: none needed,' which is not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_exchange_scheduleARead-onlyIdempotent
Standard trading hours + maintenance windows.
Returns: {schedule:{standard_hours, maintenance_windows}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by specifying the return structure 'Returns: {schedule:{standard_hours, maintenance_windows}}' and explicitly stating no authentication is needed. This provides output shape and auth context not covered by the readOnlyHint, openWorldHint, or idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with just two lines of core content plus return type and auth. Every sentence is meaningful and front-loaded, with no redundancy or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only tool, the description provides the essential return structure and clarifies the schedule contents (standard hours, maintenance windows). It does not elaborate on timezone, date ranges, or interpretation details, but these are minor gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema trivially covers all parameters. According to the rubric, zero params earns a baseline of 4. The description correctly omits parameter details, and there is no need for additional param explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and content: 'Standard trading hours + maintenance windows.' It conveys what the tool returns, but lacks an explicit action verb like 'get' and does not differentiate from sibling tools such as kalshi_exchange_status or kalshi_exchange_announcements. Thus it is clear but not distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention use cases like 'when you need trading hours' or compare with kalshi_exchange_status. The only additional note, 'Auth: none needed,' relates to authentication rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_exchange_statusARead-onlyIdempotent
Is the exchange up and trading right now.
Returns: {exchange_active, trading_active}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent behavior. The description adds useful context beyond annotations: that no auth is required and the exact return fields. This is adequate for a simple status endpoint, though it does not cover edge cases like error responses or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single question and a single line stating the return fields and auth. Every sentence carries meaning, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter status check with no output schema, the description adequately specifies the return fields and auth requirements. It could explain the semantics of 'trading_active' vs 'exchange_active' in more depth, but the field names are self-explanatory and the tool's simplicity makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is vacuous (100% for an empty schema). There is nothing for the description to add, so the baseline of 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks whether the exchange is currently up and trading, and returns specific fields (exchange_active, trading_active). This distinguishes it from siblings like kalshi_exchange_schedule and kalshi_exchange_announcements, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is a real-time status check ('right now') and notes that no authentication is needed. It does not explicitly mention alternatives or exclusion cases, but for such a simple, self-contained tool, the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_marketARead-onlyIdempotent
One market's full detail by ticker — quotes, volume, rules, strike, timing.
Returns: {market:{ticker, event_ticker, title, yes_sub_title, no_sub_title, status, result, yes_bid_dollars, yes_ask_dollars, last_price_dollars, volume_fp, open_interest_fp, rules_primary, rules_secondary, strike_type, custom_strike, open_time, close_time, expiration_time}}
Auth: none needed.
Also answers this: polymarket_market.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Market ticker (from kalshi_markets). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, reducing the burden on the description. The description adds that no authentication is needed and shows the complete return object structure. These details provide useful behavioral context beyond the annotations, though they don't cover potential rate limits or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and places the core purpose in the first sentence. The return structure is listed concisely and the auth note is clear. However, the final line 'Also answers this: polymarket_market' is terse and ambiguous, slightly harming clarity and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description is quite complete: it covers purpose, input source (via schema), exact return fields, and authentication. Since there is no output schema, the explicit listing of returned fields is especially valuable. The annotations cover safety and idempotency, making this a well-rounded description for the tool's scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, ticker, has 100% schema coverage, including that it comes from kalshi_markets and is part of the URL path. The description merely says 'by ticker,' which does not add additional semantic meaning beyond what the schema already provides. Therefore, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'One market's full detail by ticker,' which clearly states the action (getting full detail) and the resource (a specific market) along with the required input (ticker). This distinguishes it from sibling tools like kalshi_markets (likely listing many markets) and other kalshi tools. The added note about polymarket_market does not obscure the primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the schema description indicating the ticker comes from kalshi_markets and that this tool provides full details for that ticker. However, the description does not explicitly state when to use this over alternatives like kalshi_orderbook or kalshi_trades, nor does it provide exclusion criteria. The phrase 'Also answers this: polymarket_market' hints at an alternative but lacks specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_marketsARead-onlyIdempotent
Prediction-market catalogue with current quotes — filter by event/series ticker or status. Paginated by cursor.
Returns: {cursor, markets:[{ticker, event_ticker, market_type, title, status, yes_bid_dollars, yes_ask_dollars, no_bid_dollars, no_ask_dollars, last_price_dollars, volume_fp, volume_24h_fp, open_interest_fp, liquidity_dollars, open_time, close_time, expiration_time, rules_primary}]}
Example: First page of open markets {"limit": 5, "status": "open"}
Auth: none needed.
Also answers this: polymarket_markets, polymarket_clob_markets.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1-1000). | |
| cursor | No | Pagination cursor from the previous page. | |
| status | No | Comma-separated: unopened, open, closed, settled. | |
| tickers | No | Specific market ticker(s). | |
| event_ticker | No | Filter to one event's markets. | |
| series_ticker | No | Filter to one series' markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by specifying the return format (detailed fields list), pagination behavior via cursor, and that no auth is required. It also clarifies the catalog scope ('current quotes'), 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. The return block and example are useful but slightly lengthen the description. Each part earns its place, though the long field list could be considered verbose; however, it preempts output-schema ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 optional parameters, no output schema, but the description compensates by providing the exact return shape and an example request. It also covers auth and pagination. Missing are rate limits or edge cases, but given the read-only annotations and simplicity, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, so baseline is 3. The description adds meaning by explicitly mentioning the filter options (event/series ticker, status) and providing a concrete example ({'limit': 5, 'status': 'open'}) that demonstrates how to use parameters together. This exceeds the schema's dry parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Prediction-market catalogue with current quotes' with specific verbs ('filter') and resource (market catalogue). It distinguishes from siblings like kalshi_market (single market) and kalshi_events (events) by focusing on listing/filtering markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: filter by event/series ticker or status, paginated by cursor, and mentions 'Auth: none needed.' The line 'Also answers this: polymarket_markets, polymarket_clob_markets' hints at substitutability, but there are no explicit exclusions or precise when-to-use vs alternatives guidance for other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_milestonesARead-onlyIdempotent
Milestones — dated catalysts (data releases, games, decisions) linked to the event tickers they resolve.
Returns: {cursor, milestones:[{id, category, details, end_date, primary_event_tickers, related_event_tickers}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| cursor | No | Pagination cursor. | |
| category | No | Filter by category. | |
| minimum_start_date | No | ISO date lower bound. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, establishing a safe read operation. The description adds valuable context by specifying the return structure (cursor and milestone fields) and explicitly stating no auth is needed, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core definition, then provides the return format and auth status in a structured manner. Every line contributes useful information, though the auth note is trivial but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with optional parameters and no output schema, the description provides adequate context: what the tool returns, the response shape, and auth. It lacks explicit pagination guidance, but the schema covers cursor semantics. Overall, it is sufficiently complete for a simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all four parameters (limit, cursor, category, minimum_start_date). The tool description does not add any additional parameter-level detail, so it is at the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines what milestones are (dated catalysts linked to event tickers) and implies a retrieval operation. It distinguishes itself from sibling Kalshi tools by focusing on the milestone concept. However, it lacks an explicit verb like 'list' or 'get', which would make the purpose even more direct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus other Kalshi tools (e.g., kalshi_events, kalshi_markets). The description only implies usage by defining the resource. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_mve_collectionARead-onlyIdempotent
One multivariate event collection by ticker.
Returns: {multivariate_contract:{collection_ticker, series_ticker, title, description, associated_events, associated_event_tickers}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| collectionTicker | Yes | Collection ticker (a market's mve_collection_ticker). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds useful context by stating 'Auth: none needed' and specifying the return structure, which is valuable given the absence of an output schema. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with one sentence for purpose, one for return payload, and one for authentication. Every element earns its place with no redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-item lookup, the description provides adequate context: it states the input (ticker), the return shape, and the auth requirement. It does not discuss error scenarios or edge cases, but these are less critical given the low complexity and the presence of schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for the single collectionTicker parameter, including the fact that it is required and part of the URL path. The tool description does not add any additional parameter-level semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "One multivariate event collection by ticker" clearly identifies the resource and retrieval action, and its singular form distinguishes it from the plural sibling tool kalshi_mve_collections. However, it lacks an explicit verb like 'get' or 'fetch,' which makes the intended operation slightly less direct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The singular/plural distinction with kalshi_mve_collections hints at a specific use case, but no when/when-not criteria or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_mve_collectionsARead-onlyIdempotent
Multivariate event collections — the parlay-style combo products that many KXMVE* markets belong to (a market's mve_collection_ticker points here).
Returns: {cursor, multivariate_contracts:[{collection_ticker, series_ticker, title, description, is_ordered, is_all_yes, size_min, size_max, associated_event_tickers, open_date, close_date}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| cursor | No | Pagination cursor. | |
| status | No | Filter: open, closed, settled. | |
| series_ticker | No | Filter to one series. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds 'Auth: none needed' and explains the market-to-collection relationship, but provides no additional behavioral details like pagination behavior or filtering semantics. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence purpose, a structured return shape, and an auth note. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with good annotations and full schema coverage, the description provides enough context: it names the resource, explains the relationship to markets, lists the return fields, and notes auth requirements. It could mention pagination/filtering behavior, but that is not essential for a moderate-complexity list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all 4 parameters (limit, cursor, status, series_ticker). The description adds no extra parameter-level semantics, so it stays at the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Multivariate event collections' and clarifies they are 'parlay-style combo products' tied to KXMVE* markets via mve_collection_ticker. However, it lacks an explicit verb like 'List' or 'Get', so the action must be inferred from the return shape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context that a market's mve_collection_ticker points here, implying this tool is for looking up parent collections of KXMVE markets. But it does not explicitly distinguish this from the sibling tool kalshi_mve_collection or state when this tool should be preferred over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_orderbookARead-onlyIdempotent
Order book for one market — resting yes/no bids by price level (dollar-denominated).
Returns: {orderbook_fp:{yes_dollars:[[price, size], …], no_dollars:[[price, size], …]}} (empty arrays when nothing is resting)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Max price levels per side. | |
| ticker | Yes | Market ticker. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds useful behavioral details: the exact return shape (orderbook_fp with yes_dollars and no_dollars arrays), empty arrays when nothing is resting, and no authentication requirement. This goes beyond annotations, though it does not discuss ordering, pagination, or failure scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose in the first sentence, return format in the second, and an auth note in the third. Every sentence adds value without redundancy. It is front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is nearly complete. It covers the core purpose, return structure, empty-order behavior, and authentication. Since there is no output schema, including the return shape is valuable. The only missing piece is explicit usage guidance relative to sibling tools, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for both parameters (`ticker` required and `depth` with a description), so schema description coverage is 100%. The description does not add additional parameter semantics beyond what the schema already states, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Order book for one market — resting yes/no bids by price level (dollar-denominated).' This specifies the action (retrieve order book), the resource (one market), and the data type (resting bids). It distinguishes from sibling tools like kalshi_candlesticks or kalshi_market by focusing on order book depth and the 'one market' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving order book data for a specific market, but it does not explicitly state when to use this tool versus alternatives such as kalshi_trades or kalshi_market. No comparative or exclusionary guidance is provided, so the usage context is only implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_seriesARead-onlyIdempotent
One series by ticker — title, category, settlement sources, fee structure.
Returns: {series:{ticker, title, category, frequency, tags, settlement_sources, contract_url, fee_type}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| seriesTicker | Yes | Series ticker (e.g. KXNBA). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context by specifying 'Auth: none needed' and providing the exact return shape, which goes beyond what annotations offer. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences plus a return-type block. Every sentence carries useful information: the first defines the action and scope, the second provides the return structure and authentication requirement. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one well-documented parameter) and the presence of strong annotations, the description is largely complete. It fully specifies the return value, which is essential since no output schema is provided. It could mention error behavior for unknown tickers, but that is a minor omission for a simple read-only endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter seriesTicker with a description and example ('KXNBA'), so schema_description_coverage is 100%. The description's 'by ticker' merely restates the parameter's purpose without adding new semantic detail, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One series by ticker' which clearly indicates a single-series lookup by its unique identifier, and enumerates the returned fields (title, category, settlement sources, fee structure). This distinguishes it from sibling tools like kalshi_series_list, which presumably returns multiple series, by emphasizing the singular scope and the ticker-based access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ticker' implies the tool should be used when a specific series ticker is known, but it does not explicitly mention alternatives, exclusions, or when not to use it (e.g., when listing all series would be more appropriate). There is no reference to sibling tools like kalshi_series_list, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_series_listARead-onlyIdempotent
All series in a category (Sports, Politics, Economics, Financials, Climate and Weather, Entertainment, …) — the top of the id chain.
Returns: {series:[{ticker, title, category, frequency, tags, settlement_sources, contract_url}]}
Example: Every sports series {"category": "Sports"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Series category (e.g. Sports). | |
| include_product_metadata | No | Embed product metadata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context by stating 'Auth: none needed' and specifying the exact return fields. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with a clear primary statement, a return structure snippet, a helpful example, and an auth note. Every sentence adds value and the example improves comprehension without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers purpose, return format, example usage, and authentication. It's sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already described. The description adds an example usage for 'category' but doesn't elaborate on 'include_product_metadata', so it's at baseline for schema-driven semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all series in a category, giving a specific verb-resource relationship. It differentiates from siblings like kalshi_series by noting it's at the 'top of the id chain' and uses 'All series in a category'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context with example categories and an explicit usage example (Sports category). It doesn't name alternatives or list when-not-to-use, but the hierarchy hint and return structure imply its role among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_structured_targetARead-onlyIdempotent
One structured target (entity) by id.
Returns: {structured_target:{id, name, type, details, source_ids}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Structured-target id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent behavior. The description adds useful context: 'Auth: none needed' and the exact return shape '{structured_target:{id, name, type, details, source_ids}}'. These details go beyond the annotations and help the agent understand what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded. The main purpose is in the first sentence, followed by a clear returns line and an auth note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter get-by-id tool, the description is complete: it states the resource being fetched, the return structure, and authentication requirements. It does not explain field semantics, but the lack of an output schema makes that less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description for 'id' already says 'Structured-target id. Required — part of the URL path.' The description's 'by id' adds no new semantic meaning. Baseline 3 is appropriate since the schema handles parameter documentation well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One structured target (entity) by id.' clearly indicating this tool fetches a single structured target by its id. It distinguishes from the sibling tool 'kalshi_structured_targets' by emphasizing singular 'One' and 'by id'. However, the verb is implied rather than explicit (e.g., 'get' or 'retrieve'), so a perfect score is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you have a specific structured target id. No explicit alternatives or exclusions are mentioned, but the 'by id' phrasing provides basic context. It does not reference the sibling listing tool as an alternative, which would have been clearer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_structured_targetsARead-onlyIdempotent
Structured targets — Kalshi's entity registry (players, companies, people) that markets resolve against. Paginated by cursor; page size via page_size.
Returns: {cursor, structured_targets:[{id, name, type, details, source_ids, last_updated_ts}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Entity type filter (e.g. basketball_player, soccer_player, company, actor). | |
| cursor | No | Pagination cursor. | |
| page_size | No | Page size (the API ignores 'limit' here). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description adds useful behavioral context: 'Auth: none needed', 'Paginated by cursor; page size via page_size', and the response structure. This clarifies pagination behavior and access requirements, which the annotations do not cover. No contradiction exists 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and structured: a one-line definition, a pagination note, a return shape preview, and an auth note. Every sentence earns its place without redundancy. It fronts the core purpose immediately and remains compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description compensates by explicitly listing the return fields. It also covers pagination and auth, which are key contextual aspects. However, it does not mention when to prefer this tool over the singular kalshi_structured_target, which slightly limits completeness for an agent choosing among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already includes descriptions for all three parameters (type, cursor, page_size), and the description doesn't add new parameter-specific meaning. The phrase 'page size via page_size' repeats schema info, and the return format alone doesn't clarify parameter semantics. Since schema coverage is 100%, the baseline of 3 is appropriate; the description adds little beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as Kalshi's entity registry (players, companies, people) that markets resolve against, and its return format indicates a list operation. It distinguishes itself from the singular sibling kalshi_structured_target by being plural, though it doesn't explicitly compare to that sibling. The purpose is unambiguous but could state 'list' or 'retrieve' as the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the resource and pagination but provides no explicit guidance on when to use this tool vs alternatives like kalshi_structured_target. It implies usage for browsing or fetching entity registry entries, but does not state exclusions or contrast with other Kalshi lookup tools. Text: 'Structured targets — Kalshi's entity registry (players, companies, people) that markets resolve against' gives context but no when-to-use rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_tradesARead-onlyIdempotent
Recent public trades, optionally for one market ticker. Paginated by cursor.
Returns: {cursor, trades:[{trade_id, ticker, count, yes_price, no_price, taker_side, created_time}]}
Auth: none needed.
Also answers this: polymarket_trades, polymarket_holders.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1-1000). | |
| cursor | No | Pagination cursor. | |
| max_ts | No | Unix-seconds upper bound. | |
| min_ts | No | Unix-seconds lower bound. | |
| ticker | No | Filter to one market. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed', pagination via cursor, and the exact return structure, all of which are behavioral details beyond the annotation. There is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences plus an inline return format and auth note, all front-loaded with the purpose. There is no filler or redundancy; every sentence carries value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return format explicitly, which compensates for the absence of an output schema. It covers auth and pagination, and hints at alternatives. It does not explain field semantics or ordering, but these are minor given the schema and self-explanatory field names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds minimal new parameter meaning—it reiterates pagination via cursor and optional ticker filtering, but does not enrich beyond the schema. At high coverage, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Recent public trades, optionally for one market ticker' and mentions pagination by cursor. This gives a specific verb, resource, and scope. It also distinguishes itself from sibling tools by explicitly noting it also answers polymarket_trades and polymarket_holders, avoiding confusion with those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use the tool (for recent public trades, optionally filtered by ticker) and explicitly states that it also answers the queries of polymarket_trades and polymarket_holders, serving as a routing hint to prefer this tool for those purposes. It does not list exclusions for other alternatives, but the provided guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_competitionARead-onlyIdempotent
One competition by SLUG (e.g. primera-division). Numeric id 404s — use the slug.
Returns: {competition:{id, slug, name, opta_id}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Competition slug (primera-division, segunda-division, primera-division-femenina). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark it as read-only, open-world, and idempotent. The description adds behavioral context: numeric IDs fail with 404, and it explains the auth model ('works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more'). This is beyond annotation data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences: what it returns, the return shape, and auth requirements. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool, the description covers purpose, parameter format, failure mode, auth, and return structure. Since there's no output schema, the return example is particularly valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the slug parameter with examples. The description reinforces this with 'e.g. primera-division' and warns against numeric IDs, adding practical selection guidance. No gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'One competition by SLUG', clearly identifying a single-resource retrieval operation. It distinguishes from sibling list tool laliga_competitions by specifying singular access and gives an example slug.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'use the slug' and warns that numeric id 404s, providing a concrete usage rule. It doesn't compare to alternatives like laliga_competitions, but the singular scoping and slug guidance make the appropriate use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_competitionsARead-onlyIdempotent
All LaLiga competitions (men's/women's, primera/segunda, across history), each with slug, opta_id, name.
Returns: {competitions:[{id, slug, name, opta_id, lde_id, main}]}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds context beyond annotations: the return structure and an auth note ('works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set'), which clarifies data availability and key requirements. This is useful, though it does not discuss pagination, rate limits, or errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: three short paragraphs covering purpose, return format, and auth. Each sentence earns its place, with the purpose front-loaded. No redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool, the description is complete. It covers scope, return fields, and auth behavior. Even without an output schema, the return structure is explicitly provided, and annotations cover safety. Little else is needed for accurate invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema is empty, so the baseline is 4. The description adds no parameter information because none exist; the schema is fully self-explanatory. No compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'All LaLiga competitions' with specific scope (men's/women's, primera/segunda, across history) and lists key fields (slug, opta_id, name). This specifies a distinct resource and scope, differentiating it from sibling tools like laliga_competition (singular) which likely fetches a single competition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by describing the resource ('All LaLiga competitions') but does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or sibling tools. The auth note provides some context but no direct comparison to other laliga_* tools, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_matchARead-onlyIdempotent
One match by SLUG (from laliga_matches; the long temporada-… slug, not the numeric id which 404s). For a played match adds scores + formations.
Returns: {match:{id, slug, name, home_team, away_team, home_score, away_score, home_formation, away_formation, competition, gameweek, date, status, attempt, ball}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Match slug (from laliga_matches.matches[].slug). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent, so the description adds conditional data behavior (scores/formations only for played matches) and auth context (works without key, subscription key unlocks more). This adds meaningful value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, returns, and auth in separate sections. Every sentence contributes, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers purpose, slug source, result fields, conditional behavior, and auth. The explicit Returns list effectively substitutes for an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the slug parameter with origin guidance, but the description adds critical nuance about the slug format (long temporada slug vs. numeric id) and a 404 pitfall, going beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one match by SLUG, referencing laliga_matches as the source and distinguishing from plural list tools. It also specifies what data is returned (scores + formations for played matches).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on where the slug comes from (laliga_matches) and warns against using the numeric id which 404s. However, it does not directly compare with alternative match-detail tools or state when not to use it, though that is implied by 'One match'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_matchesARead-onlyIdempotent
Matches feed. IMPORTANT: pass competition= to get a competition's matches — subscription= alone returns a mixed bag (incl. World Cup placeholders). competition=primera-division gives the 380 LALIGA EA SPORTS matches; add gameweek= for one matchweek (10).
Returns: {total, matches:[{id, slug, name, opta_id, home_team, away_team, competition, season, gameweek, date, time, venue, status}]} (status FullTime/PreMatch/…)
Example: 2025/26 LALIGA matchweek 1 (10 matches) {"subscription": "laliga-easports-2025", "competition": "primera-division", "gameweek": 1, "limit": 10}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| offset | No | Pagination offset. | |
| gameweek | No | Matchweek number (use with competition for a single round = 10 matches). | |
| competition | No | Competition slug to filter to — REQUIRED for real LaLiga matches (primera-division, segunda-division, primera-division-femenina). | |
| subscription | No | Subscription slug = the season (e.g. laliga-easports-2025). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent behavior. The description adds valuable context: the mixed-bag behavior of subscription alone, the return field structure, and auth requirements. It does not contradict annotations, though it leaves the 'more' unlocked by the key unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence contributes: what it does, the critical parameter warning, return format, a concrete example, and auth note. Well-structured with clear formatting for the example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list endpoint with generous annotations and schema coverage, the description provides the return structure, example usage, auth notes, and behavioral caveats. No output schema exists, so the return-field list is essential and included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already documents all parameters, but the description adds the critical caveat that subscription alone returns mixed data and clarifies that competition=primera-division yields the full 380-match set. This compensates beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a 'Matches feed' and details that it returns LaLiga matches with specific competition slugs, making its purpose clear. However, it does not explicitly differentiate from sibling tools like laliga_match (singular) or other leagues' match feeds, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: the IMPORTANT note instructs users to pass competition= for real competition matches and warns that subscription= alone returns mixed results. Includes a concrete example for a matchweek, but no explicit 'when not to use' or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_playerARead-onlyIdempotent
One player profile by SLUG — name, firstname/lastname, date_of_birth, country, current team + squad, roles.
Returns: {player:{id, slug, name, firstname, lastname, date_of_birth, country, international, team, squad, roles}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Player slug (from laliga_players_stats / laliga_squad; e.g. rubi-3). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing authentication requirements (works without a key, LALIGA_SUBSCRIPTION_KEY unlocks more) and explicitly showing the return structure. Annotations already declare read-only, open-world, and idempotent behavior, and the description does not contradict them. It could mention error cases or rate limits, but the provided context is sufficient for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with clear sections for purpose, return value, and auth. There is slight redundancy because the first sentence lists fields that are repeated in the Returns block, but it remains efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only profile lookup, the description provides a clear return contract and auth notes. Gaps include unspecified error behavior and what exact data 'LALIGA_SUBSCRIPTION_KEY unlocks more' refers to, but these are minor for typical agent use. The lack of an output schema is partially compensated by the explicit Returns field list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the slug parameter, including where to obtain it and that it's part of the URL path. The description adds minimal extra meaning beyond emphasizing 'by SLUG', so it meets the baseline but does not elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as fetching a single player profile by slug and lists the specific fields returned (name, birth date, country, team, squad, roles). This distinguishes it from sibling tools like laliga_player_stats and laliga_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you have a player slug and need profile information, but it does not explicitly state when to use it over alternatives like laliga_player_stats or laliga_squad. The schema hints at a workflow (slug from laliga_players_stats/laliga_squad), but the description itself lacks explicit when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_players_statsARead-onlyIdempotent
EVERY player in a season (≈749) with full Opta stats[] (name/stat pairs) + position + team + opta_id. Page with limit (max 100) + offset.
Returns: {total, player_stats:[{id, name, slug, opta_id, shirt_number, position, country, team, stats:[{name, stat}]}]}
Example: First page of 2025/26 player stats {"slug": "laliga-easports-2025", "limit": 20}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Subscription slug (e.g. laliga-easports-2025). Required — part of the URL path. | |
| limit | No | Page size (max 100). | |
| offset | No | Pagination offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint and idempotentHint annotations, the description adds valuable behavioral context: 'Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set,' page size cap of 100, and the exact response structure with the stats array. This covers authentication nuances, pagination constraints, and data shape 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear main sentence, a Returns block, an Example block, and an Auth line. It is reasonably concise for the complexity, though the Returns block partially repeats the earlier mention of stats and player attributes. The front-loaded main sentence gives immediate purpose and the example is actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully specifies the return JSON structure, pagination behavior (limit max 100, offset), and authentication requirements. This is complete enough for an agent to select and invoke the tool correctly without needing additional information about response format or behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (slug, limit, offset) are already described in the input schema with 100% coverage, so the baseline is 3. The description only reinforces these details by mentioning pagination and providing an example slug value ('laliga-easports-2025'), adding no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'EVERY player in a season (≈749) with full Opta stats[] + position + team + opta_id.' This uses a specific resource and scope, distinguishing it from singular player tools like laliga_player_stats or laliga_player. The inclusion of 'EVERY player' implies a bulk listing operation, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for retrieving all players in a season, with pagination via limit/offset and an example. However, it does not explicitly state when not to use this tool or mention alternatives such as laliga_player or laliga_squad. The differentiation is implied by 'EVERY' rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_player_statsARead-onlyIdempotent
One player's Opta stats[] by SLUG.
Returns: {player_stats:{id, name, slug, opta_id, team, stats:[{name, stat}]}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Player slug. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly and idempotent behavior. The description adds valuable behavioral context beyond those: the exact return JSON structure and authentication behavior (works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more). This enriches the agent's understanding without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, leading with the core purpose, then the return format, then auth details. Each sentence serves a distinct purpose with no redundancy or filler, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers the purpose, expected output structure, and authorization context. It does not explicitly differentiate from similarly named tools like laliga_players_stats, but the singular scope is clear. It could mention error behavior for invalid slugs, but this is not critical given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single required 'slug' parameter with 100% coverage, including that it is part of the URL path. The description adds no additional meaning beyond the schema's own description, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'One player's Opta stats' identified by slug. It distinguishes from sibling tools like laliga_players_stats (plural) by emphasizing singular usage, and the inclusion of the return structure (player_stats with id, name, slug, opta_id, team, stats) reinforces the resource being retrieved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving stats for a single player via slug, and notes the slug requirement. However, it does not explicitly mention when to use this tool instead of similar siblings like laliga_players_stats or laliga_player, nor does it provide alternative guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_roundsARead-onlyIdempotent
Rounds / matchweeks structure for a season (gameweeks, groups).
Returns: {total, rounds:[{id, slug, name, position, num_gameweeks, gameweeks, has_groups, groups}]}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Subscription slug. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations by stating the auth requirement: 'works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.' It also discloses the return structure. These details complement the readOnlyHint, openWorldHint, and idempotentHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficient: a one-line purpose statement, a concise return type block, and an auth note. Every element earns its place, with no redundancy or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, the description covers the purpose, return shape (compensating for the lack of an output schema), and auth behavior. It does not explain edge cases like invalid slug handling, but given the schema covers the parameter and annotations confirm safety, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single parameter 'slug' with 100% description coverage, explaining it as 'Subscription slug. Required — part of the URL path.' The description provides no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: "Rounds / matchweeks structure for a season" and includes the return shape, distinguishing it from sibling tools like laliga_matches or laliga_standing. However, it lacks an explicit verb such as 'get' or 'list', opening with a noun phrase rather than a direct action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention scenarios where this is preferred over laliga_matches, laliga_competition, or other related tools, nor does it state any exclusions. The only extra context is auth behavior, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_squadARead-onlyIdempotent
A club's CURRENT squad — each entry has person (name, date_of_birth, country, height), photos, position id, shirt_number, opta_id, loan status. (The subscription arg is required by the API but the roster returned is the current one, not season-historical.)
Returns: {total, squads:[{id, opta_id, person:{name, date_of_birth, country, height}, photos, position, shirt_number, role, current, loan}]}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Team slug (e.g. real-madrid). Required — part of the URL path. | |
| subscription | Yes | Subscription slug (required by the API; e.g. laliga-easports-2025). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, openWorldHint, and idempotentHint. The description adds value beyond these by disclosing auth behavior ('works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set') and clarifying that the required subscription parameter does not change the current-roster scope. It also provides the return structure, which is useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a definition of the returned data, a return-format structure, and an auth note. Each sentence is purposeful, with no redundancy or filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with only two parameters and no output schema, the description covers everything needed: what the tool returns (with nested fields), the required parameters' roles, auth requirements, and a clarification about the subscription argument. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, so baseline is 3. The description adds semantic value by explaining that the subscription argument is required but does not affect the historical/current scope, and it clarifies the slug with an example in the schema. This extra context goes beyond the bare parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'A club's CURRENT squad' with a list of player attributes (person, photos, position, shirt_number, etc.). It distinguishes from season-historical data by explicitly noting the roster is current, not historical, and the tool name 'laliga_squad' aligns with this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by emphasizing 'CURRENT squad' and clarifying the subscription parameter, but it does not explicitly mention when to use this tool over sibling tools like laliga_team or laliga_matches. No alternatives are named or exclusions given, leaving usage guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_standingARead-onlyIdempotent
Full league table for a season — 20 entries with played/won/drawn/lost/goals_for/goals_against/goal_difference/points/position + full team object (shield, colours).
Returns: {total, standings:[{position, previous_position, played, won, drawn, lost, goals_for, goals_against, goal_difference, points, team:{id, slug, name, shortname, opta_id, shield}}]}
Example: 2025/26 LALIGA EA SPORTS table {"slug": "laliga-easports-2025"}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Subscription slug (e.g. laliga-easports-2025). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses the exact return shape, the fact that it returns 20 entries, and the authentication behavior. It also provides a concrete example of the input. This adds meaningful behavioral context such as what data is included and that no key is required, though it does not cover error handling or pagination (not needed for a single-table tool).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with labeled sections (Returns, Example, Auth) and is information-dense without being overly verbose. The main purpose is stated in the first sentence, and all subsequent details are relevant. It is slightly long but each part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a detailed return structure, an example input, and auth information. The tool is simple (one parameter, no enums), and the description covers the key aspects needed to invoke it successfully. It could mention how to find valid slugs (e.g., referring to laliga_subscriptions), but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter, including an example slug and explanation that it is part of the URL path. The description's example mirrors the schema's example without adding new semantic detail. Baseline of 3 is appropriate since the schema carries the full weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full league table for a season' with a specific resource (La Liga standings) and enumerates the exact fields returned (played, won, drawn, etc.). The example and return structure make the tool's function unambiguous and distinguish it from other standings tools by confirming it is the complete table for a season.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: to retrieve a full league table for a given season, with an example slug. However, it does not explicitly state when to prefer this tool over alternatives (e.g., pl_standings, seriea_standings) or mention any exclusions. The auth note provides some operational context but not comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_subscriptionARead-onlyIdempotent
One season instance by slug — competition, year, season name, current gameweek, rounds, and teams (the authoritative 20 teams in that season — use this, not laliga_teams, for a season roster).
Returns: {subscription:{id, slug, name, competition, season, season_name, year, current_gameweek, teams:[20 season teams], rounds}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Subscription slug (e.g. laliga-easports-2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description's added value comes from disclosing the return shape (exact subscription object structure) and auth behavior (works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more). This is useful context beyond the annotations, though it could further explain what 'unlocks more' entails 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: first sentence states purpose and key usage guidance, second provides exact return shape, third covers auth. Every sentence serves a distinct purpose with no fluff, and the most critical information (slug-based lookup and teams alternative) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully specifies the return structure, so the agent knows what to expect. It also covers auth prerequisites, the single parameter, and distinguishes from a closely related sibling. For a simple read-only single-resource tool with strong annotations, this description is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the single 'slug' parameter is fully described with an example (laliga-easports-2025 = 2025/26) and required status. The description only reiterates 'by slug' and adds no new semantic detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving a single season instance by slug, listing the exact data fields (competition, year, season name, current gameweek, rounds, teams). It also explicitly differentiates from the sibling laliga_teams by declaring this tool's teams list as 'authoritative' for a season roster, making the tool's unique purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance to use this tool instead of laliga_teams for a season roster, which is a clear when-to-use/alternative statement. It implies use for a specific season subscription by slug, but does not explicitly mention when to use the sibling laliga_subscriptions (plural) for listing all seasons, leaving a minor gap in alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_subscriptionsARead-onlyIdempotent
Season instances (a 'subscription' = one competition's season), paginated 20/page. Each has slug, competition, year, current_gameweek, date range.
Returns: {total, subscriptions:[{id, name, slug, competition, year, current_gameweek, date_ini, date_end, rounds}]}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset (20 per page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior, so the description adds extra context: authentication requirements (works without a key, optional key unlocks more) and the exact return structure. This goes beyond the annotations and helps the agent understand side effects and access needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first defines the concept and pagination, the second lists the return fields and auth note. Every sentence carries useful information, with no redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter tool, the description is fully sufficient: it explains the pagination, the return shape in detail, and authentication. The absence of an output schema is compensated by listing the exact fields. No critical information is missing for selecting and invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter 'offset' with a clear description ('Pagination offset (20 per page).'). The description adds minimal extra meaning beyond confirming the pagination size, so it neither improves nor detracts from the schema's coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a paginated list of season instances, clarifying that a 'subscription' equals one competition's season. It distinguishes itself from related 'laliga_competitions' and 'laliga_subscription' by specifying the list-oriented, paginated nature and the fields returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for retrieving multiple season instances via pagination, but it does not explicitly state when to use this over alternatives like laliga_subscription (singular) or laliga_competitions. No exclusions or alternative guidance is provided, leaving the decision to the agent based on the plural/paginated framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_teamARead-onlyIdempotent
One team by SLUG — club info, colours, foundation, socials, competitions, venue.
Returns: {team:{id, slug, name, shortname, opta_id, club, color, foundation, competitions, last_main_competition}}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Team slug (e.g. real-madrid, barcelona, atletico-de-madrid). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds meaningful context beyond these by disclosing the auth requirement ('works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set') and the exact return shape. This supplements the annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, a return structure, and an auth note. No filler or redundant wording; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter team lookup, the description covers the resource, return fields, and auth behavior. The only notable omission is not pointing users to a tool like laliga_teams for discovering slugs, but this is a minor gap given the schema's examples and the simple scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'slug' parameter, including examples and a note that it is part of the URL path. The description's mention of 'by SLUG' and the returned slug field adds little semantic value beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (one La Liga team) and the lookup method (by SLUG), enumerating the content delivered (club info, colours, foundation, socials, competitions, venue). It distinguishes this singular team endpoint from its plural sibling laliga_teams and other La Liga tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One team by SLUG' implies the tool is for fetching a specific team, but it does not explicitly state when to prefer it over alternatives like laliga_teams or how to obtain a valid slug. There is no mention of exclusions or alternate tools, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
laliga_teamsARead-onlyIdempotent
Global team directory across all competitions (~1541), paginated — use it to resolve a team's slug/id/opta_id. NOTE: NOT season-scoped; for the 20 teams in a season read laliga_standing or laliga_subscription (its embedded teams).
Returns: {total, teams:[{id, slug, name, nickname, shortname, boundname, shield, competitions}]} (opta_id present on most; join via it where available)
Example: First page of the team directory {"limit": 20}
Auth: works without a key; LALIGA_SUBSCRIPTION_KEY unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| offset | No | Pagination offset (total ~1541). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, openWorld, and idempotent hints, so the bar for additional disclosure is met substantially. The description adds pagination behavior, approximate result count (~1541), return structure, the possibility of missing opta_id, join guidance, and auth requirements (works without key, subscription key unlocks more). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by critical usage caveats, return structure, example, and auth. Every sentence adds value and no extraneous content. Formatting with line breaks improves readability without bloating length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description compensates by specifying the exact return shape: {total, teams:[{id, slug, name, nickname, shortname, boundname, shield, competitions}]}. It also notes the optional opta_id and pagination, covering all relevant aspects for a directory-like list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (limit, offset) are already described as 'Page size' and 'Pagination offset (total ~1541)'. The description reinforces this with an example but does not add new semantic meaning beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a 'Global team directory across all competitions (~1541), paginated' specifically for resolving a team's slug/id/opta_id. It explicitly distinguishes itself from season-scoped tools like laliga_standing and laliga_subscription, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: 'use it to resolve a team's slug/id/opta_id' and what not to use it for: 'NOT season-scoped; for the 20 teams in a season read laliga_standing or laliga_subscription'. This directly names alternatives and gives clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lichess_daily_puzzleARead-onlyIdempotent
The daily puzzle: the position, the solution line, and the game it came from.
Returns: {game:{id, perf:{key, name}, rated, players:[{name, color, rating}], pgn, clock}, puzzle:{id, rating, plays, solution:[uci moves], themes:[str], initialPly}}
Example: Today's puzzle
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent. The description adds the auth requirement ('Auth: none needed') and explicitly lays out the return structure, which goes beyond structured data. It doesn't mention timezone or reset behavior, but that's minor given the safety profile is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured with a summary, return format, example, and auth line. The 'Example' field is vague but not harmful. It earns its place without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing all return fields under 'Returns:' with types and examples. It could clarify some field semantics (e.g., initialPly) but is largely complete for a parameterless daily puzzle fetcher.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. Per guidelines, baseline for 0 params is 4; the description doesn't need to add parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as the daily puzzle and lists its components (position, solution line, source game), and the 'Returns' section clarifies it's a retrieval operation. However, it lacks a direct verb like 'Get' and does not explicitly distinguish itself from other chess tools, though it's the only daily puzzle tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the daily puzzle is needed, and the example 'Today's puzzle' suggests a simple call. However, there is no explicit guidance on when to use this vs. other Lichess tools, no exclusions, and no mention of daily update timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lichess_leaderboardARead-onlyIdempotent
Top-rated players for one time control or variant.
Returns: {users:[{id, username, title, perfs:{:{rating, progress}}, online}]}
Example: Top 10 blitz players {"count": 10, "perf": "blitz"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| perf | No | Time control or variant. One of: ultraBullet, bullet, blitz, rapid, classical, chess960, crazyhouse, antichess, atomic, horde, kingOfTheHill, racingKings, threeCheck. | blitz |
| count | No | How many players (max 200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, establishing a safe read operation. The description adds valuable context: the exact return format ({users:[...]}) and explicitly states 'Auth: none needed.' This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, a return format snippet, a concrete example, and an auth note. Every sentence delivers useful information with no fluff, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with complete schema descriptions and strong annotations, the description is fully adequate. It includes the return shape, an example, and auth requirements, so an agent has all necessary information to call it correctly without needing an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions and defaults for both 'perf' and 'count', so the description doesn't need to repeat them. The example re-illustrates the parameters but doesn't add new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns top-rated players for a specific time control or variant, using a specific verb ('Top-rated players') and the resource (lichess leaderboard). It distinguishes from the sibling 'lichess_leaderboards_all' by focusing on a single perf, though it doesn't explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the example 'Top 10 blitz players' with count and perf, indicating how to request a specific leaderboard. However, it doesn't provide explicit guidance on when to use this tool versus siblings like lichess_leaderboards_all, nor 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.
lichess_leaderboards_allARead-onlyIdempotent
Top 10 for EVERY time control and variant in a single call.
Returns: {bullet:[{id, username, title, perfs}], blitz:[…], rapid:[…], classical:[…], chess960:[…], atomic:[…], …} — one array per perf
Example: Every leaderboard at once
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide read-only and idempotent hints. The description adds useful context by stating that no authentication is needed and by disclosing the Top 10 limitation and the return structure, which go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. It includes a purpose statement, return shape, example, and auth note, though the example line is slightly redundant with the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description covers all necessary aspects: purpose, return format, example, and authentication. It is sufficiently complete for an agent to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter detail to provide. The baseline for zero-parameter tools is 4, and the description correctly abstains from irrelevant parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the top 10 for every time control and variant in one call. It uses a specific verb and explicit resource scope, and distinguishes itself from the sibling lichess_leaderboard by emphasizing the comprehensive single-call nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through phrases like 'in a single call' and 'Every leaderboard at once,' but it does not explicitly mention alternatives or when not to use this tool. It provides context but lacks explicit when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lichess_tournamentsARead-onlyIdempotent
Arena tournaments — currently running, finished and upcoming.
Returns: {created:[{id, fullName, startsAt, variant, clock, nbPlayers}], started:[…], finished:[…]} — three lists by state, NOT one
Example: Arena tournaments by state
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description adds value by detailing the exact return shape (three lists by state, not one) and noting that no authentication is required, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, a returns section with exact field names, an example, and an auth note. Every sentence serves a purpose with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema), the description is complete. It explains what the tool returns, the structure of each list, the states, and authentication, covering all necessary information for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description doesn't need to explain input semantics. It correctly omits any parameter details, and the baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns Arena tournaments in three states (currently running, finished, upcoming) and explicitly provides the return structure. This distinguishes it from other Lichess tools like user or leaderboard endpoints, so an agent can easily identify its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to fetch all arena tournaments across states. It provides an example and notes auth is not needed, but it doesn't explicitly mention alternatives or conditions when not to use it, making it clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lichess_userARead-onlyIdempotent
A Lichess player: ratings per time control and variant, games played, play time and profile.
Returns: {id, username, title, perfs:{bullet:{rating, games, rd, prog}, blitz:{…}, rapid:{…}, classical:{…}, correspondence:{…}, puzzle:{…}}, createdAt, seenAt, playTime:{total, tv}, count:{all, rated, win, loss, draw}, profile:{…}, patron, streamer} — no single 'rating': read perfs..rating
Example: One player's profile and ratings {"username": "thibault"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Lichess username (case-insensitive). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond annotations: 'Auth: none needed' and the caveat that there is no single 'rating' field, but perfs.<timeControl>.rating. It does not duplicate annotation info, and no contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a brief purpose statement, a detailed but justified return structure, a clear example, and a short auth note. Every sentence serves a purpose, and it is front-loaded with the core intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool, the description is thoroughly complete. It provides the entire return shape, a concrete example, an auth note, and an important caveat about accessing ratings. This compensates for the absence of an output schema and gives the agent everything needed to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the 'username' parameter (required, case-insensitive, part of URL path). The description adds a concrete example ('thibault'), which helps the agent understand expected input beyond the schema description. This exceeds the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving a single Lichess player's data: ratings per time control, games played, play time, and profile. The 'Returns:' section and example ('One player's profile and ratings') unambiguously define the purpose, and it is distinct from sibling tools like lichess_leaderboard or lichess_users_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via the example and the required 'username' parameter: use when you need a specific player's profile. It provides clear context (single-player lookup) but does not explicitly mention alternatives or when-not-to-use scenarios, which would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lichess_users_statusARead-onlyIdempotent
Online/playing status for up to 50 users in one call — who is available right now.
Returns: [{id, name, title, online, playing, streaming, patron}] (top-level array)
Example: Status of two players {"ids": ["thibault", "neio"]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Up to 50 usernames, comma-joined. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful context: no auth required, a hard 50-user limit, and an explicit return shape. This goes beyond the annotation metadata without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly packed: one headline sentence, return format, a minimal example, and an auth note. Every line earns its place and the most important info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only batch status tool, this is largely complete: it specifies the limit, return fields, example input, and auth status. It does not cover edge cases like invalid usernames or over-limit behavior, but given the annotations and simplicity, the coverage is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single param fully, so baseline is 3. The description adds a concrete example showing ids as an array, which clarifies usage. Note: the schema description says 'comma-joined' while the example shows an array, which is slightly confusing, but the example still adds practical meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Online/playing status for up to 50 users in one call — who is available right now,' which clearly identifies the resource (Lichess user statuses), the action (fetching status), and the batch scope. It also lists the exact return fields, distinguishing it from single-user tools like lichess_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in one call' and the 50-user cap establish when to use this tool: when you need status for multiple users at once. It also states 'Auth: none needed,' clarifying prerequisites. However, it does not explicitly name alternatives or say when not to use it, so it stops short of a full when/when-not guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_groupsARead-onlyIdempotent
List every tool group across all providers, which are currently enabled, and each provider's auth requirements (env-var names + required/optional).
On a fresh install (no groups enabled) this is the only functional tool, so the model can guide the user to enable what they want in sportsdata-mcp.yaml.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, which cover the safety and side-effect profile. The description adds value by specifying what is listed (tool groups and auth requirements) and the special fresh-install behavior, complementing the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The first sentence states the purpose precisely, and the second provides essential operational context. Every word contributes meaning, and the structure is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with a rich output schema and clear annotations, the description fully explains what the tool does and when it is particularly useful. It covers the essential context without being verbose, so nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100% (trivially). With no parameters, the baseline is 4 per the rubric. The description does not need to add parameter details and does not attempt to, so this score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List every tool group across all providers, which are currently enabled, and each provider's auth requirements', which is a specific verb+resource+scope. This clearly distinguishes it from sibling tools like list_tools_by_capability that focus on capabilities rather than enabled groups and auth needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case: 'On a fresh install (no groups enabled) this is the only functional tool, so the model can guide the user to enable what they want in sportsdata-mcp.yaml.' This implies when to use the tool, though it does not explicitly contrast with alternatives or state 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.
list_resourcesARead-onlyIdempotent
List all registered MCP resources (capability map, dispatcher catalogues, reference data).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds modest context about resource categories but does not disclose behavior beyond what the annotations and zero-parameter schema make obvious, such as return format or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that immediately conveys the action and scope. The parenthetical examples are brief and useful without adding unnecessary noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema and safe-read annotations, the description is sufficient. It establishes the exhaustive scope ('all registered') and gives examples of what counts as a resource, though it does not mention output shape or caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema is essentially empty, so the baseline of 4 applies. The description adds no parameter-level detail, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all registered MCP resources.' It clearly distinguishes the tool from siblings like list_available_groups and list_tools_by_capability by focusing on 'resources' and illustrating with 'capability map, dispatcher catalogues, reference data.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage ('list all registered resources') but does not explicitly state when to choose this tool over related meta-tools such as list_available_groups or list_tools_by_capability, nor does it provide any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tools_by_capabilityARead-onlyIdempotent
Discover tools by capability — the unit of cross-provider comparison.
Given a slug like 'sport.event_markets', returns every enabled tool exposing it across providers. Pass no argument for the full capability → tools map.
| Name | Required | Description | Default |
|---|---|---|---|
| capability | No | A capability slug, e.g. `sport.fixtures_by_date` or `stats.ladder`. Omit to list every capability with the tools that expose it. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it returns only 'enabled' tools, works across providers, and the default no-argument behavior returns the full capability→tools map. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose statement followed by a clear example and default behavior. Every sentence contributes value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one optional parameter, existing output schema, strong annotations), the description is complete. It covers both invocation modes (with and without the capability argument) and relies on the output schema for return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already provides full parameter documentation. The description only adds a different example slug ('sport.event_markets') and repeats the default behavior, which does not significantly enhance meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: discovering tools by capability, with a specific verb ('returns') and resource ('every enabled tool exposing it across providers'). It distinguishes itself from sibling listing tools by focusing on capabilities and cross-provider comparison, which is unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to find tools exposing a given capability or to list all capabilities. It gives a concrete example slug and explains the no-argument behavior, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_free_agentsARead-onlyIdempotent
Players not on any roster in this league — the pool an add or a waiver claim draws from.
Returns: {freeAgents:{leagueUnit:{unit, player:[{id, contractYear, salary}]}}} — ids only; join to mfl_players for names and to mfl_player_scores for form.
Example: Free-agent running backs {"year": 2026, "L": "10005", "POSITION": "RB"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | freeAgents |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| POSITION | No | Restrict to one position, e.g. RB. Strongly recommended — the unfiltered pool is large. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent traits. The description adds valuable behavioral context beyond this: the exact return structure (ids only, with a join note to mfl_players for names and mfl_player_scores for form), the auth requirement (works without key; MFL_COOKIE unlocks more), and a concrete example. This goes beyond the annotations and helps the agent understand both the response and access restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a one-sentence definition, the return shape, an example, and an auth note. It is front-loaded with the core purpose, and every line carries information without redundancy or fluff. The structure guides the agent from 'what' to 'how' to 'auth' efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool with 6 parameters and no output schema, the description is complete: it defines the resource, gives the exact return format, provides a working example, notes auth variations, and explains how to enrich the ids (join to other tools). Combined with the well-documented schema and annotations, an agent has everything needed to call and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all parameters with 100% coverage, including 'Leave as-is' notes and the strong recommendation for POSITION. The description adds an example usage that clarifies how to combine year, L, and POSITION, and reinforces the recommendation with 'Strongly recommended — the unfiltered pool is large.' This adds marginal value on top of the schema, justifying a score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence precisely defines the tool's purpose: 'Players not on any roster in this league — the pool an add or a waiver claim draws from.' This clearly conveys that it returns free agents, distinguishing it from roster/player lookup tools. The example further reinforces the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by explaining this is the pool for adds/waivers, and the example shows how to filter by position. It does not explicitly name alternatives (like mfl_rosters for rostered players), but the definition of free agents inherently signals when this tool is appropriate, which qualifies as clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_injuriesBRead-onlyIdempotent
The NFL injury report by player id — status and body part, updated daily in season.
Returns: {injuries:{week, timestamp, injury:[{id, status:'Questionable'|'Out'|'IR'|'Inactive'|…, details:'Hamstring', exp_return}]}} — VERIFIED live 2026. id joins to mfl_players.
Example: This week's injury report {"year": 2026}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| W | No | Week. Defaults to the most recent week with data. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | injuries |
| year | Yes | Season year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint, openWorldHint, and idempotentHint, the description adds valuable behavior context: it works without an API key, the MFL_COOKIE unlocks more, and data is updated daily in season. It also reveals that the response is verified live as of 2026. These details go beyond the annotations, though it could explain what 'unlocks more' entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively tight: a one-line purpose, a return shape, an example, and an auth note. It is front-loaded with the core function. However, the phrase 'by player id' is unnecessary and could be removed or clarified, and the ellipsis in the status list adds minor ambiguity, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description provides the return shape and an example, which is helpful. It does not explain all possible statuses (only lists some) or the meaning of 'exp_return', nor does it mention that 'W' defaults to the most recent week (though the schema covers that). The description is adequate but leaves a few minor gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description does not add much parameter-specific information beyond the schema; it provides an example with 'year' and repeats the note about JSON and TYPE being left as-is, which is already in the schema. The ambiguous 'by player id' could mislead about whether a player ID is needed, but that affects purpose more than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (NFL injury report) and the kind of data (status, body part). However, the phrase 'by player id' is ambiguous — it might imply filtering per player, but the required parameter is only 'year', not a player id. This could confuse an agent about the tool's scope, but the overall purpose is still fairly clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus other injury-related tools like mysportsfeeds_injuries or sportsdataio_nfl_injuries. It does not mention any prerequisites, limitations, or contexts where this tool is preferred. The description only gives an example and notes auth, but no when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_leagueARead-onlyIdempotent
League setup: name, roster size, starting-lineup requirements, franchises, divisions, IR and taxi-squad sizes. Read this FIRST — it defines what a legal lineup is.
Returns: {league:{id, name, rosterSize, injuredReserve, taxiSquad, startWeek, endWeek, franchises:{franchise:[{id:'0001', name, owner_name}]}, starters:{count, position:[{name:'QB', limit:'1'}]}, …}}
THE THING YOU NEED: starters defines the legal formation and franchises[].id is the four-digit franchise id every write uses. Roster limits differ per league — never assume a standard shape.
Example: League setup {"year": 2026, "L": "10005"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id (from your league URL). | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | league |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. Does NOT authorise writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description enriches beyond the annotations (readOnlyHint, openWorldHint, idempotentHint) by providing auth details ('works without a key; MFL_COOKIE unlocks more if set'), a caveat about variable roster limits, and identifying the key fields in the return (`starters` and `franchises[].id`). It also gives a concrete example, all of which help agents understand behavior and expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (purpose, returns, key takeaway, example, auth). It is somewhat lengthy but each segment provides necessary information, and the use of headings and the 'THE THING YOU NEED' highlight makes it scannable. It is not overly verbose given the complexity of the return structure it describes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a detailed return structure sample, highlights critical fields, explains auth, includes an example, and warns about variability. It covers all essential aspects an agent needs to call the tool correctly, including linkage to other operations (franchise id for writes). The tool is self-contained for making the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides comprehensive descriptions for all 5 parameters (100% coverage), including the meaning of L, year, and the read-only nature of APIKEY. The description adds an example request (year and L values) but does not significantly enhance the semantic understanding beyond what the schema already conveys. Baseline 3 is appropriate given the schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: league setup details including roster size, starting-lineup requirements, franchises, divisions, and IR/taxi-squad sizes. It also explicitly says 'it defines what a legal lineup is,' making its purpose unambiguous. Among the many mfl_* siblings, this one is distinct as the configuration/league definition tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It instructs to 'Read this FIRST' and explains that it defines legal lineups, implying it should be called before any lineup-based operations. It also warns that 'roster limits differ per league — never assume a standard shape,' reinforcing the need to always use this tool. However, it does not explicitly mention alternatives or when not to use it, though the context of siblings makes it clear this is the league setup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_league_standingsARead-onlyIdempotent
Current standings — record, points for and against, and the league's own standings columns.
Returns: {leagueStandings:{franchise:[{id, h2hw, h2hl, h2ht, pf, pa, vp, …}]}} — the columns vary by league configuration; COLUMN_NAMES=1 tells you what each key means.
Example: Standings with column names {"year": 2026, "L": "10005", "COLUMN_NAMES": 1}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | leagueStandings |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| COLUMN_NAMES | No | 1 also returns the column key → name mapping, in display order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, openWorldHint=true, idempotentHint=true. The description adds meaningful context beyond these: the return shape varies by league configuration, COLUMN_NAMES=1 disambiguates the key meanings, auth works without a key, and a fallback APIKEY parameter exists. This is genuine added value, not tautology.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the purpose, then breaks into Returns/Example/Auth sections. It's economical for the information it carries; could drop a couple of words (e.g., the example block is borderline) but stays justifiable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 6-param tool with full schema coverage, no output schema, and a huge sibling list, the description covers the essentials: what is returned, varying columns, how to interpret them, example invocation, and auth state. Missing an explicit 'alias to sibling' and deeper detail on auth side effects is minor. A cautious agent can call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, giving a baseline of 3. The description adds clarity on COLUMN_NAMES behavior and the auth trick, but the core param semantics (year, L, JSON, TYPE) are already fully specified in the schema; the description mostly restates what 'leave as-is' means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Current standings — record, points for and against, and the league's own standings columns' names a specific verb and resource with concrete content. It clearly distinguishes from generic standings tools (seriea_standings, sportmonks_standings, nhl_standings) by pointing at MFL league configuration and custom columns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an example call, explicit notes on required year/league id, the optional but key COLUMN_NAMES flag, and auth guidance (works without a key; cookie unlocks more). It doesn't explicitly name when not to use it or point to sibling alternatives (e.g., 'for real-league standings use X'), but the MFL fantasy context is clear enough for an agent to route correctly among 600+ siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_live_scoringARead-onlyIdempotent
Live matchup state — each franchise's score, game seconds remaining, and who has yet to play.
Returns: {liveScoring:{franchise:[{id, score, gameSecondsRemaining, playersYetToPlay, playersCurrentlyPlaying}]}} — playersYetToPlay is the honest read on whether a matchup is still live.
Example: Live scores this week {"year": 2026, "L": "10005"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| W | No | Week; defaults to the current one. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | liveScoring |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| DETAILS | No | 1 also returns non-starters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety. The description adds valuable behavioral details: the return structure, the significance of playersYetToPlay, and the auth requirement (works without key; MFL_COOKIE unlocks more). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose, return structure, a key interpretive note, an example, and auth in just a few lines. No wasted words or duplication of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by detailing the return shape and the meaning of a critical field. It includes an example and auth info. It does not mention pagination or default week behavior (though that's in the schema), but for a read-only live-scoring tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 7 parameters are documented in the schema. The description provides an example with year and L but does not add additional meaning beyond what the schema already states. This meets the baseline 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Live matchup state') and enumerates the exact content: each franchise's score, game seconds remaining, and who has yet to play. It distinguishes itself from sibling MFL tools like mfl_player_scores and mfl_schedule by focusing purely on live status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context (live scoring) and an example call, but does not explicitly state when NOT to use it or mention any alternative tools. With many MFL siblings, a note about when to prefer mfl_projected_scores or mfl_player_scores would elevate it. The 'honest read' comment helps interpret output but not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_my_leaguesARead-onlyIdempotent
Every league YOU are in, with your franchise id in each. Needs your cookie. The way to find the ids every other tool wants.
Returns: {leagues:{league:[{league_id, franchise_id, name, url}]}} — franchise_id is YOUR four-digit id in that league, which every write needs. Returns nothing useful without MFL_COOKIE.
Example: My leagues this season {"year": 2026}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | myleagues |
| year | Yes | Season year. Required — part of the URL path. | |
| FRANCHISE_NAMES | No | 1 also returns franchise names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, and idempotentHint, so the read-only nature is covered. The description adds the cookie dependency, the return format, and the note that it works without a key but MFL_COOKIE unlocks more, which goes beyond the annotations. This is valuable context, though the 'more' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it leads with the purpose, then return format, then auth. Each sentence is informative, and the example is nestled in. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only tool: it explains the key output (franchise_id), the required parameter (year), and the authentication requirement. Even without an output schema, the return structure is provided. Nothing needed for correct usage is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage: JSON and TYPE are described as 'Leave as-is,' year is required, and FRANCHISE_NAMES is explained. The description does not add meaning beyond the schema, but it does provide an example with 'year'. Baseline 3 is appropriate since the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: 'Every league YOU are in, with your franchise id in each.' It also clarifies its role as 'The way to find the ids every other tool wants,' distinguishing it from sibling tools. This is a specific verb+resource with clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool: to obtain league and franchise IDs needed by other tools. It also warns that 'Returns nothing useful without MFL_COOKIE' and gives an example call, providing strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_nfl_scheduleARead-onlyIdempotent
The NFL schedule for one week — kickoff times and both teams. Which is what tells you when a player locks.
Returns: {nflSchedule:{week, matchup:[{kickoff (unix seconds), team:[{id, isHome, score, spread}]}]}} — kickoff is the lock time for that game's players. Does NOT update live during games.
Example: Week 1 fixtures {"year": 2026, "W": 1}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| W | No | Week; defaults to the current one. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | nflSchedule |
| year | Yes | Season year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond annotations: it explicitly states the tool does NOT update live during games, and notes the auth requirement (works without a key, MFL_COOKIE unlocks more). This enhances transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and structured with a clear lead sentence, return format, example, and auth note. Every sentence earns its place, though the auth line could arguably be omitted for terseness. It is well-organized and front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return structure, the meaning of key fields, and the non-live behavior, which is sufficient for an agent to use the tool correctly. There is no output schema, so the description compensates well. Minor details like pagination or league context are not mentioned, but they are not essential for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — every parameter has a description in the schema (W, JSON, TYPE, year). The description does not add significant meaning beyond the schema; the example repeats the parameter usage. Since the schema already does the heavy lifting, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the NFL schedule for one week, including kickoff times and both teams, and explicitly identifies kickoff as the lock time for players. It is specific about the resource and purpose, though it does not explicitly differentiate from sibling tools like mfl_schedule, relying instead on the clear 'NFL' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the primary use case (determining when players lock) but does not provide explicit guidance on when to use this tool versus alternatives. It implies usage context but lacks direct exclusions or named alternatives, which is a gap given the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_pending_tradesBRead-onlyIdempotent
Trades offered to you, and trades you have offered. Needs your cookie.
Returns: {pendingTrades:{pendingTrade:[{trade_id, offeringteam, willGiveUp, willReceive, expires}]}} — trade_id is what a response quotes. Draft picks appear as DP_/FP_ tokens and blind-bid dollars as BB_.
Example: What is on the table {"year": 2026, "L": "10005"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | pendingTrades |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| FRANCHISE_ID | No | Commissioners only: whose pending trades to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds useful behavioral context: the need for a cookie, the behavior that trade_id is quoted in responses, and the token representation for draft picks and blind-bid dollars. It doesn't contradict annotations and provides some depth beyond them, though not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized, with clear sections for purpose, return format, example, and auth. It front-loads the primary purpose and includes only relevant details. Every sentence contributes value, making it efficient without being truncated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema coverage, the description provides a return structure, an example, and auth notes, which is sufficient for an agent to invoke it correctly. The only gap is the lack of usage guidance, but that's already penalized in usage_guidelines. It doesn't need an output schema since the return structure is spelled out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds a concrete example with year and L, but does not provide additional semantic detail beyond what the schema gives. It mentions trade_id in the output, which is not parameter-related. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns trades offered to you and trades you have offered, which unambiguously identifies the resource and action (retrieval). It differentiates from sibling MFL tools by focusing on pending trades, though it doesn't explicitly use a verb like 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites beyond cookie/auth, and no exclusion criteria. The example shows a call but does not explain when an agent should choose this tool over other MFL tools like mfl_rosters or mfl_transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_playersARead-onlyIdempotent
Every player MFL knows: id, name, position, NFL team. The id translation table every other MFL tool depends on. LARGE.
Returns: {players:{timestamp, player:[{id, name:'Last, First', position, team}]}} — id is MFL's own player id and is what every roster, lineup and waiver call speaks. name is 'Surname, Firstname'. VERIFIED live 2026.
The full table is thousands of players; prefer PLAYERS= or SINCE= once you have ids.
Example: Look up three players by id {"year": 2026, "PLAYERS": "13593,14208,15029"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | players |
| year | Yes | Season year, e.g. 2026. Required — part of the URL path. | |
| SINCE | No | Unix time; return only players changed since then. The cheap way to stay current. | |
| DETAILS | No | 1 adds height, weight, DOB, college and draft info — several MB. Omit unless you need it. | |
| PLAYERS | No | Specific player ids, comma-separated — far smaller than the full table. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds meaningful behavioral context beyond annotations: it warns the tool is LARGE (thousands of players), describes the exact return structure, flags data as 'VERIFIED live 2026,' and explains auth behavior (no key needed, cookie unlocks more). It also gives a concrete example of a selective call. This substantially enriches what an agent knows about side effects and data freshness, though it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and well-structured: a one-line summary, a return-format section, efficiency guidance, a concrete example, and an auth note. Each segment earns its place, and the most critical facts (what it returns, that it's large) are front-loaded. It is slightly longer than strictly necessary but avoids verbosity. The use of line breaks and bolded labels aids scanning. Loses a point for minor redundancy (the return object is restated using inline JSON).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, 1 required, and no output schema, the description is exceptionally complete. It specifies the exact response shape, clarifies the id field's role, provides an efficiency warning and a concrete usage example, and states auth requirements. There is no obvious missing information an agent needs to invoke it correctly. The absence of an output schema is compensated by the returned JSON snippet. This is a model description in terms of completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description provides a worked example using PLAYERS and year, which illustrates parameter usage but does not reveal new semantics beyond the schema. For instance, the schema already explains PLAYERS as 'comma-separated' and SINCE as 'Unix time.' The description reinforces the efficiency rationale but adds only marginal value. The return-shape explanation is not parameter-level. Thus 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of what the tool returns — 'Every player MFL knows: id, name, position, NFL team' — and immediately frames it as 'The id translation table every other MFL tool depends on.' This clearly distinguishes it from sibling MFL tools like mfl_rosters or mfl_free_agents, which consume these ids. The verb is implicit but unambiguous: it retrieves the complete player list or specific players by id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: this is the id translation table for MFL, so an agent knows to call it first to obtain ids for subsequent roster, lineup, or waiver calls. It also advises efficiency: 'prefer PLAYERS= or SINCE= once you have ids.' While it doesn't explicitly say 'use mfl_rosters instead of this for rosters,' the role is clear enough. Auth guidance ('works without a key; MFL_COOKIE unlocks more') also informs when to use it. Slight gap: no explicit when-not-to-use vs. other MFL tools, but the framing is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_player_scoresARead-onlyIdempotent
Fantasy points under THIS league's scoring rules — for a week, year-to-date, or a weekly average. Rostered players and free agents alike.
Returns: {playerScores:{playerScore:[{id, score, isAvailable}]}} — score is in THIS league's scoring, so it is comparable across your own players and the free-agent pool, and not comparable to any other league.
Example: Season-to-date scores for a shortlist {"year": 2026, "L": "10005", "W": "YTD", "PLAYERS": "13593,14208"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id — scoring is league-specific, which is the point of this endpoint. | |
| W | No | Week number, 'YTD' for the season so far, or 'AVG' for a weekly average. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | playerScores |
| year | Yes | Season year. Required — part of the URL path. | |
| COUNT | No | Cap the number of players returned. | |
| RULES | No | 1 also returns the scoring-rule breakdown behind each total. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| PLAYERS | No | Restrict to these player ids. Strongly recommended. | |
| POSITION | No | Restrict to one position. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: the exact return structure, the league-specific comparability caveat, the auth requirements (works without key, MFL_COOKIE unlocks more), and an example call. No contradictions with annotations. It does not cover rate limits or data freshness, but the annotations cover the safety profile, so this is well-rounded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by return format, an example, and auth note. It is moderately long but every sentence adds value (purpose, structure, example, auth). The structure is logical and the example is practical, though the auth line could be seen as separate but is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters (all described in schema), annotations cover safety, and the description provides the return structure, an example, and auth details, it is sufficiently complete for an agent to invoke correctly. It lacks pagination and error-handling details, but these are not critical for a read-only endpoint with a clear response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the baseline is 3. However, the description's example uses 'PLAYERS': "13593,14208" (a string) while the schema declares PLAYERS as an array. This directly contradicts the schema and could mislead the agent on how to format the parameter. The example is otherwise helpful for year, L, and W, but this inconsistency undermines clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns fantasy points under a specific league's scoring rules, for a week, YTD, or weekly average, and includes both rostered players and free agents. This differentiates it from sibling tools like mfl_rosters or mfl_free_agents, which list players without scores. The verb and resource are precise and the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and that scores are league-specific and comparable across players, but it does not explicitly state when to use this instead of other MFL score-related tools (e.g., mfl_projected_scores for projections, mfl_live_scoring for live scores). There is no mention of alternatives or exclusions, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_projected_scoresARead-onlyIdempotent
Projected fantasy points for named players under this league's rules — the forward-looking number a lineup decision needs.
Returns: {projectedScores:{playerScore:[{id, score}]}} — projections come from a third party (fantasysharks) run through the league's scoring. They are an input, not a forecast to quote as fact.
Example: Project two players for the upcoming week {"year": 2026, "L": "10005", "PLAYERS": "13593,14208"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| W | No | Week; defaults to the upcoming one. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | projectedScores |
| year | Yes | Season year. Required — part of the URL path. | |
| COUNT | No | Cap the number returned. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| PLAYERS | Yes | Player ids to project, comma-separated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the tool's safety profile is covered. The description adds valuable context beyond annotations: it discloses the data source (third-party fantasysharks), warns that projections are an input not a forecast, and explains auth behavior (works without key, cookie unlocks more). This exceeds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it opens with a clear purpose, then provides the return format, an example, and auth notes. It is efficient without being overly terse, and the example front-loads practical usage. Slightly longer than strictly necessary given the schema, but each section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters (3 required) and no output schema, the description is complete: it gives the return shape, an example, auth requirements, and a caution about projection reliability. It doesn't explain every parameter, but the schema does. It covers the essentials an agent needs for correct invocation, though it could mention default week behavior more explicitly (though it's in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already has a description (e.g., PLAYERS is 'Player ids to project, comma-separated'). The description adds an example illustrating parameter usage and the default week behavior, but it largely restates what the schema already provides. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool projects fantasy points for named players under a league's rules. It distinguishes itself from related MFL tools like mfl_player_scores by emphasizing 'projected' (forward-looking) versus actual scores, and it explicitly mentions the league context, which clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for lineup decisions needing projections ('the forward-looking number a lineup decision needs') but does not explicitly state when to use it over alternative tools like mfl_player_scores or mfl_live_scoring. It lacks a 'when not to use' clause or named alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_rostersARead-onlyIdempotent
Every franchise's roster, with each player's status (active / IR / taxi) and salary or contract if the league uses them.
Returns: {rosters:{franchise:[{id:'0001', player:[{id, status:'ROSTER'|'INJURED_RESERVE'|'TAXI_SQUAD', salary, contractYear}]}]}} — status is what an IR or taxi move changes. Join id to mfl_players for names.
Example: One franchise's roster {"year": 2026, "L": "10005", "FRANCHISE": "0001"}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| W | No | Roster as it stood in this week; must be <= the upcoming week. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | rosters |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| FRANCHISE | No | Just this franchise's roster, e.g. '0001'. Much smaller. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and variability. The description adds valuable beyond-annotation context: the exact return structure, the meaning of 'status', the conditional presence of salary/contract ('if the league uses them'), and specific auth requirements (works without a key, MFL_COOKIE unlocks more). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded: the main purpose first, then return format, example, and auth note. It avoids redundant fluff and packs necessary details (status enum, conditional fields, auth) into a compact format. Slightly more structure than the minimum, but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and no output schema, the description provides the return structure explicitly, which is crucial for correct use. It covers auth, conditional fields, and a join hint. It doesn't mention error handling or rate limits, but given readOnly annotations, this is acceptable. The example further clarifies usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — every parameter has a description, so the baseline is 3. The description adds a concrete example using year, L, and FRANCHISE, but it doesn't meaningfully elaborate beyond the schema's parameter descriptions (e.g., W or APIKEY are not explained further). The example is helpful but not a major semantic addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every franchise's roster with player status and salary/contract, which is specific. It also mentions joining to mfl_players for names, indirectly distinguishing it from that sibling. However, it doesn't explicitly contrast with other sibling tools like mfl_injuries or mfl_free_agents, so it's not a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool (to get rosters) and a usage hint to join to mfl_players for names, which guides the agent. It doesn't explicitly say when not to use it (e.g., for injuries use mfl_injuries), but the context is clear enough. The example showing FRANCHISE usage also helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_scheduleARead-onlyIdempotent
The fantasy schedule — who you play, and the score for weeks already played.
Returns: {schedule:{weeklySchedule:[{week, matchup:[{franchise:[{id, score, result, isHome}]}]}]}}
Example: This week's matchups {"year": 2026, "L": "10005", "W": 1}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| F | No | Just this franchise's fixtures, e.g. '0001'. | |
| L | Yes | League id. | |
| W | No | One week; omit for the whole season. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | schedule |
| year | Yes | Season year. Required — part of the URL path. | |
| APIKEY | No | Read-only alternative to the cookie. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it states the auth requirement ('works without a key; MFL_COOKIE unlocks more if set') and describes the return shape, which is not in the annotations. This adds value beyond the structured data without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-organized: a one-line purpose, a returns section, an example, and an auth note. It front-loads the core purpose and packs necessary detail without fluff. Slightly verbose due to the inline return structure, but still appropriately sized for a tool with multiple parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema, the description covers the essentials: purpose, return structure, an invocation example, and auth behavior. It does not mention error cases or edge conditions, but the schema covers parameters and the example clarifies typical usage. This is adequate for an idempotent read-only schedule tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter (year, L, W, F, JSON, TYPE, APIKEY). The description only offers an example with year, L, and W, which reinforces but does not extend parameter meaning. This meets the baseline for full schema coverage but adds no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement — 'The fantasy schedule — who you play, and the score for weeks already played.' — naming the verb (get schedule) and the resource (fantasy schedule). This distinguishes it from sibling MFL tools like mfl_league_standings or mfl_player_scores, and from mfl_nfl_schedule which is the NFL schedule, not the fantasy one. The return structure is also summarized, leaving no ambiguity about what the tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or conditions. It provides an example call but no guidance on choosing this over other MFL tools. The purpose is clear enough to infer usage, but explicit routing to alternatives is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mfl_transactionsARead-onlyIdempotent
Completed league transactions — adds, drops, trades, waivers. Filter it: unfiltered is very large.
Returns: {transactions:{transaction:[{type, timestamp, franchise, transaction}]}} — the transaction field is a packed, comma/pipe-delimited string whose meaning depends on type.
Example: This franchise's last week of moves {"year": 2026, "L": "10005", "FRANCHISE": "0001", "DAYS": 7}
Auth: works without a key; MFL_COOKIE unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| L | Yes | League id. | |
| W | No | Only this week. | |
| DAYS | No | Only the last N days. | |
| JSON | No | Leave as-is. | |
| TYPE | No | Leave as-is. | transactions |
| year | Yes | Season year. Required — part of the URL path. | |
| COUNT | No | Cap the number returned. | |
| APIKEY | No | Read-only alternative to the cookie. | |
| FRANCHISE | No | Just this franchise, e.g. '0001'. | |
| TRANS_TYPE | No | One of WAIVER, BBID_WAIVER, FREE_AGENT, TRADE, IR, TAXI, AUCTION_INIT, AUCTION_BID, AUCTION_WON, SURVIVOR_PICK, POOL_PICK. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description adds the precise return structure, explains the tricky packed `transaction` field, covers auth requirements (works without a key, cookie unlocks more), and provides a concrete example. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and the filter warning, then gives return format and example. It's slightly dense with the packed-field explanation but each sentence adds necessary context without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the return structure and an example. It covers filtering, auth, and the meaning of the tricky field. For a 10-param tool, this is impressively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers all 10 params at 100%, but the description adds extra value: explains that JSON and TYPE should be left as-is, demonstrates real usage with an example, and clarifies the packed transaction field's dependency on type. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves completed league transactions (adds, drops, trades, waivers), which is a specific verb+resource. It distinguishes itself from other MFL tools like mfl_rosters or mfl_free_agents by naming the transaction types it covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description warns that unfiltered results are very large, implying the need for filters, and gives an example with FRANCHISE and DAYS. It doesn't explicitly name alternative tools, but the context makes it clear this is for transactions, not rosters or other MFL data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_allstar_ballotARead-onlyIdempotent
All-Star Game ballot candidates for a league + season.
Returns: {league, candidates:[{position, players:[{person, team}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| leagueId | Yes | League id (103=AL, 104=NL). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by specifying the return structure and explicitly stating 'Auth: none needed,' which provides useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose first, then return shape, then auth. Every sentence adds necessary information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only endpoint with no output schema, the description adequately covers the return format and auth requirements. It provides enough information for an agent to use the tool effectively without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described (season as 'Season year' and leagueId with specific AL/NL ids). The description's mention of 'league + season' adds no new meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns All-Star Game ballot candidates filtered by league and season. The verb 'Returns' and resource 'ballot candidates' are specific, and the league/season scoping distinguishes it from siblings like write-ins and final vote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is for retrieving ballot candidates for a specific league and season. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous, making it easy for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_allstar_final_voteARead-onlyIdempotent
All-Star 'Final Vote' candidates for a league + season.
Returns: {league, candidates:[{person, team, position}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| leagueId | Yes | League id (103=AL, 104=NL). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read-only, idempotent, and open-world hints. The description adds valuable behavioral context by specifying the exact return structure ({league, candidates:[...]}) and stating that no authentication is needed, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: the first sentence states the purpose, the second provides the return format, and the third covers authentication. Every sentence carries unique information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-defined parameters and no output schema, the description is complete. It provides the purpose, the exact return shape, and the auth requirement, covering all essential context an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers both parameters with clear descriptions: 'Season year' for season and 'League id (103=AL, 104=NL)' for leagueId. The description only restates 'league + season' without adding new semantic detail, so a baseline score of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns All-Star 'Final Vote' candidates for a league and season, and the 'Returns:' line confirms it provides a list. This distinguishes it from sibling tools like mlb_allstar_ballot and mlb_allstar_writeins by explicitly naming 'Final Vote'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the description indicates the tool is for retrieving Final Vote candidates given a league and season. However, it does not explicitly mention alternatives (e.g., mlb_allstar_ballot for the general ballot) or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_allstar_writeinsARead-onlyIdempotent
All-Star write-in candidates for a league + season.
Returns: {league, writeIns:[{person, team, position}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| leagueId | Yes | League id (103=AL, 104=NL). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds useful context beyond this: it specifies the exact return object structure and explicitly notes that no authentication is needed. This supplements the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, containing only the essential information: what the tool returns, the return shape, and authentication requirement. Every sentence earns its place with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-documented parameters and good annotations, the description provides a clear return schema and auth requirement. It lacks only a brief explanation of what 'write-in candidates' means in the All-Star context, but this is a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, including season year and league id with allowed values (103=AL, 104=NL). The tool description does not add further parameter clarification beyond what the schema already provides, but this is acceptable given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: All-Star write-in candidates for a league and season. It distinguishes this from sibling tools like mlb_allstar_ballot and mlb_allstar_final_vote by focusing specifically on write-ins. The return shape is also specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving write-in candidates for a given league and season, but it does not explicitly state when to use this tool over alternatives such as mlb_allstar_ballot or mlb_allstar_final_vote. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_attendanceARead-onlyIdempotent
Attendance figures for a team or league/season — per-game and aggregate home/away/total gate.
Returns: {records:[{openings, attendanceTotal, attendanceAverage, team, season}], aggregateTotals}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date (YYYY-MM-DD). | |
| season | No | Season year. | |
| teamId | No | Team id — takes precedence over leagueId when both are set. | |
| leagueId | No | League id(s): 103=AL, 104=NL. Defaulted so the tool works without a teamId. | 103,104 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent behavior; the description adds 'Auth: none needed' and a detailed return shape, providing useful context beyond the structured metadata. No contradiction with annotations was found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences cover purpose, return shape, and authentication, with no wasted words. The description is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the return shape and auth requirement, covering essential details for a simple read-only tool. It doesn't explore parameter interaction edge cases, but those are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description echoes the team/league/season scope but adds no syntax or format details beyond what the schema already documents. It marginally reinforces the meaning of teamId and leagueId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving attendance figures for a team or league/season, including per-game and aggregate home/away/total gate data. This specific verb+resource phrasing distinguishes it from sibling tools like mlb_schedule or mlb_teams, which serve different data needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for attendance lookups but does not explicitly state when to use it over alternatives or provide exclusions. Since no sibling tool directly targets attendance, the context is somewhat implied rather than clearly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_awardsARead-onlyIdempotent
Recipients of an award — e.g. MLBHOF (Hall of Fame), ALMVP/NLMVP, ALCY/NLCY (Cy Young), ALROY/NLROY (Rookie of the Year). Discover awardIds with mlb_awards_list.
Returns: {awards:[{id, name, season, player, team, votes}]}
Auth: none needed.
Also answers this: pl_awards.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Filter to one season. | |
| awardId | Yes | Award id (e.g. MLBHOF, ALMVP, NLMVP, ALCY, NLCY, ALROY, NLROY). Required — part of the URL path. | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the description correctly avoids repeating those. It adds value by stating 'Auth: none needed' and providing the exact return structure ({awards:[{id, name, season, player, team, votes}]}). This goes beyond what annotations and schema convey, giving agents a clear picture of the call's behavior and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose and examples, followed by a pointer to the list tool and the return format. The 'Also answers this: pl_awards' line is slightly confusing and lacks context, which slightly detracts from clarity, but overall the structure is efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description covers the essential context: what it returns, how to find award IDs, that no auth is needed, and the return shape. The schema handles parameter details like season filtering and sportId default. The only minor gap is the unclear relationship with pl_awards, but it does not impair an agent's ability to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all three parameters, including examples for awardId (e.g., MLBHOF, ALMVP). The description primarily repeats those examples and doesn't add new semantic meaning beyond what the schema already has. Since the schema does the heavy lifting, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Recipients of an award' with concrete examples (MLBHOF, ALMVP, etc.), and explicitly points to mlb_awards_list for discovering award IDs. This distinguishes it from related tools and leaves no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells you to use mlb_awards_list to find award IDs, which is the key alternative for discovery. It also notes auth is not needed. However, the line 'Also answers this: pl_awards' is ambiguous and does not clarify when to prefer this tool over the dedicated pl_awards sibling. It fails to explicitly state when NOT to use it, but the guidance given is sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_awards_listARead-onlyIdempotent
Award definitions catalogue — every awardId with name, description and sport (the id lookup for mlb_awards).
Returns: {awards:[{id, name, description, sortOrder, sport, active}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Filter by sport (1 = MLB). | |
| leagueId | No | Filter by league (103=AL, 104=NL). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds the return shape and 'Auth: none needed', providing useful behavioral context beyond annotations. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with exactly two sentences: one for purpose and one for return/auth. It is front-loaded with the main purpose and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalogue lookup with no output schema, the description provides the return structure, notes auth is not needed, and implies completeness ('every awardId'). Minor gaps like parameter combination behavior are not critical, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (sportId and leagueId) with defaults and examples, so schema coverage is 100%. The description does not add parameter-level detail, but the schema already handles it, earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an 'Award definitions catalogue' and explicitly positions it as 'the id lookup for mlb_awards', which distinguishes it from the sibling tool mlb_awards. It also lists the fields returned, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the id lookup for mlb_awards' indicates when to use this tool (to resolve award IDs) versus the related tool. While not as explicit as naming an alternative, it effectively guides usage. No exclusions are mentioned, but the tool's simple nature makes this adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_boxscoreARead-onlyIdempotent
Full game boxscore — both teams' batting + pitching lines per player, team totals, officials and top performers.
Returns: {teams:{away:{team, teamStats, players:{ID#:{stats:{batting,pitching}, position}}}, home:{...}}, officials, topPerformers}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id (from mlb_schedule). Required — part of the URL path. | |
| timecode | No | Point-in-time snapshot (YYYYMMDD_HHMMSS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the behavioral safety profile is covered. The description adds meaningful context: a detailed return structure and an explicit 'Auth: none needed' note, which goes beyond what annotations alone provide. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose in the first sentence. The Returns block is structured and informative, and the Auth line is a single useful addition. Every sentence earns its place, with no fluff or repetition of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent boxscore tool with only two parameters, the description is sufficiently complete. The absence of an output schema is compensated by the inline Returns structure, and the auth/parameter requirements are clearly stated. It doesn't cover edge cases like invalid gamePk, but that's not required at this level of detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both gamePk and timecode. The description does not add new parameter semantics beyond the schema, though it references mlb_schedule for gamePk which is also in the schema. Baseline 3 is appropriate when the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a 'Full game boxscore' with specific details (batting/pitching lines, team totals, officials, top performers). This makes it distinct from lighter-weight siblings like mlb_linescore and is a specific verb+resource construction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when a complete boxscore is needed), and references gamePk from mlb_schedule as a prerequisite, but it does not explicitly contrast with alternatives like mlb_linescore or mlb_live_feed. No exclusions or alternative tool names are provided, so the agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_conferencesBRead-onlyIdempotent
Conference catalogue (used by some leagues / amateur levels).
Returns: {conferences:[{id, name, abbreviation, league, hasWildcard}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| conferenceId | No | Filter to one conference. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds that no auth is needed and gives the exact return shape, which is useful context. It does not disclose additional behavior like default parameter handling or pagination, but for a simple read-only catalogue, the added information is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a short title, a return shape, and an auth note. Every sentence provides useful information with no redundancy. It is well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalogue tool with no output schema, the description provides essential information: the return fields and auth requirement. It does not explicitly state default behavior when no filters are provided, but this is inferable from the schema's default null values. Overall, it is sufficiently complete for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for both parameters (season year, filter to one conference), achieving 100% schema coverage. The description adds no further parameter semantics, so it does not go beyond what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it is a 'Conference catalogue' and details the return structure (id, name, abbreviation, league, hasWildcard), making it clear this tool lists conferences. It is distinct from sibling tools like mlb_divisions and mlb_leagues. The phrasing is a noun rather than an explicit action, but the 'Returns' line clarifies it is a retrieval operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives. It notes conferences are 'used by some leagues / amateur levels,' hinting at context, but does not state exclusions or recommend other tools. There is no mention of when to apply the season or conferenceId filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_datacastersBRead-onlyIdempotent
Datacaster (official scorer-adjacent stringer) assignments.
Returns: {roster:[{person, job}]}
Auth: none needed.
Also answers this: pl_match_officials.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date. | |
| sportId | No | Sport id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds that no auth is needed and specifies the return shape, which is helpful. However, it doesn't explain the behavior of the optional parameters or the meaning of the cross-reference to pl_match_officials, so it adds limited insight 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the resource definition. It includes return format and auth info in a clear structure. However, the last line 'Also answers this: pl_match_officials' is ambiguous and could be confusing, slightly detracting from clarity but not from conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is insufficient for a tool with two optional parameters and no output schema. It does not explain how the date and sportId parameters affect the result, nor does it clarify the 'Also answers this' statement. An agent cannot determine whether this tool is appropriate for a given request or how to parameterize it correctly, despite the annotations covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the two parameters (date and sportId), each with a brief description. The tool description adds no additional parameter meaning, which is acceptable given the high schema coverage. The baseline of 3 applies because the schema already documents the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Datacaster (official scorer-adjacent stringer) assignments') and implies a retrieval action by providing the return shape. It also distinguishes from the sibling tool mlb_official_scorers by explicitly labeling datacasters as 'scorer-adjacent.' The name itself clarifies it returns MLB datacasters, so the purpose is clear and well-scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance is provided. The only cross-reference, 'Also answers this: pl_match_officials,' is confusing and does not clarify when to use this tool versus the dedicated pl_match_officials sibling. It does not mention any exclusions or alternative selection criteria, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_divisionsARead-onlyIdempotent
Division catalogue (AL/NL East, Central, West) with their league + sport links.
Returns: {divisions:[{id, name, nameShort, abbreviation, league, sport}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Filter by sport. | |
| leagueId | No | Filter by league. | |
| divisionId | No | Filter to one division. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by explicitly stating the return shape ('Returns: {divisions:[...]}') and that no authentication is needed, providing useful behavioral details 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very brief and well-structured: a summary line, a returns line, and an auth note. Each element is necessary and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalogue tool, the description provides the output schema and auth requirements, and the schema covers parameter purposes. It lacks parameter usage examples, but the simplicity of the tool and the presence of annotations make it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all three parameters with basic descriptions ('Filter by sport', etc.), which gives 100% schema coverage and a baseline of 3. The tool description does not elaborate on parameter semantics, leaving the schema's generic filters as the only guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as a division catalogue with specific content (AL/NL East, Central, West) and league/sport links, distinguishing it from sibling tools like mlb_teams or mlb_leagues. However, it lacks an explicit verb like 'List' or 'Get,' relying on the noun 'catalogue' to imply the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as mlb_conferences or mlb_leagues. The description simply states what it returns without any context on typical use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_draftARead-onlyIdempotent
MLB Rule 4 draft results for a year — picks with player, school/team, position and signing info. Filter by round.
Returns: {drafts:{draftYear, rounds:[{round, picks:[{pickNumber, person, team, school, position}]}]}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Draft year (e.g. 2024). Required — part of the URL path. | |
| limit | No | Max picks. | |
| round | No | Filter to one round. | |
| teamId | No | Filter to picks by one team. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, open-world, and idempotent. The description adds value by disclosing that no authentication is needed and by providing the exact return structure, which is especially helpful given the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, with the core purpose in the first sentence, return format in the second, and auth in the third. It is concise, front-loaded, and contains no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes the return shape, auth requirements, and the key filter option, which together with the thorough schema and annotations provides a sufficiently complete picture for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have full schema descriptions (100% coverage), so the description does not need to compensate. It adds minor reinforcement with 'Filter by round' but does not introduce additional semantic nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning MLB Rule 4 draft results for a given year, including specific pick details (player, school/team, position, signing info). It distinguishes itself from related tools like mlb_draft_prospects by specifying 'results' and 'for a year'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the primary filter capability ('Filter by round') and implies the need for a year, providing clear context for use. However, it does not explicitly mention alternatives or when not to use this tool, so it falls just short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_draft_prospectsBRead-onlyIdempotent
Draft prospects for a year (the pre-draft prospect board).
Returns: {prospects:[{id, rank, person, school, position}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Draft year. Required — part of the URL path. | |
| limit | No | Max prospects. | |
| round | No | Filter to a round. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, which cover the safety profile. The description adds useful return shape information and confirms no auth is needed, but does not disclose any further behavioral traits such as pagination, ordering, or potential errors. This adds some value beyond annotations but is not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: one sentence of purpose, one line for return shape, and a short auth note. Every element earns its place, with no redundancy or wordiness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (3 parameters, no output schema), the description includes the return shape, which is essential. Combined with good schema descriptions and annotations, the agent has enough context to invoke it correctly. It lacks details like default limit behavior or interpretation of 'round', but these are minor given the schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter adequately described ('Draft year. Required — part of the URL path.', 'Max prospects.', 'Filter to a round.'). The description itself does not add any extra meaning about parameters beyond what the schema already provides, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns draft prospects for a year, specifically the pre-draft prospect board. It identifies the resource (prospects) and the scope (by year). However, it does not differentiate from the sibling tool 'mlb_draft' which is also MLB draft related, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'mlb_draft' or other MLB prospect tools. It only mentions that no authentication is needed, which is not a usage guideline. There is no mention of typical use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_free_agentsARead-onlyIdempotent
Free agents for a season — players and their from/to-team signing info.
Returns: {freeAgents:[{player, originalTeam, newTeam, dateSigned, dateDeclared, position]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | Sort order. | |
| season | Yes | Season year. | |
| leagueId | No | League id(s): 103=AL, 104=NL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds value by disclosing the exact return structure ({freeAgents:[...]}) and stating 'Auth: none needed,' which are behavioral details not captured by the annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences cover purpose, return format, and auth requirement, with no filler. Front-loaded with the key purpose statement. A minor bracket typo in the return shape ('position]}]') slightly detracts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query tool with rich annotations (read-only, idempotent, open-world), full schema coverage, and explicit return format in the description, this is largely complete. The main gap is lack of pagination/result-count behavior, but this is acceptable for a straightforward list tool. Auth requirement and return shape compensate for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (season, order, leagueId) have descriptions in the schema with 100% coverage, so the description need not repeat them. The description's 'for a season' aligns with the required season parameter, and leagueId's schema description ('103=AL, 104=NL') already provides semantic meaning. The description adds no parameter-specific detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: retrieving free agents for a season with player and from/to-team signing info. The resource (free agents) and scope (season) are stated, though the verb is implied ('returns') rather than explicit. It does not explicitly distinguish from similar MLB info tools like mlb_transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as mlb_transactions or mlb_people_changes. The 'for a season' phrase provides scope context but no exclusions, prerequisites, or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_game_changesARead-onlyIdempotent
Games changed since a timestamp — a polling helper to detect updated games.
Returns: {totalItems, dates:[{games:[{gamePk, gameDate}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Trim the response to these fields. | |
| sportId | No | Sport id (1 = MLB). | |
| updatedSince | Yes | ISO timestamp (e.g. 2025-09-01T00:00:00Z). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return shape ({totalItems, dates:[{games:[{gamePk, gameDate}]}]}) and states 'Auth: none needed,' adding context beyond the annotations. It does not contradict the readOnlyHint, openWorldHint, or idempotentHint annotations, and the polling behavior is explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise: one purpose sentence, a return shape, and an auth note. All content is necessary, front-loaded, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with fully documented parameters and a return shape provided in the description. The only minor gaps are that it doesn't define what counts as a 'change' or mention any pagination/limits, but these are not essential for a minimal polling helper given the open-world hint and lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters with descriptions and an example timestamp, achieving 100% schema description coverage. The description adds no additional parameter-level detail beyond restating the 'since a timestamp' concept, so the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Games changed since a timestamp — a polling helper to detect updated games.' It uses specific verbs (poll, detect) and a specific resource (games changed since timestamp), and the polling helper framing distinguishes it from other MLB tools like schedule or score endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly labels it as a 'polling helper to detect updated games,' providing clear context for when to use it (repeated checks for game updates). It does not name alternatives or exclusions, such as when to prefer mlb_schedule or mlb_game_changes over related endpoints, but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_game_contentARead-onlyIdempotent
Editorial / media content for a game — highlights, recap, media, and (when present) the box-score-and-storylines bundle.
Returns: {editorial, media, highlights, summary, gameNotes}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent hints, the description adds useful behavioral details: it specifies the return keys ({editorial, media, highlights, summary, gameNotes}), states that auth is not needed, and notes that the box-score-and-storylines bundle is included only when present. This helps an agent understand the response shape and conditional data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two short sentences plus a return signature and auth note. It front-loads the core purpose and the return structure without any filler or redundant schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single documented parameter, no output schema, and strong annotations, the description provides a complete picture for a simple content-read tool. It includes the return keys and auth requirement, which compensates for the lack of an output schema. A slightly deeper explanation of the content structures would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the only parameter (gamePk) with 100% coverage, including its type, requirement, and that it's part of the URL path. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving editorial/media content for a game, specifically naming highlights, recap, media, and the optional box-score-and-storylines bundle. It distinguishes this from statistical or live-feed tools by focusing on 'editorial / media content.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (when needing game editorial/media content) and what it returns, but does not explicitly mention alternatives or when not to use it. Since the domain is clear and distinct from sibling tools like mlb_boxscore or mlb_live_feed, no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_game_context_metricsARead-onlyIdempotent
Context metrics for a game — leverage, win-probability and run-expectancy context for the current/most-recent state.
Returns: {game, leverageIndex, homeWinProbability, awayWinProbability}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| timecode | No | Point-in-time snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: it states the exact return object shape and explicitly notes that no authentication is needed. It also clarifies the temporal scope ('current/most-recent state'), which helps set expectations. With readOnlyHint and idempotentHint already present, this extra context is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose in the first sentence, return shape in the second, and auth in the third. Every sentence contributes value without redundancy or filler, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with full schema coverage and clear annotations, the description covers the return contract, temporal scope, and auth requirement. The main gap is the lack of guidance on how this tool relates to overlapping siblings, but the core context is sufficiently complete for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents both parameters (gamePk required, timecode optional) with descriptions, so the baseline applies. The description's mention of 'current/most-recent state' hints at timecode semantics but does not add meaningful extra detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides context metrics for a game, listing specific metric types (leverage, win-probability, run-expectancy) and scope ('current/most-recent state'). While it is clear, it does not explicitly differentiate from the sibling tool mlb_game_win_probability, which likely overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like mlb_game_win_probability or mlb_live_feed. It neither specifies use cases nor exclusions, leaving the agent to infer the appropriate context from the name and return fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_game_paceARead-onlyIdempotent
Game-pace / tempo metrics for a season (pitches per game, time of game, etc.), optionally by team.
Returns: {sports:[{...pace}], teams:[{team, ...pace}], leagues:[...]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| sportId | No | Sport id (1 = MLB). | |
| teamIds | No | Filter to team(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return shape ({sports, teams, leagues}) and explicitly states no authentication is required. While annotations already declare readOnlyHint, openWorldHint, and idempotentHint, the description adds concrete output structure and auth details, contributing value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one sentence for purpose, one for return format, and one for auth. Every sentence contributes meaningful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (3 params, no output schema), and the description provides a sufficient return structure, making output predictable. Combined with annotations for read-only/idempotent behavior, the description is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all three parameters (season, sportId, teamIds). The description's mention of 'optionally by team' aligns with the teamIds parameter but adds no additional syntax or behavioral detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns game-pace/tempo metrics (pitches per game, time of game) for a season, optionally filtered by team. This is specific and distinguishes it from sibling tools like mlb_schedule or mlb_standings by naming the exact metric domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when season-level pace metrics are needed, but it provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions. It gives clear context (season, optional team filter) but does not name alternative tools or state 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.
mlb_game_uniformsARead-onlyIdempotent
Uniforms worn in one or more games.
Returns: {uniforms:[{gamePk, home:{...}, away:{...}}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePks | Yes | Game id(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds a helpful 'Auth: none needed' note and a return structure example, but discloses no other behavioral traits such as pagination, error behavior, or empty result handling. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a short purpose statement, a return example, and an auth note. Every sentence adds value, and the most important information is front-loaded. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with annotations and a single parameter, the description includes a return example and auth requirement, making it reasonably complete. It lacks comparison to sibling tools and edge-case hints, but the minimal nature of the tool and existing schema/annotations cover most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes gamePks as 'Game id(s).' with 100% coverage. The description implies the parameter refers to one or more games but adds no additional semantic detail such as accepted formats, limits, or specific game ID types. Baseline for high schema coverage is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Uniforms worn in one or more games', which identifies the specific resource (uniforms) and action (retrieving for games). It also distinguishes itself from sibling mlb_team_uniforms by focusing on game-based lookup rather than team-based lookup. The return shape provides further clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like mlb_team_uniforms or mlb_schedule. The description only states what it does and gives an auth note, but does not mention suitable scenarios, exclusions, or related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_game_win_probabilityARead-onlyIdempotent
Win-probability time series for a game — WP after each play, with leverage index.
Returns: [{atBatIndex, homeTeamWinProbability, awayTeamWinProbability, leverageIndex, homeTeamWinProbabilityAdded}] (top-level array)
Auth: none needed.
Also answers this: espn_core_call.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| timecode | No | Point-in-time snapshot (YYYYMMDD_HHMMSS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds valuable context by stating 'Auth: none needed' and clearly outlining the return format as a top-level array with specific fields. This goes beyond the annotations and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the main purpose stated first, followed by return format and auth. The inclusion of 'Also answers this: espn_core_call' is cryptic and somewhat distracting, preventing a perfect score for structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explicitly lists the return fields, which is sufficient for a simple read-only tool. Combined with the annotations and parameter schema, the description covers auth, data shape, and safety. The only minor gap is the ambiguous cross-reference to espn_core_call, which adds slight confusion rather than completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (gamePk and timecode), so the schema already fully documents them. The description does not add any additional meaning or context for the parameters, such as format examples or relationships between them. Thus, it neither improves nor harms the schema's clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing a win-probability time series with leverage index after each play. It specifies the return fields (atBatIndex, homeTeamWinProbability, awayTeamWinProbability, leverageIndex, homeTeamWinProbabilityAdded), which distinguishes it from other MLB tools like mlb_boxscore or mlb_playbyplay. However, it lacks an explicit verb like 'get' or 'retrieve', so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool rather than alternatives. The only cross-reference is the cryptic statement 'Also answers this: espn_core_call', which is ambiguous and does not provide clear when-to-use or when-not-to-use criteria. The reader must infer usage solely from the data description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_high_lowARead-onlyIdempotent
High / low stat records for an org level — top and bottom performances for a sortStat in a season.
Returns: {highLow:[{statType, splits:[{stat, player|team}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Top-N. | |
| season | Yes | Season year. | |
| orgType | Yes | Org level for the records. One of: player, team, division, league, sport. Required — part of the URL path. | |
| gameType | No | Game type code. | |
| sortStat | Yes | Stat to rank by (e.g. 'homeRuns'). See mlb_meta(type='statTypes'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value beyond annotations by specifying the return structure ({highLow:[...]}) and explicitly stating 'Auth: none needed.' It also clarifies the behavior as 'top and bottom performances,' providing useful behavioral context. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded. It opens with the core purpose, followed by the return shape and auth note, with no filler. Every sentence earns its place, and the structure is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and relies on annotations, the description is fairly complete. It provides the return shape, auth requirement, and a clear statement of what the tool does. It could elaborate on edge cases or parameter interactions, but the combination of schema coverage, annotations, and description is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including descriptions for sortStat (with reference to mlb_meta) and orgType enum. The description does not add significant parameter-level detail beyond hinting at 'org level' and 'sortStat', but with full schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns high/low stat records for an org level, specifically top and bottom performances for a sortStat in a season. It identifies the resource (stat records) and the operation (get high/low), and the included return shape further clarifies the purpose. This distinguishes it from sibling tools like mlb_leaders or mlb_stats by emphasizing 'high/low' and 'org level'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need top and bottom performances for a sortStat at an org level in a season. It does not explicitly mention alternative tools or exclusions, but the scope ('org level', 'sortStat', 'season') is specific enough to guide an agent. The note 'Auth: none needed' also helps with practical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_home_run_derbyARead-onlyIdempotent
Home Run Derby bracket + results for a derby gamePk.
Returns: {info, status, rounds:[{matchups:[{topSeed, bottomSeed, ...}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Derby game id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly adds 'Auth: none needed,' which is behavior info not present in the annotations. It also outlines the return structure, offering transparency about the response shape. These additions provide useful context beyond the readOnlyHint, openWorldHint, and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, stating the purpose in the first line. The return structure is provided in a brief outline, and the auth note is a single clause. Every sentence adds value without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, no output schema, and annotations indicating a read-only operation, the description provides sufficient context: purpose, parameter identification, return shape outline, and auth requirement. A more detailed breakdown of the nested matchups fields would be helpful but is not essential for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents gamePk with 'Derby game id. Required — part of the URL path,' giving clear semantic meaning. The tool description itself does not add further parameter details, so it does not exceed the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: retrieving the Home Run Derby bracket and results for a specific derby gamePk. This distinguishes it from sibling tools like mlb_schedule or mlb_boxscore by focusing specifically on the derby event and its unique game identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a derby gamePk' provides clear context for when to use the tool—when you have a derby game identifier and need bracket or results. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_jobsARead-onlyIdempotent
People holding a job type for a season — jobType e.g. UMPR (umpires), SCORER, DATACASTER, BROADCASTER, COACH.
Returns: {roster:[{person, jobType, job}]}
Auth: none needed.
Also answers this: pl_match_officials.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| jobType | Yes | Job type code (see mlb_meta(type='jobTypes')). | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context: explicit 'Auth: none needed' and the return shape '{roster:[{person, jobType, job}]}'. It also notes it can answer a related query, which is a behavioral trait. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—three short lines—and front-loaded with the main purpose. It delivers return shape, auth, and an extra routing hint without any fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with three well-documented parameters and no output schema, the description provides the return structure, examples, and auth details. It does not explain any caveats (e.g., which leagues are covered beyond MLB or the Premier League note), but overall it is adequate for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters (season, jobType, sportId). The description adds value beyond the schema by giving concrete examples of jobType codes (UMPR, SCORER, DATACASTER, etc.), which helps the agent understand valid inputs, though it does not elaborate on season or sportId beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns people holding a job type for a season, with specific verb ('holding'), resource ('job type'), and examples (UMPR, SCORER, etc.). It is specific and understandable, though it does not explicitly differentiate from similar sibling tools like mlb_umpires or mlb_datacasters, hence not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a hint that it can also answer pl_match_officials, which is a routing note, but it does not provide guidance on when to use this tool versus the more specialized sibling tools (mlb_umpires, mlb_datacasters, mlb_official_scorers). No exclusions or selection criteria are given, so the agent is left to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_leadersBRead-onlyIdempotent
League leaders for one or more categories (homeRuns, battingAverage, era, strikeouts, wins, saves, ...).
Returns: {leagueLeaders:[{leaderCategory, statGroup, season, leaders:[{rank, value, person, team}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Top-N to return. | |
| season | No | Season year. | |
| sportId | No | Sport id (1 = MLB). | |
| leagueId | No | League id(s): 103=AL, 104=NL. | |
| statGroup | No | hitting | pitching | fielding (disambiguates a category). | |
| leaderCategories | Yes | Category code(s): homeRuns, battingAverage, runsBattedIn, era, strikeouts, wins, saves, ... |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the base safety profile is covered. The description adds value by stating that no authentication is needed and providing the exact return shape. However, it does not disclose additional behavioral traits such as default season/limit behavior or potential error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with only three sentences: purpose, return format, and auth. It is front-loaded with the main verb and resource, and every sentence contributes meaningful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description provides a helpful return-shape example. It covers authentication and clarifies the categories. However, it omits default behavior for optional parameters (e.g., season, limit), though those are documented in the schema. For a read-only tool with strong annotations, this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already well-documented. The description adds some context by listing example leaderCategories and showing how statGroup appears in the return shape, but it does not materially enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns league leaders for specified categories, with a specific verb ('League leaders') and examples. However, it does not explicitly differentiate from sibling tools like mlb_team_leaders or other league-leader tools, so it falls short of full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description describes what it does but does not mention any exclusions, alternatives, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_leaguesARead-onlyIdempotent
League catalogue — e.g. American League (103) and National League (104). Pass sportId=1 for MLB.
Returns: {leagues:[{id, name, abbreviation, sport, seasonState, hasWildCard}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| seasons | No | Season year(s). | |
| sportId | No | Sport id (1 = MLB). | |
| leagueIds | No | Filter to specific league ids (e.g. 103, 104). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description only needs to add behavioral context. It adds the return format and explicitly states no auth is needed, which are useful details beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded with the core purpose, and every line provides necessary information: examples, parameter hint, return type, and auth status. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only catalogue tool, the description, combined with the annotations and schema, provides everything needed: what it does, key parameter examples, return structure, auth requirement, and safety profile. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all parameters. The description adds value by providing concrete example values (103, 104) and clarifying that sportId=1 corresponds to MLB, which reinforces the schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a league catalogue and provides concrete examples (American League 103, National League 104). It is specific about the resource (leagues) and the verb (catalogue/list), but it does not explicitly distinguish itself from sibling tools like mlb_divisions or mlb_conferences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a useful usage hint ('Pass sportId=1 for MLB') and notes that auth is not needed, which helps the agent know when to use it. However, it lacks explicit when-to-use or when-not-to-use guidance and does not mention any alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_linescoreARead-onlyIdempotent
Game linescore — runs per inning, R/H/E totals, current inning + state, and on-base/defense for live games.
Returns: {currentInning, inningState, isTopInning, innings:[{num, home:{runs,hits,errors}, away:{...}}], teams:{home:{runs,hits,errors}, away:{...}}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| timecode | No | Point-in-time snapshot (YYYYMMDD_HHMMSS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds the exact return shape, states 'Auth: none needed,' and clarifies it is for live games — useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a concise summary, followed by a compact return-shape snippet and an auth note. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema coverage and no output schema, the description covers the return structure, auth, and live-game scoping. It is complete enough for an agent to use correctly, though it doesn't discuss edge cases like non-existent gamePk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both gamePk and timecode are already well-described in the schema. The description's return structure indirectly clarifies how parameters affect the result, but it adds no parameter-specific semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a game linescore with runs per inning, R/H/E totals, and current inning state. The resource is specific ('Game linescore') and distinct from sibling tools like mlb_boxscore or mlb_live_feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for live games' provides clear context on when this tool is appropriate. However, it does not explicitly name alternatives or state when not to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_live_feedARead-onlyIdempotent
The complete live game feed (v1.1) — gameData (teams, players, venue, weather, probables) + liveData (boxscore, linescore, full plays). The firehose; large.
Returns: {gamePk, gameData:{teams, players, venue, weather, probablePitchers}, liveData:{plays, linescore, boxscore, decisions}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| hydrate | No | Additional hydrations. | |
| timecode | No | Point-in-time snapshot (YYYYMMDD_HHMMSS); omit for latest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent traits; description adds 'Auth: none needed' and warns of the payload size with 'large'. This provides useful context about expectations beyond what annotations specify.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact lines with clear structure, no redundant phrasing. It front-loads the main purpose and quickly covers return value and auth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description provides a breakdown of the return object and notes the feed's size. It is sufficiently complete for a complex API, though it could clarify when to prefer this over specialized endpoints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are documented in the schema with 100% coverage. The description adds no additional clarification for hydrate or timecode, and merely restates that gamePk is required via the return structure; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly defines the tool's function: retrieving the complete MLB live game feed, combining gameData and liveData. It distinguishes itself from sibling MLB tools like mlb_boxscore or mlb_playbyplay by labeling itself 'the firehose' and 'complete'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys that this tool returns everything about a game, implying use when comprehensive data is needed. It doesn't explicitly name alternative tools or provide exclusion criteria, but 'complete' and 'firehose' provide clear context for when to choose it over more focused counterparts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_metaARead-onlyIdempotent
Meta lookup — fetch the valid values for a parameter used elsewhere (stat types, positions, game types, pitch codes, etc.). One tool over the API's /{type} endpoint.
Returns: [{...lookup rows}] (shape depends on type; e.g. positions → [{code, name, type, abbrev}])
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Which lookup table to return. One of: awards, baseballStats, eventTypes, gameStatus, gameTypes, hitTrajectories, jobTypes, languages, leagueLeaderTypes, logicalEvents, metrics, pitchCodes, pitchTypes, platforms, positions, reviewReasons, rosterTypes, scheduleEventTypes, situationCodes, sky, standingsTypes, statGroups, statTypes, windDirection. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints. The description adds valuable context about return shape ('shape depends on type; e.g. positions → [{code, name, type, abbrev}]') and states no auth is needed. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose, and includes return shape and auth. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite being a simple one-parameter tool with no output schema, the description includes purpose, usage, return shape, and auth. It fully supports an agent selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the 'type' parameter with an enum and description. The description adds meaning by explaining that 'type' is part of the URL path and that the return shape varies by type, with a concrete example. This goes beyond the schema's enum listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches valid values for parameters used elsewhere (stat types, positions, game types, pitch codes, etc.). The phrase 'One tool over the API's /{type} endpoint' distinguishes it from sibling MLB tools that fetch specific data rather than lookup tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: when you need to know valid values for a parameter before calling other tools. It establishes its role as a meta-lookup tool, but it does not explicitly list alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_official_scorersBRead-onlyIdempotent
Official scorer assignments.
Returns: {roster:[{person, job}]}
Auth: none needed.
Also answers this: pl_match_officials.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date. | |
| sportId | No | Sport id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Auth: none needed' and a return structure, which go beyond the annotations (readOnlyHint, openWorldHint, idempotentHint). It doesn't contradict annotations. However, it covers only basic behavioral aspects and omits any details about default date handling or pagination. Given annotations already establish safety, the description provides moderate added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a single-line purpose, then three short bullet-like sections for return, auth, and an alias note. It front-loades the main statement and avoids redundancy. The final note about pl_match_officials is cryptic but does not add significant bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with two optional parameters, the description includes the essential return structure and auth requirement. No output schema exists, but the returned {roster:[{person, job}]} is specified. The description does not discuss default behaviors or error cases, but these are minor for a read-only tool with no required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having descriptions ('As-of date.' and 'Sport id.'). The tool description does not add any further interpretation or usage details for these parameters. Since the schema carries the semantic load, the baseline of 3 is appropriate; the description adds no extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Official scorer assignments' which is a clear verb+resource combination. It clearly indicates what the tool returns (roster structure) and distinguishes itself from other MLB tools like mlb_umpires or mlb_datacasters by being specific to scorer assignments. The additional note about pl_match_officials introduces a cross-request possibility but does not muddy the primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The note 'Also answers this: pl_match_officials' is a hint that this tool may serve a dual role, but it does not explain selection criteria or when to prefer other tools. For a tool with many MLB siblings, this leaves usage ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_peopleARead-onlyIdempotent
Batch player profiles for a list of personIds (the multi-id form of mlb_player).
Returns: {people:[{id, fullName, primaryNumber, birthDate, primaryPosition, batSide, pitchHand, currentTeam}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| hydrate | No | Embed related objects (e.g. 'currentTeam,stats(type=season)'). | |
| personIds | Yes | Player id(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the core behavior is covered. The description adds value by specifying the exact return structure and stating that no authentication is needed, which are useful behavioral details 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences: one for the main purpose, one for the return format, and one for auth. Every sentence provides useful information without redundancy, and the key purpose is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch player profile tool, the description covers the essential points: what it does, the input type, and the return format. It doesn't specify any limits on personIds array size or detailed hydrate behavior, but given the simplicity of the tool and existing schema descriptions, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both hydrate and personIds have descriptions), so the schema does the heavy lifting. The description does clarify that personIds is a list (matching the array type in schema) and gives an example for hydrate in the schema itself. The description adds minimal extra meaning beyond the schema, which is appropriate at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches batch player profiles for a list of personIds, using a specific verb ('Batch') and resource ('player profiles'). It also distinguishes itself from the sibling tool mlb_player by explicitly calling it 'the multi-id form of mlb_player', which is a clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need multiple player profiles at once, referencing mlb_player as the single-id alternative. It lacks explicit when-not-to-use instructions, but the alternative is named and the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_people_changesARead-onlyIdempotent
Player records changed since a timestamp — a polling/sync helper (the people-side sibling of mlb_game_changes).
Returns: {people:[{id, fullName, currentAge, birthDate, active, primaryPosition, batSide, pitchHand}]} (can be large for a wide window)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Trim the response to these fields. | |
| updatedSince | Yes | ISO timestamp (e.g. 2026-06-01T00:00:00Z). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it discloses the return structure, notes that the response 'can be large for a wide window', and explicitly states 'Auth: none needed'. These details supplement the readOnlyHint and idempotentHint annotations, giving the agent a better sense of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core function in the first sentence, shows the return shape in a structured block, and includes a one-line auth note. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential contextual elements: it identifies the tool as a sync helper, specifies the return shape (important because no output schema exists), warns about response size, and states auth requirements. It does not explicitly mention alternatives or exclusions, but for a simple polling tool with high schema coverage and strong annotations, it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for both parameters (updatedSince as ISO timestamp, fields as trimming), so the description does not need to replicate that. It adds a small behavioral note about wide windows affecting response size, but does not introduce new parameter-level semantics beyond the schema. Thus, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a polling/sync helper for player records changed since a timestamp, which distinguishes it from sibling tools like mlb_game_changes. It specifies the resource (player records) and the operation (retrieve changes), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly labels the tool as a 'polling/sync helper' and identifies it as the 'people-side sibling of mlb_game_changes', providing clear context for when to use it. It does not explicitly list exclusions or alternative tools, but the sibling reference and the 'changed since a timestamp' phrasing give a clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_playbyplayARead-onlyIdempotent
Pitch-by-pitch / play-by-play log — every plate appearance with result, pitches, counts, runners and scoring-play flags.
Returns: {allPlays:[{result, about:{inning,halfInning,isScoringPlay}, matchup:{batter,pitcher}, playEvents:[...], count}], scoringPlays, currentPlay}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| timecode | No | Point-in-time snapshot (YYYYMMDD_HHMMSS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, reducing the need for safety disclosure. The description adds valuable context beyond annotations by specifying the return structure (allPlays, scoringPlays, currentPlay) and explicitly stating 'Auth: none needed.' This helps the agent understand what to expect from the tool 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence delivers the core purpose, followed by a concise return structure and an auth note. Every element earns its place without wasted words. It is well-structured for quick parsing by an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (two parameters, no output schema), the description provides a helpful return structure and auth information. It lacks some context such as how to obtain gamePk or potential size of the payload, but these are either in the schema or foreseeable. Overall, it is reasonably complete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both gamePk and timecode described in the schema. The description does not add any extra meaning to the parameters—it only mentions the schema's own descriptions are sufficient. Since the description's role is to add value beyond schema, and it doesn't, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Pitch-by-pitch / play-by-play log — every plate appearance with result, pitches, counts, runners and scoring-play flags.' This is a specific verb-resource combination that distinguishes it from siblings like mlb_boxscore or mlb_linescore, which focus on different aspects of a game.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the description: if you need detailed play-by-play information, this is the tool. However, there is no explicit guidance on when to choose this over alternatives (e.g., mlb_live_feed, mlb_boxscore) or when not to use it. The description lacks exclusion criteria or direct comparisons, earning a mid-range score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_playerARead-onlyIdempotent
Player biographical profile — name, DOB, bats/throws, height/weight, position, debut, current team. One personId.
Returns: {people:[{id, fullName, primaryNumber, birthDate, currentAge, height, weight, primaryPosition, batSide, pitchHand, mlbDebutDate, currentTeam}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| hydrate | No | Embed related objects (e.g. 'currentTeam,stats(type=season)'). | |
| personId | Yes | Player id (from a roster, schedule, boxscore or mlb_player_search). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return structure in detail, mentions that no auth is needed, and aligns with the readOnly and idempotent hints. It adds context by showing the exact response fields, which is valuable given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, followed by a return shape and auth note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup with two parameters, the description is complete: it provides a mini-output schema, auth info, and the core constraints. It could mention error cases or hydrate effects, but those are largely covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters: personId has a clear description and source hint, hydrate includes an example. The description adds little beyond emphasizing the single personId requirement, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a player biographical profile, listing the fields returned and requiring a personId. It distinguishes from sibling tools like mlb_player_search by focusing on biography rather than search, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use or when-not-to-use guidance relative to the many sibling tools. It implies usage by saying 'One personId' (you need an ID first) but doesn't mention where to get it from or what other tools might be better for stats or rosters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_player_game_statsARead-onlyIdempotent
One player's stat line for one specific game (batting/pitching/fielding for that gamePk).
Returns: {stats:[{group, splits:[{stat:{...}, game}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gamePk | Yes | Game id. Required — part of the URL path. | |
| personId | Yes | Player id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds 'Auth: none needed' and a return structure, which is useful context. However, it does not describe edge cases (e.g., empty stats if player did not play) or any quirks about the data. Given the annotations, the description adds some value but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences plus a return type sketch. It front-loads the core purpose, provides a simple return shape, and includes an auth note. There is no fluff or redundant information, making it easy to parse and ideal for AI consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description must convey return value structure. It provides a high-level shape ({stats:[...]}) but lacks specific details on stat object keys (e.g., hits, ERA, fielding errors) and does not mention possible empty results or group types (batting/pitching/fielding are listed but not how they map). For a simple lookup with good annotations, this is sufficient but not complete enough to fully inform an agent of all possible responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (personId, gamePk) have descriptions in the schema. The tool description does not add any additional parameter guidance or context beyond what the schema provides. Baseline 3 is appropriate since the schema handles the parameter semantics fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'One player's stat line for one specific game' with explicit mention of batting/pitching/fielding. This uses a specific verb ('returns') and resource ('stat line for one specific game'), and it naturally distinguishes from sibling tools like mlb_player_stats which likely cover broader scopes. The scope is unambiguous and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied ('one specific game') but there is no explicit guidance on when to use this vs. alternatives. No exclusions or alternative tool names are mentioned. While an agent can infer the tool is for game-level stats, it does not say 'for season stats, use X' or 'do not use for boxscore'. This is adequate but not distinguishing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_player_searchARead-onlyIdempotent
Find players by name — resolves a name to personId(s) and basic bio.
Returns: {people:[{id, fullName, firstName, lastName, birthDate, primaryPosition}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results. | |
| names | Yes | Name to search (e.g. 'Aaron Judge'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior. The description adds value by specifying the return structure and stating no auth is needed, but omits details on ambiguity handling, pagination, or rate limits. This is a strong addition 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two concise sentences plus a return format and auth note. It is front-loaded, direct, and every sentence serves a purpose without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description clearly provides the return structure and auth requirement, covering the core use case. It lacks edge-case behavior (e.g., multiple matches, no results) but remains fairly complete for a simple search tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters (names and limit) fully, so the description does not need to add much. It provides no extra semantic detail beyond the schema, but with 100% coverage, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb (find) and resource (players), and clarifies it resolves a name to personId(s) and basic bio. This distinguishes it from sibling tools that retrieve players by ID, like mlb_player.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use for name-based search, but does not explicitly contrast with alternatives such as mlb_player or mlb_people, nor does it state when to avoid this tool. Usage context is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_player_statsARead-onlyIdempotent
One player's stats — by type (season / career / yearByYear / gameLog) and group (hitting/pitching/fielding).
Returns: {stats:[{type, group, splits:[{season, stat:{...}, team, league}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | hitting | pitching | fielding. | hitting |
| stats | No | season | career | yearByYear | gameLog | statSplits. | season |
| season | No | Season year (for season/gameLog types). | |
| personId | Yes | Player id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description only needs to add context. It adds 'Auth: none needed' and specifies the return shape, which is valuable beyond the annotations. No contradictions detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first front-loads the core purpose and options, the second provides the return format and auth requirement. Every word earns its place; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description includes a return shape ({stats:[{type, group, splits...}]}), which compensates. It covers all parameter dimensions and scopes the tool to a single player, though it lacks examples or edge-case details like default season behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented. The description adds a small connection between type/group and the return structure (splits with season/team/league), but does not substantially extend the schema's explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One player's stats' and enumerates selectable types (season/career/yearByYear/gameLog) and groups (hitting/pitching/fielding), making its purpose specific. It distinguishes from sibling tools like mlb_player (player info) and mlb_player_game_stats (game-specific stats) by covering multiple stat types, though it lacks an explicit verb like 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. The type and group parameters imply use cases, but no comparison to sibling tools like mlb_player_game_stats or mlb_team_stats is given, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_scheduleARead-onlyIdempotent
Game schedule — by single date or startDate/endDate range, optionally for one team. Each game carries gamePk, status, teams and score.
Returns: {totalGames, dates:[{date, games:[{gamePk, gameDate, status, teams:{away:{team,score}, home:{team,score}}, venue}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Single date (YYYY-MM-DD). | |
| season | No | Season year. | |
| teamId | No | Filter to one team. | |
| endDate | No | Range end (YYYY-MM-DD). | |
| hydrate | No | Embed related objects (e.g. 'team,linescore,probablePitcher,decisions'). | |
| sportId | No | Sport id (1 = MLB). | |
| gameTypes | No | Game type code(s): R (regular), F/D/L/W (postseason), S (spring), etc. | |
| startDate | No | Range start (YYYY-MM-DD); use with endDate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context by specifying the return shape and stating 'Auth: none needed', which goes beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first line states the core purpose, followed by a precise return-type block and the auth note. Every sentence serves a purpose with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately documents the return structure. The parameter schema covers individual parameters, and the description adds the high-level usage (date vs. range, team filter). It is sufficiently complete for a read-only schedule tool, though it could mention the relationship between startDate and endDate more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds semantic value by tying date, startDate, and endDate together as range options and clarifying the optional team filter. This grouping helps an agent understand parameter combinations without reading each schema entry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a game schedule, with options for a single date, a date range, and an optional team filter. It is a specific verb+resource ('Game schedule') but does not explicitly distinguish from sibling tools like mlb_schedule_postseason or mlb_schedule_tied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: by single date or startDate/endDate range, optionally for one team. It does not give explicit exclusions or point to alternative tools for postseason schedules, but the usage context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_schedule_postseasonARead-onlyIdempotent
Postseason schedule — all playoff games (optionally a single season / series type).
Returns: {totalGames, dates:[{date, games:[{gamePk, seriesDescription, teams, status}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| hydrate | No | Embed related objects. | |
| sportId | No | Sport id (1 = MLB). | |
| gameTypes | No | Postseason game type code(s): F, D, L, W. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: it discloses the exact return shape (totalGames, dates with gamePk, seriesDescription, teams, status) and states 'Auth: none needed.' This complements the readOnlyHint and idempotentHint annotations rather than repeating them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: two sentences for purpose, a three-line return format, and an auth note. Every sentence earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a return structure. It also covers auth and optional filtering. A minor gap is the lack of explicit default behavior when season is omitted, but the tool is otherwise adequately specified for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already described. The description's mention of 'optionally a single season / series type' maps to the season and gameTypes parameters but does not add significant meaning beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the postseason schedule ('all playoff games') and supports optional filtering by season or series type. This distinguishes it from sibling tools like mlb_schedule (regular season) and mlb_schedule_postseason_series (series-specific detail), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case: retrieve all postseason games, optionally filtered by season or series type. It does not explicitly exclude or reference alternatives, but the scope is clear enough that an agent would know when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_schedule_postseason_seriesARead-onlyIdempotent
Postseason series view — games grouped by series (e.g. ALDS, NLCS, World Series).
Returns: {series:[{series:{id, gameType}, totalItems, games:[...]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds useful behavioral context: it specifies the return shape ('Returns: {series:[{series:{id, gameType}, totalItems, games:[...]}]}') and clarifies that no authentication is required. This goes beyond the annotations and gives the agent a clear picture of the response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, with information front-loaded. The first sentence explains the core purpose, followed by return format and authentication. There is no redundant or verbose content; every line adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two optional parameters, no output schema), the description is quite complete. It provides the return shape, authentication requirements, and the grouping behavior. Minor gaps remain, such as what happens when season is null (defaults to current season?) or how sportId affects results, but these are not critical for basic usage and the schema provides defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both 'season' and 'sportId' have descriptions). The tool description does not add extra parameter-level meaning beyond the schema, but it does mention the return structure which gives some indirect context about how the parameters might affect the response. Since the schema handles parameter documentation, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Postseason series view — games grouped by series (e.g. ALDS, NLCS, World Series).' It distinguishes itself from sibling tools like mlb_schedule and mlb_schedule_postseason by emphasizing group-by-series semantics. The examples of series add concrete clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context (this is for postseason series grouping) but does not explicitly mention when to use this tool versus alternatives, or exclude other tools. While the name and description imply the use case, it lacks explicit guidance such as 'for regular season, use mlb_schedule' or similar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_schedule_postseason_tuneinARead-onlyIdempotent
Postseason broadcast 'tune-in' info (where/when to watch playoff games).
Returns: {dates:[{games:[{gamePk, broadcasts:[...]}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior, and the description does not contradict these. It adds valuable context by stating 'Auth: none needed' and describing the return structure, but it does not disclose behavior when the optional 'season' parameter is null (e.g., defaults to current season).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by the return format and auth requirement. Every sentence serves a purpose with no redundancy or promotional content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the purpose, auth, and return structure. However, it does not explain the default behavior of the optional parameters, leaving a minor gap in how to invoke the tool without specifying a season.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already documented ('Season year.' and 'Sport id (1 = MLB).'), so the baseline is 3. The description adds no additional information about parameter meanings, defaults, or how they affect the response.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing postseason broadcast 'tune-in' info (where/when to watch playoff games), which distinguishes it from sibling schedule tools like mlb_schedule_postseason and mlb_schedule_postseason_series. It lacks an explicit verb such as 'Get' or 'List,' but the resource and scope are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the 'tune-in' framing and the return type, but there is no explicit statement of when to use this tool versus alternatives. No prerequisites, exclusions, or alternative tool names are mentioned in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_schedule_tiedBRead-onlyIdempotent
Tie-breaker / tied games for a season.
Returns: {totalGames, dates:[{games:[...]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| hydrate | No | Embed related objects. | |
| gameTypes | No | Game type code(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return structure ({totalGames, dates:[{games:[...]}]}) and states that no Auth is needed, adding value beyond the readOnlyHint/idempotentHint annotations. However, it leaves semantic ambiguity about what qualifies as a 'tied' game (e.g., tiebreaker games vs. games ending in a tie). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: it states the tool's purpose, expected return shape, and authentication requirement in just three lines. Every phrase contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and no output schema, the description gives a minimal return structure but omits clarification on the data scope (tie-breaker vs. tied games) and how parameters like hydrate and gameTypes affect the output. It covers the basics but leaves meaningful gaps for an agent to correctly interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since the input schema provides 100% coverage for all three parameters, the description need not add much parameter detail. It offers no additional meaning beyond the schema, only implicitly referencing the season parameter. This meets the baseline but does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'tie-breaker / tied games for a season,' which clearly indicates the subject matter. However, it lacks an explicit verb like 'retrieve' or 'list,' and does not differentiate from sibling tools such as mlb_schedule or mlb_schedule_postseason.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It only says 'for a season,' implying a season-based query scope, but fails to mention when not to use it or how it differs from other MLB schedule tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_seasonARead-onlyIdempotent
Single season detail by seasonId — key dates and game-count info.
Returns: {seasons:[{seasonId, regularSeasonStartDate, regularSeasonEndDate, postSeasonStartDate, postSeasonEndDate}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Sport id (1 = MLB). | |
| seasonId | Yes | Season year/id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by stating the exact return shape and noting 'Auth: none needed,' which is useful context beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the purpose in the first sentence. The return shape and auth note are included without any waste, making every line valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with rich annotations, a complete inline return shape, and only 2 parameters fully described in the schema, the description provides all necessary context. The tool's scope is narrow, and this description is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces that seasonId is the required parameter and part of the URL path, but it does not add substantial meaning beyond the schema, which already documents seasonId and sportId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as providing single-season detail by seasonId, specifically key dates and game-count info. It distinguishes itself from sibling tools like mlb_seasons and mlb_schedule by focusing on season metadata rather than listing all seasons or game schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Single season detail by seasonId' clearly signals when to use this tool—when you need key dates and game-count info for one specific season. It does not explicitly name alternatives or exclusions, but the context is clear enough among the mlb_* sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_seasonsARead-onlyIdempotent
Season catalogue with key dates (regular-season start/end, postseason, etc.). Pass sportId=1.
Returns: {seasons:[{seasonId, regularSeasonStartDate, regularSeasonEndDate, seasonStartDate, seasonEndDate, preSeasonStartDate, postSeasonEndDate}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Filter to one season year. | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds meaningful behavioral context beyond these: the exact return shape with field names, the fact that no auth is needed, and the sportId requirement. This is valuable transparency for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, a clear return shape, and an auth note. It is front-loaded and every sentence adds information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only catalogue tool, the description covers the key aspects: return fields, required sportId, and auth. It does not explicitly state that omitting 'season' returns all seasons, but the plural 'seasons' and return shape imply this. Minor gap, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already described ('Filter to one season year' and 'Sport id (1 = MLB)'). The description adds little beyond 'Pass sportId=1', which is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Season catalogue with key dates', which clearly identifies the resource and the type of data returned. It is not fully differentiated from sibling tools like mlb_seasons_all or mlb_season, but the plural form and mention of 'catalogue' imply a list of seasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit instruction to 'Pass sportId=1', which is a key usage requirement. It provides clear context for when this tool is appropriate (retrieving season dates), but does not mention alternatives or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_seasons_allARead-onlyIdempotent
Every season in MLB history (151+) with key dates — the /seasons/all catalogue. (Plain /seasons only returns the current season; an ?all=true query there is a no-op.)
Returns: {seasons:[{seasonId, regularSeasonStartDate, regularSeasonEndDate, seasonStartDate, seasonEndDate, preSeasonStartDate, qualifierPlateAppearances, hasWildcard}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Sport id (1 = MLB). | |
| leagueId | No | Filter by league (103=AL, 104=NL). | |
| divisionId | No | Filter by division. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent behavior. The description adds valuable context: auth not needed, full historical scope (151+), and a concrete return shape. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. Every sentence serves a purpose: scope, sibling distinction, return shape, and auth. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only catalogue with optional filters, this description is complete. It includes the API endpoint identity, return schema, auth info, and the key differentiator from the sibling tool. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (sportId, leagueId, divisionId) with clear descriptions. The tool description adds no additional parameter-level meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every MLB season with key dates (151+), and explicitly distinguishes it from the plain /seasons endpoint that returns only the current season. This makes the purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit comparison to the sibling tool: 'Plain /seasons only returns the current season; an ?all=true query there is a no-op.' This tells the agent exactly when to choose this tool over the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_sportsARead-onlyIdempotent
Sport catalogue — the sportId lookup (1 = Major League Baseball; others are MiLB levels, college, international).
Returns: {sports:[{id, code, name, abbreviation, sortOrder, activeStatus}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | No | Filter to one sport. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that no authentication is needed, which is useful behavioral context beyond the annotations. It also specifies the return shape and provides meaningful interpretation of the sportId values, adding transparency. With readOnlyHint and idempotentHint already present, the description adds additional value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using only three short sentences. It front-loads the core purpose, then covers the return format and authentication, with no redundant or filler content. Every sentence contributes valuable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only catalogue tool with one optional parameter, the description is quite complete. It covers purpose, parameter meaning, return structure, and auth. While it omits potential edge cases like empty results or pagination, these are unlikely to be significant for such a tool, and the annotations plus return format provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says the parameter 'Filter to one sport', but the description adds crucial semantic detail by explaining that 1 means MLB and other values correspond to MiLB, college, or international levels. This goes beyond the schema's minimal description, significantly improving parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a sport catalogue and a sportId lookup, with the specific mapping for MLB. It distinguishes itself from other MLB tools by focusing on the sport-level lookup rather than teams, leagues, or divisions, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through the phrase 'sportId lookup' and the description of sport IDs, making it clear the tool is for resolving sport identifiers. However, there is no explicit statement about when to use this tool versus alternatives or any exclusions, leaving the guidance somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_sports_playersARead-onlyIdempotent
All players in a sport for a season — the full player catalogue (name → id resolution). sportId=1 for MLB.
Returns: {people:[{id, fullName, firstName, lastName, primaryNumber, birthDate, currentAge}]} (large)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year. | |
| hydrate | No | Embed related objects. | |
| sportId | Yes | Sport id (1 = MLB). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the return structure, a size warning ('large'), and auth requirements, complementing the readOnlyHint and idempotentHint annotations. It does not contradict annotations. However, it does not disclose pagination behavior or how the hydrate parameter affects the response, which would be useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each with clear value: purpose, return shape/size, and auth. No redundant wording, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The return structure and size warning compensate for the absence of an output schema. The tool is simple with strong annotation coverage, making it reasonably complete. Minor gaps include hydrate behavior and alternative tool references, but these do not undermine overall usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage, including sportId=1 for MLB and season year. The description repeats the sportId mapping but adds no new meaning beyond the schema. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns all players for a sport/season, positioning it as a full catalogue for name-to-ID resolution. This differentiates it from narrower siblings like mlb_team_roster or mlb_player_search. The verb and resource are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (full catalog lookup for a season) with clear context, but does not explicitly mention alternatives or when not to use it. Sibling tools with similar player data are not referenced, so the guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_standingsARead-onlyIdempotent
Division standings — per-team W/L, pct, GB, streak, run differential, wild-card and division ranks. Pass leagueId (103=AL, 104=NL).
Returns: {records:[{division, league, teamRecords:[{team, wins, losses, winningPercentage, gamesBack, streak, runDifferential, divisionRank, wildCardRank}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Standings as of a date (YYYY-MM-DD). | |
| season | No | Season year (defaults to current). | |
| hydrate | No | Embed related objects (e.g. 'team'). | |
| leagueId | No | League id(s): 103=AL, 104=NL (comma-separated). | 103,104 |
| standingsTypes | No | regularSeason | wildCard | divisionLeaders | springTraining | etc. | regularSeason |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed' and a detailed return structure, which is useful context beyond the annotations. No contradiction detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a compact return format block. It front-loads the main purpose and includes a structured output example without redundant prose, earning full marks for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a return structure that is essential. It covers the core use case and auth. However, it does not explain how the 'standingsTypes' parameter might alter the output structure (e.g., when requesting 'wildCard' alone), leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description only repeats the leagueId mapping already in the schema and does not add new meaning or clarify parameter interactions, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Division standings — per-team W/L, pct, GB, streak, run differential, wild-card and division ranks,' which clearly specifies the resource and data contents. The tool name 'mlb_standings' and the league ID mapping distinguish it from other standings tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating this is about MLB division standings and gives specific leagueId instructions. However, it does not explicitly mention alternatives or exclusions (e.g., 'for other sports use other standings tools'), though this is implied by the name and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_statsARead-onlyIdempotent
Season stats query across players — by group (hitting/pitching/fielding) and type (season, career, byDateRange, ...). Sort + limit for top-N tables.
Returns: {stats:[{type, group, splits:[{season, player, team, stat:{...}}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Stat group: hitting | pitching | fielding. | hitting |
| limit | No | Max rows. | |
| stats | No | Stat type: season | career | yearByYear | byDateRange | statSplits | ... | season |
| season | No | Season year. | |
| teamId | No | Filter to one team. | |
| sportId | No | Sport id (1 = MLB). | |
| sortStat | No | Stat to sort by (e.g. 'homeRuns'). | |
| playerPool | No | all | qualified | rookies | etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds value by specifying the exact return shape ({stats:[...]}), explicitly stating 'Auth: none needed', and mentioning sort/limit behavior. It does not contradict the annotations and provides useful behavioral context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences covering purpose, return structure, and auth, all front-loaded and free of fluff. Every sentence contributes meaningful information, and the return structure is presented cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a concrete return structure, effectively serving as a mini output schema. It also notes auth requirements. However, for an 8-parameter tool, it lacks details on default season behavior, how byDateRange works with other filters, or examples of common queries, which would help an agent invoke it correctly in varied scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reiterates the group and type options and mentions sort/limit, but adds no new semantic detail beyond what the schema already provides for each parameter. It does not clarify interactions or default behaviors for parameters like season or sportId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Season stats query across players' with a specific verb and resource, and enumerates groups (hitting/pitching/fielding) and stat types (season, career, byDateRange, ...). This distinguishes it from sibling tools like mlb_player_stats and mlb_leaders, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this is for querying stats across players, with sort/limit for top-N tables, implying use for aggregate comparisons rather than single-player lookups. However, it does not explicitly name alternatives or exclusions, such as pointing to mlb_player_stats for individual player stats, so it lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_teamARead-onlyIdempotent
Single team detail by id — name, league/division, venue, colours, founding.
Returns: {teams:[{id, name, abbreviation, league, division, venue, locationName, firstYearOfPlay}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| teamId | Yes | Team id. Required — part of the URL path. | |
| hydrate | No | Embed related objects (e.g. 'venue,league,division,social'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds explicit auth requirements ('Auth: none needed') and the return data structure, which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (three short segments), front-loads the core purpose, and includes both return format and auth in a compact, scannable structure. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of a simple tool, full schema coverage, and the description's inclusion of return format and auth makes the description fully sufficient. There is no output schema, but the description provides the needed return details, so completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds little beyond confirming the teamId is the key lookup, which gives it baseline credit but no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb pattern ('Single team detail by id') and clearly identifies the resource (team) and scope (by id), distinguishing it from plural or roster-focused sibling tools. It lists the attributes returned, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a team id but does not explicitly state when to use this tool versus alternatives like mlb_teams or mlb_team_roster. No alternative tools are mentioned, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_alumniARead-onlyIdempotent
Former players (alumni) for a team in a season + group (hitting/pitching/fielding).
Returns: {people:[{id, fullName, primaryPosition, mlbDebutDate}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | hitting | pitching | fielding. | hitting |
| season | Yes | Season year. | |
| teamId | Yes | Team id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable behavioral context beyond annotations by specifying the return format ({people:[{id, fullName, primaryPosition, mlbDebutDate}]}) and stating that no authentication is needed. This enhances the agent's understanding of expected output and access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, using three short lines to convey purpose, return format, and auth requirement. It is front-loaded with the core function and every sentence contributes value. No redundant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool, the description is sufficiently complete. It provides the return structure, auth requirement, and parameter scope. While there is no output schema, the inline return type covers this gap. The annotations cover safety and idempotency, and the schema covers parameter semantics. The only minor omission is explicit mention of pagination or limits, which is not critical for this simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (teamId, season, group) with their meaning and constraints. The description does not add additional parameter-level detail beyond what the schema provides, but the mention of 'hitting/pitching/fielding' reinforces the group values already present in the schema. Baseline 3 is appropriate since the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving former players (alumni) for a team, filtered by season and group (hitting/pitching/fielding). This specific verb+resource+scope distinguishes it from sibling tools like mlb_team_roster, which would focus on current players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying the required dimensions (team, season, group) and identifies the group options. However, it does not explicitly state when to use this tool versus alternatives such as mlb_team_roster, nor does it mention any exclusions. The context is clear but the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_coachesBRead-onlyIdempotent
A team's coaching staff — manager, hitting/pitching/bench coaches, etc.
Returns: {roster:[{person, jobId, job, title}], teamId}
Auth: none needed.
Also answers this: espn_core_call.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date (YYYY-MM-DD). | |
| season | No | Season year. | |
| teamId | Yes | Team id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful behavioral context beyond the annotations: no authentication needed, and the return structure is explicitly outlined. The annotations already indicate read-only/idempotent behavior, and the description complements this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and includes return format and auth. The final line about espn_core_call is somewhat vague but doesn't add significant bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the what, the return shape, and auth, but lacks any usage guidance or differentiation from sibling tools. Given no output schema, the return format line is helpful, yet overall completeness is only partial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema description coverage is 100%, so the schema fully documents the three parameters. The description doesn't add extra semantics beyond the schema, which is acceptable per baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a team's coaching staff with specific roles (manager, hitting/pitching/bench coaches). It lacks an explicit verb like 'get' or 'retrieve,' but the content and return schema make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus other MLB team tools (e.g., mlb_team_roster, mlb_team_personnel). The note 'Also answers this: espn_core_call' is cryptic and does not clarify selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_leadersARead-onlyIdempotent
A team's statistical leaders for given categories (e.g. homeRuns, era) in a season.
Returns: {teamLeaders:[{leaderCategory, season, leaders:[{rank, value, person}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Top-N. | |
| season | Yes | Season year. | |
| teamId | Yes | Team id. Required — part of the URL path. | |
| leaderGameTypes | No | Game type code(s). | |
| leaderCategories | Yes | Category code(s): homeRuns, battingAverage, era, ... |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and open-world. The description adds useful context: 'Auth: none needed' and a structured return shape. It does not go into further detail about edge cases or pagination, but given the strong annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two short sentences plus a return type and auth note. Every sentence earns its place, with no redundancy or fluff. The return format is clearly laid out, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 5 parameters and no output schema, the description provides a clear return structure and example categories. It does not explain all possible categories or game types, but these are documented in the schema. The overall information is sufficient for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are well-documented. The description adds value by providing example category names (homeRuns, era) and clarifies that limit is 'Top-N' in the schema. This is a marginal addition beyond the schema, aligning with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving a team's statistical leaders for specified categories in a season. It is specific about the resource (team) and the operation (leaders), and the examples (homeRuns, era) clarify the expected categories. However, it does not explicitly distinguish itself from the sibling tool mlb_leaders, though the word 'team's' implies the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need a team's statistical leaders for given categories. It does not explicitly state when not to use it or mention alternatives like mlb_leaders for league-wide leaders. There are no clear exclusions or prerequisites beyond the implied team-level scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_personnelBRead-onlyIdempotent
A team's front-office / non-uniformed personnel.
Returns: {roster:[{person, job, title}], teamId}
Auth: none needed.
Also answers this: espn_core_call.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date (YYYY-MM-DD). | |
| teamId | Yes | Team id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safe read behavior is covered. The description adds 'Auth: none needed' and shows the return structure, which is helpful. However, the cryptic line 'Also answers this: espn_core_call' is ambiguous and may confuse rather than inform. It does not contradict annotations, but the added behavioral context is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but includes an unexplained note about espn_core_call that adds noise without value. While the core definition is efficient, the cryptic line detracts from clarity and wastes a sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with fully documented parameters and no output schema, the description provides a return structure and auth requirement. It is mostly complete, but the ambiguous espn_core_call note slightly undermines completeness and clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters documented (date format and teamId required in URL path). The description adds no additional parameter semantics beyond what the schema already provides, so it earns the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a team's front-office / non-uniformed personnel, and it specifies the return structure with roster items and team ID. This distinguishes it from sibling tools like mlb_team_roster (players), mlb_team_coaches, and mlb_team_alumni.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as mlb_team_roster or mlb_team_coaches. It neither mentions exclusions nor context for choosing this tool over others, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_rosterARead-onlyIdempotent
A team's roster — players with position and jersey number. rosterType selects active / 40-man / full-season / depth chart.
Returns: {roster:[{person:{id, fullName}, jerseyNumber, position:{abbreviation, name}, status}], teamId, rosterType}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Roster as of a date (YYYY-MM-DD). | |
| season | No | Season year. | |
| teamId | Yes | Team id (from mlb_teams). Required — part of the URL path. | |
| hydrate | No | Embed related objects (e.g. 'person(stats(type=season))'). | |
| rosterType | No | active | 40Man | fullSeason | fullRoster | depthChart | gameday. | active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior. The description adds value beyond that by disclosing the exact return structure and explicitly stating no authentication is needed, which is useful context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized, with a clear opening statement, a separate Returns block, and an Auth note. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description compensates by providing the return format. Combined with the full input schema and read-only annotations, this gives an agent enough information to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to restate parameter meanings. It does mention rosterType values but omits some options listed in the schema (fullRoster, gameday) and uses slightly different naming ('full-season' vs 'fullSeason'), adding no real semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as returning a team's roster with players, positions, and jersey numbers. It also distinguishes between roster types (active, 40-man, full-season, depth chart), which separates it from sibling tools like team coaches or personnel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need roster data and explains rosterType options, but it does not explicitly state when to use this tool over alternatives (e.g., mlb_team, mlb_team_coaches). No exclusions or 'use instead' guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_teamsARead-onlyIdempotent
Team catalogue — id, name, abbreviation, location, league/division, home venue. Pass sportId=1 for the 30 MLB clubs.
Returns: {teams:[{id, name, abbreviation, teamName, locationName, league, division, venue, firstYearOfPlay}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| hydrate | No | Embed related objects (e.g. 'venue,league,division'). | |
| sportId | No | Sport id (1 = MLB). | |
| leagueIds | No | Filter by league id(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as read-only, open-world, and idempotent, and the description adds the fact that authentication is not needed and the specific return shape. This is valuable context beyond the annotations, though it does not describe pagination or rate limits, which are likely unnecessary for a small catalogue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, front-loaded with the core purpose and fields, followed by usage guidance, return format, and auth. Every sentence contributes new information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with all optional parameters and no output schema, the description provides the essential context: what it returns, how to invoke it for the common case, and that no auth is needed. The lack of pagination or filter examples is acceptable given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all four parameters with descriptions, and the description reinforces sportId's role by giving a concrete value ('sportId=1'). It does not elaborate on season, hydrate, or leagueIds, but the schema already documents these sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a 'team catalogue' listing id, name, abbreviation, location, league/division, and home venue. The added 'Pass sportId=1 for the 30 MLB clubs' narrows the scope and distinguishes it from related MLB team tools like mlb_teams_history or mlb_teams_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit instructions for the primary use case (sportId=1 for MLB) and notes that auth is not required. However, it does not explicitly exclude alternatives such as mlb_team for a single team or other sport-specific team tools, though the sibling list implies a generic catalogue purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_teams_affiliatesARead-onlyIdempotent
A club's affiliated teams across the minor-league levels.
Returns: {teams:[{id, name, sport, league, parentOrgId, parentOrgName}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| hydrate | No | Embed related objects. | |
| teamIds | Yes | Parent team id(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying 'Auth: none needed' and explicitly showing the return structure, which helps set expectations about the output shape. It does not hide any surprising behavior, and it contradicts no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a return-type template, and an auth note. Every line serves a distinct purpose and no words are wasted. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the essential aspects: what it does, what it returns, and auth requirements. There is no output schema, so the inline return definition compensates well. It could have mentioned that teamIds is required or explained the season parameter's role, but the schema already documents those, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for its three parameters (season, hydrate, teamIds). The description does not add any parameter-level detail beyond what is already in the schema, so the baseline of 3 applies. The return-field names (e.g., parentOrgId) are self-explanatory but not elaborated further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns a club's affiliated teams across minor-league levels. The 'Returns:' clause with a concrete object structure reinforces that this is a retrieval operation. It distinguishes itself from sibling tools like mlb_teams (which presumably lists major league teams) by its explicit focus on affiliates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need a club's minor-league affiliates), but there is no explicit guidance on when to prefer this over alternatives like mlb_team_roster or mlb_teams_history. No exclusions or 'use instead' notes are provided. The 'Auth: none needed' note is a permission guideline, not a usage-vs-alternative guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_teams_historyARead-onlyIdempotent
Franchise history (name/league/division changes over time) for one or more teams.
Returns: {teams:[{id, name, season, league, division, locationName, active}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| teamIds | Yes | Team id(s). | |
| endSeason | No | Last season. | |
| startSeason | No | First season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds 'Auth: none needed' plus a precise return shape. This goes beyond the annotations by telling the agent what response to expect, though it does not cover error cases or open-world behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, return shape, and auth are each conveyed in a single line. No filler or redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only historical lookup tool with no output schema, the description provides the key return fields and auth requirement, making it largely self-contained. Minor gaps such as acceptable season format or invalid-team behavior prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for teamIds, startSeason, and endSeason, so the baseline is 3. The description adds little parameter meaning beyond 'one or more teams' and the return structure; it does not clarify season formatting or ID types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific resource and data scope: 'Franchise history (name/league/division changes over time) for one or more teams.' The 'Returns' line confirms the tool's purpose. It is clearly differentiated from sibling tools like mlb_teams or mlb_team, which would present current team information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Franchise history... changes over time' implies the intended use case, but there is no explicit statement of when to use this tool versus alternatives such as mlb_teams or mlb_team, nor any exclusions or prerequisites. Guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_teams_statsARead-onlyIdempotent
Aggregate stats across all teams — league-wide team leaderboard by season + group. Sort + limit for top-N.
Returns: {stats:[{type, group, splits:[{team, stat:{...}}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | hitting | pitching | fielding. | hitting |
| limit | No | Max rows. | |
| stats | No | Stat type. | season |
| season | Yes | Season year. | |
| sportId | No | Sport id (1 = MLB). | |
| sortStat | No | Stat to sort by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds 'Auth: none needed' and explicitly shows the return shape '{stats:[...]}', which provides useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by return format and auth requirement. Every sentence earns its place; no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description supplies a return shape. Combined with the highly descriptive parameter schema and read-only annotations, it gives the agent everything needed to understand when and how to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by clarifying 'season + group' for filtering and 'Sort + limit for top-N' for sortStat/limit, which enriches the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific language: 'Aggregate stats across all teams' and 'league-wide team leaderboard by season + group.' It clearly distinguishes itself from team-specific tools like mlb_team_stats by emphasizing the aggregate, league-wide scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies its use case: retrieving aggregate team statistics for a given season and group, with sorting and limiting. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to differentiate from team-specific or player-specific stat tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_statsARead-onlyIdempotent
One team's aggregate stats — by season + group (hitting/pitching/fielding) and stat type.
Returns: {stats:[{type, group, splits:[{season, team, stat:{...}}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | hitting | pitching | fielding. | hitting |
| stats | No | season | career | yearByYear | ... | season |
| season | Yes | Season year. | |
| teamId | Yes | Team id. Required — part of the URL path. | |
| sportId | No | Sport id (1 = MLB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly, idempotent, and openWorld. The description adds useful behavioral context by providing the exact return structure and noting that no authentication is needed. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short paragraphs covering purpose, return shape, and authentication. Every sentence earns its place, with the Returns block providing essential structural detail without wasteful elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by outlining the return structure. It covers team-level scope, grouping, stat types, and auth. It does not detail the nested 'stat' object, but the overview is sufficient for a moderate-complexity data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 5 parameters. The description marginally reinforces the meanings of 'group' and 'stat type' but adds no new parameter semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'One team's aggregate stats' and specifies the key dimensions: season, group (hitting/pitching/fielding), and stat type. It distinguishes from sibling tools like mlb_team (team info) and mlb_player_stats (player-level) by emphasizing team-level aggregate data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need aggregated stats for a single team across specified seasons and groups. It does not explicitly mention alternatives or exclusions, but the phrasing 'One team's aggregate stats' gives clear context compared to other team- or player-focused tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_team_uniformsARead-onlyIdempotent
Uniform assets / descriptions for one or more teams.
Returns: {uniforms:[{teamId, uniformAssets:[{uniformAssetText, uniformAssetType, ...}]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| teamIds | Yes | Team id(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is clear. The description adds useful behavioral context by specifying the return structure and stating that no auth is needed. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences plus a compact return type illustration. Every element serves a purpose—resource, scope, return shape, and auth requirements—with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides the return structure, which helps the agent anticipate results. It does not explain the behavior of the optional 'season' parameter (e.g., default handling), but overall it is reasonably complete for a simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described ('Team id(s).' and 'Season year.'). The description adds no additional parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('Uniform assets / descriptions') and scope ('for one or more teams'), clearly distinguishing it from sibling tools like mlb_team_roster or mlb_teams. However, it lacks an explicit action verb like 'fetch' or 'retrieve,' making it slightly less direct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when uniform assets are needed and notes that no authentication is required, but it does not explicitly state when to use this tool over alternatives or provide exclusions. No sibling alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_transactionsARead-onlyIdempotent
Roster transactions — signings, trades, call-ups, IL moves, DFA, etc. Filter by team, player, single date or date range.
Returns: {transactions:[{id, person, fromTeam, toTeam, date, typeCode, typeDesc, description]}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Single date (YYYY-MM-DD). | |
| teamId | No | Filter to one team. | |
| endDate | No | Range end (YYYY-MM-DD). | |
| sportId | No | Sport id. | |
| playerId | No | Filter to one player. | |
| startDate | No | Range start (YYYY-MM-DD); use with endDate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only/idempotent behavior. Description adds the specific transaction categories covered and the exact return object structure, plus auth requirement. It does not mention pagination or default ranges, but with openWorldHint the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs: first states purpose and filters, second gives return shape and auth. Zero filler, information is front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query tool with six optional params and no output schema, it provides purpose, return format, auth status, and filter semantics. Sufficient for an agent to invoke correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all six parameters with descriptions, so baseline is 3. The description restates filtering by team/player/date but adds no syntax or relationship details beyond schema, which already notes startDate must accompany endDate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies tool as retrieving MLB roster transactions, listing concrete examples (signings, trades, call-ups, IL moves, DFA). It also states filter dimensions (team, player, date), distinguishing it from sibling tools like mlb_teams or mlb_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description specifies filter options (by team, player, single date, or range) and notes authentication is not needed, giving clear context for invocation. It does not explicitly mention alternatives or when-not-to-use, but the scope is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_umpiresARead-onlyIdempotent
Current umpire crew list.
Returns: {roster:[{person, jobType, job}]}
Auth: none needed.
Also answers this: pl_match_officials.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | As-of date. | |
| sportId | No | Sport id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description is not the sole source of behavioral context. It adds 'Auth: none needed' and the return structure, which are useful. It does not disclose other behaviors like default date handling or pagination, but given the annotations, the added context is adequate 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose ('Current umpire crew list'). The return format and auth note are valuable and concise. The 'Also answers this' line is slightly cryptic but does not add unnecessary length, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters and no output schema, but the description provides the return shape and auth requirements. The meaning of 'current' and how the date parameter interacts could be clarified, but the schema covers those fields. For a simple read-only list tool, the description is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—both parameters ('date' and 'sportId') are described in the schema. The description adds no additional semantic meaning beyond what the schema already provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Current umpire crew list.' It specifies the action (list) and resource (umpires), and includes the return format, which adds clarity. The name 'mlb_umpires' implies MLB scope, and it is distinct from sibling tools like mlb_official_scorers and mlb_datacasters, though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers minimal usage guidance. It includes 'Also answers this: pl_match_officials,' which hints that this tool can handle queries intended for that sibling, but it does not explicitly state when to use this tool over other umpire-related tools or provide exclusion criteria. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_venuesARead-onlyIdempotent
Venue detail for one or more venueIds — name, location, field/roof info.
Returns: {venues:[{id, name, location, fieldInfo, timeZone, active}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | Season year. | |
| hydrate | No | Embed related objects (e.g. 'location,fieldInfo'). | |
| venueIds | Yes | Venue id(s) (from a team's venue or a game). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds an explicit 'Auth: none needed' and the return shape. This is useful behavioral context beyond what the annotations provide, and there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short paragraphs with a clear return type and auth status. Every sentence adds value, and the most important information (what it does and what it returns) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple venue lookup with no output schema, the description adequately explains the return structure and auth requirements. It does not cover edge cases like invalid IDs or pagination, but given the simplicity of the tool and the openWorldHint annotation, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three parameters (venueIds, season, hydrate) have descriptions. The tool description adds little parameter-specific meaning; it just restates that venueIds are used. Baseline 3 is appropriate because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (venues) and the input (venueIds), and the return fields are listed. It lacks an explicit verb like 'get' or 'retrieve', and there is no direct comparison to other MLB tools, but the purpose is unambiguous for a venue lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need venue details for one or more venue IDs. However, it does not explicitly state when not to use this tool or mention alternatives from the sibling list (e.g., mlb_teams for venue info via team endpoints). It provides clear context but no exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_categoriesARead-onlyIdempotent
The classes running at one event — MotoGP, Moto2, Moto3, MotoE.
Returns: [{id (uuid), name:'MotoGP™', legacy_id}] — id is the categoryUuid the session and standings tools need
Example: Classes at one Grand Prix {"eventUuid": "0f4c9f38-3e30-40f4-8a4a-9e05ba0d0daa"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventUuid | Yes | Event uuid from motogp_events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable context beyond annotations: the exact return structure, the semantic meaning of the id field, and the absence of authentication requirements. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line definition, a return format specification, an example, and an auth note. Each section earns its place with no redundant information, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only one parameter, full schema coverage, and strong annotations, the description provides sufficient additional context: return format, field semantics, a concrete example, and auth requirements. It is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter eventUuid, which is described as 'Event uuid from motogp_events.' The description adds a concrete example UUID, but this does not fundamentally enhance understanding beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as returning the classes/categories (MotoGP, Moto2, etc.) running at a specific event. It specifies the output fields and connects to other motogp tools (sessions, standings), distinguishing it from sibling tools like motogp_events or motogp_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that the returned `id` is the categoryUuid needed by session and standings tools, providing clear use-case context. It also includes an example and notes that no auth is needed, but it does not explicitly mention alternatives to avoid or conditions when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_eventsARead-onlyIdempotent
The Grand Prix weekends in a season, with circuit, country and dates.
Returns: [{id (uuid), name, short_name:'QAT', sponsored_name, date_start, date_end, circuit:{id, name, nation}, country:{iso, name}, season, event_files}]
Example: Completed rounds of a season {"seasonUuid": "dd12382e-1d9f-46ee-a5f7-c5104db28e43", "isFinished": true}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| isFinished | No | true = completed rounds only. | |
| seasonUuid | Yes | Season uuid from motogp_seasons (a year like '2024' will NOT work). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent; the description adds the return schema, an example, and explicit auth requirement ('Auth: none needed'). This supplements the structured hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact labeled sections (summary, returns, example, auth) convey maximal useful information without waste. The example JSON is integral to understanding the return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description compensates by fully listing return fields and providing an example. Combined with the rich input schema and annotations, it is complete for a read-only list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage, describing both seasonUuid and isFinished with helpful guidance. The description's example reinforces usage but does not add material semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('Grand Prix weekends in a season') with key attributes (circuit, country, dates) and a return structure. This clearly distinguishes it from sibling tools like motogp_sessions and motogp_seasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example and note that seasonUuid comes from motogp_seasons give clear usage context. It does not explicitly name alternative tools or state when not to use it, but the intended use case is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_seasonsARead-onlyIdempotent
Every MotoGP season (1949 →) with its uuid — the entry point to everything else.
Returns: [{id (uuid), year, current}] (top-level array, newest first) — id is the seasonUuid every other tool needs; current: true marks the live season
Example: All seasons
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses the exact return shape (array of {id, year, current}), ordering (newest first), semantics of the 'current' flag, and that no auth is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with purpose, followed by return structure and auth. The 'Example: All seasons' line is somewhat redundant but does not add meaningful length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing tool, this description fully equips an agent: it explains the output format, the meaning of each field, ordering, and lack of auth. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the empty schema is fully described. The description adds no parameter-specific details, but none are needed; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Every MotoGP season (1949 →) with its uuid' clearly states the resource and scope, and 'the entry point to everything else' distinguishes it from sibling tools like motogp_events and motogp_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'the entry point to everything else' and that 'id' is the seasonUuid other tools need, giving clear when-to-use context. It does not name specific alternative tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_session_classificationARead-onlyIdempotent
The result of one session: finishing order, rider, team, bike, time/gap and points.
Returns: {classification:[{position, points, total_laps, time, gap:{first, lap}, rider:{id, full_name, number, country}, team:{name}, constructor:{name}, average_speed, top_speed, status}], records, file}
Example: A race result {"sessionUuid": "5b0827b6-7faf-4a1b-a4c2-de630ba1941a"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| test | No | Set true only for pre-season test sessions. | |
| sessionUuid | Yes | Session uuid from motogp_sessions. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is clear. The description adds valuable context: no authentication is needed, and it details the response structure (classification array with rider, team, time/gap, etc.), which is especially helpful given the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise and front-loaded: first line states purpose, then return structure, then example/auth. The 'Example: A race result' section is slightly ambiguous (it appears to be an input example, not an output example), but overall the text is efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one required parameter, the description is largely complete. It provides a detailed return structure, compensating for the missing output schema. However, the 'records' and 'file' fields in the return object are unexplained, and there is no guidance on invalid sessionUuid behavior, so it stops short of full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; it only includes an example of sessionUuid in the example section, while the optional 'test' parameter is explained only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns the result of one session with finishing order, rider, team, bike, time/gap, and points. It distinguishes from sibling tools such as motogp_sessions (which lists sessions) and motogp_standings (which provides standings) by focusing specifically on session classification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you need the classification/result for a single session. However, the description does not explicitly mention alternatives, exclusions, or how to obtain a sessionUuid (though the schema notes it comes from motogp_sessions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_sessionsARead-onlyIdempotent
The sessions for one class at one event — practice, qualifying, sprint and race.
Returns: [{id (uuid), type:'RAC'|'SPR'|'Q1'|'Q2'|'FP1'|'PR', number, date, condition:{track, air, humidity, ground, weather}}] — pick type 'RAC' for the race
Example: Sessions for MotoGP at one round {"eventUuid": "0f4c9f38-3e30-40f4-8a4a-9e05ba0d0daa", "categoryUuid": "e8c110ad-64aa-4e8e-8a86-f2f152f6a942"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventUuid | Yes | Event uuid. | |
| categoryUuid | Yes | Category uuid (both are required — one alone returns 400). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, which cover safety. The description adds that no authentication is needed—a useful behavioral fact—and clarifies the exact return structure with session type enums. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line summary, a return type definition, a concrete example, and an auth note. Every section earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters and no output schema, the description fully covers inputs, outputs, and usage. It provides the return fields, an example, the race-selection hint, and auth requirement, making it self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both parameters, including that both are required and one alone returns 400. The description's example with real UUIDs adds context but no additional semantic meaning beyond the schema, so the baseline of 3 applies given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning session data (practice, qualifying, sprint, race) for one class at one event. It distinguishes itself from sibling tools like motogp_standings and motogp_session_classification by focusing on session listings rather than results or standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example showing how to request MotoGP sessions for a round, and includes guidance to pick type 'RAC' for the race. It clearly implies when to use the tool, though it does not explicitly name alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motogp_standingsARead-onlyIdempotent
Championship standings for one class in one season.
Returns: {classification:[{position, points, rider:{id, full_name, number, country}, team:{name}, constructor:{name}}], file}
Example: MotoGP riders' championship {"seasonUuid": "dd12382e-1d9f-46ee-a5f7-c5104db28e43", "categoryUuid": "e8c110ad-64aa-4e8e-8a86-f2f152f6a942"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| seasonUuid | Yes | Season uuid. | |
| categoryUuid | Yes | Category uuid — the classes have separate championships. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, and idempotent hints. The description adds meaningful context by specifying the return structure (classification list with rider, team, constructor fields) and explicitly stating no authentication is needed, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, starting with the core purpose, then the return shape, a concrete example, and authentication requirement. Every section earns its place without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description provides a sufficient return outline and a realistic example. It is complete enough for a two-parameter read-only lookup, though the meaning of the 'file' field in the response is not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters completely, and the description adds no new constraints or formats beyond what the schema provides. The example gives concrete UUIDs but does not enhance the semantics of the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns championship standings for a specific class and season, which distinguishes it from other standings tools and MotoGP session-specific endpoints. The example clarifies the exact resource being accessed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the description and example, but there is no explicit guidance on when to use this tool vs. alternatives like motogp_session_classification or other standings endpoints. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysportsfeeds_boxscoreARead-onlyIdempotent
Full box score for one game, team and player level.
Returns: {game:{…}, scoring:{…}, stats:{away:{teamStats:[…], players:[{player:{id, firstName, lastName, position}, playerStats:[…]}]}, home:{…}}} — SHAPE FROM VENDOR DOCS. The game id may be given as '20240115-LAL-BOS', which is often easier than looking one up.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One game's box score {"league": "nba", "season": "current", "game": "20240115-LAL-BOS"}
Auth: needs your own key in MYSPORTSFEEDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game id, or the date-team form '20240115-LAL-BOS'. Required — part of the URL path. | |
| league | Yes | League. One of: nfl, nba, mlb, nhl. Required — part of the URL path. | |
| season | Yes | Season string. Required — part of the URL path. | |
| playerstats | No | Restrict to named stat groups. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety is covered. The description adds valuable behavioral context: the return shape is from vendor docs and unverified, the agent should inspect the actual payload, and the tool requires an API key in MYSPORTSFEEDS_API_KEY. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, return shape, caveat, example, and auth. It is slightly long due to the detailed return shape, but every section carries necessary information, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description provides a detailed return shape approximation, a usage example, auth requirements, and a critical caveat about the unverified payload. It doesn't cover season format details or playerstats value options, but those are partially in the schema, and the overall picture is solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the convenient game id form '20240115-LAL-BOS' and including a full example mapping league, season, and game. It doesn't add detail for playerstats, but the schema already describes it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'Full box score for one game, team and player level' is a specific verb+resource+scope. It clearly distinguishes this tool from sibling tools like mysportsfeeds_games, mysportsfeeds_player_gamelogs, and other league-specific boxscore tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the tool is for a single game's box score and provides a concrete usage example. It gives guidance on the game id format (date-team string), but doesn't explicitly name alternatives or exclusions relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysportsfeeds_gamesARead-onlyIdempotent
Games for a season in one league, with scores and venue.
Returns: {lastUpdatedOn, games:[{schedule:{id, week, startTime, awayTeam:{id, abbreviation}, homeTeam:{…}, venue, playedStatus}, score:{awayScoreTotal, homeScoreTotal, quarters|periods|innings:[…], currentQuarter, currentIntermission}}]} — SHAPE FROM VENDOR DOCS. NOTE identity lives under schedule and the result under score: a game is TWO nested objects, not one flat one.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: This NFL season's games {"league": "nfl", "season": "current"}
Auth: needs your own key in MYSPORTSFEEDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter, e.g. '20240115' or 'from-20240101-to-20240131'. | |
| team | No | Team abbreviations. | |
| league | Yes | League. One of: nfl, nba, mlb, nhl. Required — part of the URL path. | |
| season | Yes | 'current', 'latest', or explicit: NFL/MLB use '2023-regular', NBA/NHL use '2023-2024-regular'. Required — part of the URL path. | |
| status | No | unplayed, in-progress, final. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides substantial behavioral context beyond the annotations: a detailed return shape, a crucial note about the nested schedule/score structure, an explicit warning that the shape is unverified and approximate, and an authentication requirement. This goes well beyond the readOnlyHint/openWorldHint/idempotentHint annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose sentence, a detailed return-shape block, important notes about structure and verification, an example, and an auth line. While the return shape block is lengthy, every sentence earns its place, and the information is dense without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a full return shape, a caveat about unverified vendor documentation, an example invocation, and auth guidance. This gives an agent nearly all the context needed to safely and correctly invoke the tool, including a warning to inspect the live payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already gives comprehensive descriptions for all 5 parameters, including enums, URL path details, and formats for league/season. The description's example only repeats what the schema states and adds no new semantic meaning. With 100% schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Games for a season in one league, with scores and venue,' which identifies the resource (games), the scope (season and league), and key data fields. This is distinct from sibling tools like mysportsfeeds_boxscore (single game) or mysportsfeeds_standings, making the purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for season-level game data with an example ('This NFL season's games') and notes authentication, but it does not explicitly state when to prefer this tool over alternatives such as mysportsfeeds_boxscore or mysportsfeeds_standings. Guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysportsfeeds_injuriesARead-onlyIdempotent
Current injury list for a league.
Returns: {players:[{id, firstName, lastName, position, currentTeam:{abbreviation}, currentInjury:{description, playingProbability}}]} — SHAPE FROM VENDOR DOCS. Note there is NO season segment on this path — injuries are always 'now'.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NBA injuries {"league": "nba"}
Auth: needs your own key in MYSPORTSFEEDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Team abbreviations. | |
| league | Yes | League. One of: nfl, nba, mlb, nhl. Required — part of the URL path. | |
| player | No | Player ids or slugs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, and idempotentHint. The description adds transparency about the unverified response shape, explicitly warning it's from vendor docs and not confirmed via live response, advising to inspect the actual payload. This goes beyond the annotations to disclose reliability and the 'always now' behavior. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by the return shape, caveats, example, and auth. It is somewhat long due to the reliability warning, but every sentence earns its place given the unverified nature of the API. No wasteful repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides an approximate return shape, notes the absence of a season segment, gives an example call, and states auth requirements. It covers the essential operational details an agent needs, though it doesn't clarify behavior when optional team/player parameters are used, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already provides descriptions for all three parameters (league enum, team abbreviations, player ids/slugs) at 100% coverage. The description adds only a minor example and notes league is required and part of the URL path, which is not essential. It does not compensate significantly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a current injury list for a league, with a specific resource and scope. It adds the nuance that injuries are always 'now' with no season segment, which helps distinguish from historical endpoints, though it doesn't explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete example and notes the auth requirement (own key in MYSPORTSFEEDS_API_KEY), plus clarifies the 'always now' context. However, it does not mention when to prefer this tool over other injury tools (e.g., sportsdataio_nfl_injuries, mfl_injuries) or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysportsfeeds_player_gamelogsARead-onlyIdempotent
Per-game statistics for players across a season — the cleanest surface this API has.
Returns: {gamelogs:[{game:{id, startTime, awayTeamAbbreviation, homeTeamAbbreviation}, player:{id, firstName, lastName, position, jerseyNumber}, team:{id, abbreviation}, stats:{…sport-specific groups…}}]} — SHAPE FROM VENDOR DOCS. stats groups differ per sport (passing/rushing for NFL, offense/rebounds for NBA).
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A team's player game logs {"league": "nba", "season": "current", "team": ["LAL"]}
Auth: needs your own key in MYSPORTSFEEDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date filter. | |
| team | No | Team abbreviations. | |
| league | Yes | League. One of: nfl, nba, mlb, nhl. Required — part of the URL path. | |
| player | No | Player ids or 'firstname-lastname' slugs. | |
| season | Yes | Season string. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable caveats: the return shape comes from vendor docs and is unverified, and stats groups differ by sport. These disclosures go beyond the annotations and inform the agent that fields may not be reliable, which is critical for correct usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded with a one-sentence purpose, followed by a clearly formatted return shape, a necessary caveat about unverified docs, a practical example, and an auth note. Every section earns its place: the return shape is essential given no output schema, the caveat mitigates risk, and the example aids invocation. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and five parameters, the description provides substantial context: a return shape (albeit unverified), a usage example, auth requirements, and sport-specific stats note. However, it does not explain whether parameters like team and player can be combined, or how date filtering interacts with season, and pagination is not mentioned. These gaps are offset by the example and the caveat, making it sufficiently complete for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all five parameters (100% coverage), so the baseline is 3. The description enhances this with a concrete example showing league='nba', season='current', and team=['LAL'], illustrating how to filter by team. It also clarifies that league and season are part of the URL path, matching the schema descriptions, but the example adds practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Per-game statistics for players across a season', which is a specific verb+resource statement that clearly defines the tool's function. It distinguishes itself from sibling tools like mysportsfeeds_boxscore and mysportsfeeds_games by focusing on season-wide per-game player logs. The additional return shape and example reinforce the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving player game logs but does not explicitly state when to use this tool versus alternatives. The phrase 'the cleanest surface this API has' hints at superiority, but there is no direct comparison or exclusion of other mysportsfeeds tools. An example call is provided, but no guidance on when not to use this tool or which sibling to choose instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysportsfeeds_standingsARead-onlyIdempotent
Standings for a league and season.
Returns: {teams:[{team:{id, abbreviation, city, name}, stats:{standings:{wins, losses, winPct, gamesBack}}, divisionRank:{rank, gamesBack}, conferenceRank:{…}, overallRank:{…}}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: This season's standings {"league": "nba", "season": "current"}
Auth: needs your own key in MYSPORTSFEEDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Team abbreviations. | |
| league | Yes | League. One of: nfl, nba, mlb, nhl. Required — part of the URL path. | |
| season | Yes | Season string. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description goes beyond by disclosing that the return shape is unverified against a live response, warning the agent to treat it as approximate, and stating the auth key requirement. This adds valuable context about reliability and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: summary, return shape, caveat, example, and auth. Each section adds value, and the format is easy to parse. Slightly longer than necessary but all content is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides an approximate return shape, which helps the agent understand expected data. It also includes an example and auth requirements. Missing details like full season format options (e.g., '2024-2025') are minor; overall it's sufficiently complete for a read-only standings tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds an example showing a concrete invocation (league: 'nba', season: 'current') and the fact that 'current' is a valid season value. This clarifies usage beyond the schema's generic 'Season string' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns standings for a league and season, with a concrete return shape and example. It is specific about the resource (standings) and scope, though it doesn't explicitly distinguish from sibling standings tools beyond the provider prefix in the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the example and first line, and the auth note explains a prerequisite. However, there are no explicit exclusions or comparisons to alternative standings tools (e.g., pl_standings, nhl_standings), which would help an agent choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nascar_race_listARead-onlyIdempotent
Every race in a season across all three series, with winner, track, distance, cautions and lead changes. LARGE (~430 KB).
Returns: {series_1:[{race_id, series_id, race_season, race_name, track_name, track_id, date_scheduled, scheduled_distance, actual_laps, number_of_cautions, number_of_lead_changes, average_speed, margin_of_victory, pole_winner_driver_id, winner_driver_id, attendance}], series_2:[…], series_3:[…]} — series 1=Cup, 2=Xfinity, 3=Truck
Example: 2024 season across all series {"season": 2024}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | Season year, e.g. 2024. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context by flagging the payload as LARGE (~430 KB), which helps agents prepare for a big response. It also includes the return structure and authentication requirements, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, a size warning, an explicit return-format block, an example call, and an auth note. Every section serves a purpose and nothing is redundant. It is longer than a one-liner but earns its length by providing concrete output structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is remarkably complete. It specifies the exact return shape with all field names, clarifies the series mapping (1=Cup, 2=Xfinity, 3=Truck), gives an example, and notes the large response size. No important usage context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter, 'season', is documented in the schema as required. The description adds only an example ({'season': 2024}) and mentions in the schema that it's part of the URL path, but it does not add material semantic detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns 'Every race in a season across all three series' with a specific list of included data fields (winner, track, distance, cautions, lead changes). This is a specific verb+resource combination that distinguishes it from sibling tools like nascar_weekend_feed by scope (season-wide vs. weekend-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear when to use this tool: when you need all races in a season across the three NASCAR series. It does not explicitly name alternatives or exclusions, but the scope is unambiguous. No when-not-to-use guidance is provided, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nascar_weekend_feedARead-onlyIdempotent
One race weekend in full: the finishing order with laps led, points and status, plus every practice and qualifying run.
Returns: {weekend_race:[{race_id, race_name, track_name, results:[{finishing_position, starting_position, car_number, driver_fullname, team_name, laps_completed, laps_led, points_earned, status, delta_leader}], caution_segments, race_comments}], weekend_runs:[{run_type, run_name, results:[{finishing_position, driver_name, best_lap_time, best_lap_speed}]}]} — weekend_race is the race, weekend_runs is practice + qualifying. WARNING: results is NOT sorted and INCLUDES non-starters with finishing_position 0 (DNQ/DNS). Verified on the 2024 Daytona 500, where results[0] is a driver who did not qualify. The winner is the row with finishing_position == 1 — never results[0].
Example: One Cup race weekend {"season": 2024, "series": 1, "raceId": 5376}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceId | Yes | Race id from nascar_race_list (the `race_id` field). Required — part of the URL path. | |
| season | Yes | Season year. Required — part of the URL path. | |
| series | No | 1 = Cup, 2 = Xfinity, 3 = Craftsman Truck. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds a valuable warning that results are unsorted, include non-starters with finishing_position 0, and that the winner must be found via finishing_position == 1, not results[0]. This goes beyond annotations to disclose a real data quirk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy due to the explicit return structure and warning, but every part earns its place: there's no output schema, so the return structure is essential; the sorting warning is critical for correct data interpretation; the example and auth note are useful. It is front-loaded with a clear summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there's no output schema, the description fully compensates by specifying the entire return JSON structure, highlighting the non-sorted/non-starter quirk, providing a concrete example, and noting auth requirements. Combined with the well-covered schema and annotations, the tool is fully understandable for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented. The description adds a concrete example and notes that raceId comes from nascar_race_list, but this is marginal. It doesn't introduce new parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line specifically states what the tool does: returns a complete race weekend including finishing order, laps led, points, status, plus practice and qualifying runs. This clearly distinguishes it from sibling tools like nascar_race_list, which provides a list of races, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the example (using raceId from nascar_race_list) and the mention of race weekend vs race list, but it doesn't explicitly state when to use this tool instead of alternatives or list exclusions. The guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_boxscoreARead-onlyIdempotent
Live/final box score for one game from the CDN: per-player and per-team stat lines, by period. gameId comes from nba_scoreboard_today or nba_schedule.
Returns: {game:{gameId, homeTeam:{teamId, players:[{name, statistics}]}, awayTeam:{...}}}
Example: Box score for one game. {"gameId": "0022300001"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes | 10-digit NBA game id, e.g. 0022300001 (from nba_scoreboard_today / nba_schedule). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent. The description adds useful non-obvious details: the data comes from the CDN, the response shape (game/homeTeam/awayTeam/players), and that no auth is needed. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, return shape, example, and auth. Every sentence earns its place, and the example is immediately useful for invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter tool with no output schema. The description provides the return structure, an example, auth requirements, and the upstream source for gameId—enough for an agent to select and invoke correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers gameId 100% with type, format, example, source, and URL-path note. The description only restates the source and adds an example, providing no new parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (box score for one NBA game) and scope (per-player and per-team stat lines, by period), distinguishing it from scoreboard/schedule/play-by-play siblings. It lacks an explicit verb like 'retrieves' or 'gets,' but 'Live/final box score for one game' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states that gameId comes from nba_scoreboard_today or nba_schedule, providing a clear upstream dependency and retrieval context. It does not explicitly mention alternative tools or when not to use it, but the 'box score' scope and live/final framing give sufficient situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_daily_lineupsARead-onlyIdempotent
Projected/confirmed starting lineups for a date's games, from the stats.nba.com JS data feed. date is YYYYMMDD.
Returns: {games:[{gameId, homeTeam, awayTeam, lineups}]} (feed shape varies)
Example: Daily lineups for a date. {"date": "20260101"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date as YYYYMMDD, e.g. 20260101. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by identifying the data source (stats.nba.com JS feed), noting the return shape with an example, and warning that the feed shape varies. It also explicitly states 'Auth: none needed.' This goes beyond what annotations provide, though it does not cover rate limits or deeper quirks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by data format, return shape, example, and auth. Each sentence contributes useful information. Minor redundancy exists between the date format in the first paragraph and the example, but overall it is well-structured and economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description is adequately complete. It covers the data source, the query parameter, the return shape (with a caveat that it varies), an example, and authentication requirements. It could be slightly clearer about the difference between 'projected' and 'confirmed' lineups, but this is not a major gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'date' parameter format and requirement. The description repeats the format (YYYYMMDD) and gives an example, but adds no new semantic meaning beyond what the schema provides. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: 'Projected/confirmed starting lineups for a date's games.' It distinguishes this from sibling NBA tools like nba_scoreboard_today or nba_boxscore by focusing specifically on lineups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: for a given date's starting lineups. However, it does not explicitly mention alternative tools or exclusion criteria, so it does not earn a 5, but the usage scenario is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_odds_todayARead-onlyIdempotent
Sportsbook odds for today's games from the live CDN odds feed (spread, money line, total per game and book).
Returns: {games:[{gameId, markets:[{name, books:[{name, outcomes:[...]}]}]}]}
Example: Today's game odds.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description goes beyond by clarifying the live CDN data source, noting that no authentication is needed, and providing a return structure. These are useful behavioral details not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence conveys the core purpose, followed by a concise return structure and a note on authentication. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter read-only tool with strong annotations, the description is complete. It states the data source, the odds types, the return structure, and auth requirements. There is no output schema, so the provided return shape compensates well. Minor ambiguities like timezone are not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter information because there are none, but it does explain the output granularity (per game and book), which indirectly helps understand the data shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides sportsbook odds for today's NBA games from a live CDN feed, specifying the odds types (spread, money line, total). This is specific and distinguishes it from sibling tools that cover other sports or generic odds APIs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for today's NBA odds, and the example 'Today's game odds' reinforces the intended use case. However, it does not explicitly mention alternatives or when not to use it, so it misses the 'when-not' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_playbyplayARead-onlyIdempotent
Event-level play-by-play log for one game from the CDN: every action with clock, score, player and description. gameId from nba_scoreboard_today / nba_schedule.
Returns: {game:{gameId, actions:[{actionNumber, period, clock, scoreHome, scoreAway, description}]}}
Example: Play-by-play for one game. {"gameId": "0022300001"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes | 10-digit NBA game id, e.g. 0022300001. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate safety. It adds value by describing the return structure, the CDN source, and that no authentication is needed. This goes beyond the annotations and provides useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: a clear definition, a returns object, a concrete example, and auth note. Every sentence serves a purpose with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool, the description is complete. It explains the return format with nested fields, provides a usage example, and mentions authentication requirements. No critical information is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single parameter gameId with format and required status. The description supplements this by stating where to obtain the gameId from other NBA tools, which adds practical semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides an 'Event-level play-by-play log for one game' with every action including clock, score, player, and description. It is specific about the resource and scope, and references where to obtain the gameId, which distinguishes it from schedule/scoreboard tools. However, it does not explicitly compare against nba_boxscore, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'gameId from nba_scoreboard_today / nba_schedule', giving clear guidance on how to obtain the required parameter. This implies the tool is for retrieving play-by-play for a known game. It does not explicitly mention when not to use it, but the context is well-established by the source reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_scheduleARead-onlyIdempotent
Full league schedule for the current season (every game, date, broadcasters, arena). Large payload (~8 MB) — prefer nba_scoreboard_today for just today.
Returns: {leagueSchedule:{seasonYear, gameDates:[{gameDate, games:[{gameId, homeTeam, awayTeam, ...}]}]}}
Example: Whole-season schedule.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description reveals the payload size (~8 MB), the exact return structure with leagueSchedule/seasonYear/gameDates, and that no authentication is needed. These are concrete behavioral facts that help an agent anticipate cost and parse output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each with a distinct purpose: scope, performance warning, return format, and auth. It is front-loaded with the core purpose and contains no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple no-input data retrieval, and the description covers all essential aspects: what data is returned, how large the response is, when to use an alternative, and the response shape. This is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the input schema is already complete. The description adds no parameter-specific detail, which is appropriate given the tool takes no arguments. Per the rubric, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Full league schedule for the current season (every game, date, broadcasters, arena)' which is a specific verb-resource combination. It also differentiates from nba_scoreboard_today by recommendation, making the tool's niche clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Large payload (~8 MB) — prefer nba_scoreboard_today for just today,' naming an alternative and giving a clear condition for not using this tool. This provides explicit when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_scoreboard_todayARead-onlyIdempotent
Today's games from the live CDN scoreboard: matchups, period/clock state, live scores and game ids. The fastest way to get today's gameId values for nba_boxscore / nba_playbyplay.
Returns: {scoreboard:{gameDate, games:[{gameId, gameStatus, gameStatusText, period, gameClock, homeTeam, awayTeam}]}}
Example: Today's NBA scoreboard.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: the live CDN source, the return structure, a concrete example, and 'Auth: none needed' – all beyond what annotations provide, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a clear opening sentence, a return type, an example, and an auth note. Every sentence adds value, and the most important information (purpose and how to use the results) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description fully compensates by providing the return shape, example, auth requirement, and relationship to sibling tools. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema is empty, so schema description coverage is 100% vacuously. The description further clarifies that no parameters are required and provides the return structure and example, exceeding the baseline for a 0-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides today's games from the live CDN scoreboard, including matchups, scores, period/clock state, and game IDs. It also distinguishes itself from siblings by explicitly positioning it as the fastest way to get gameIds for nba_boxscore/nba_playbyplay.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names nba_boxscore and nba_playbyplay as consumers of the gameId, giving clear guidance on when to use this tool. The 'today' scope also differentiates it from schedule or historical tools, and the reference to 'fastest way' indicates a preferred choice for this specific purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_stats_callARead-onlyIdempotent
Gateway to the stats.nba.com /stats/ analytics API (138 operations). Supply an
operation (the /stats/ path segment, e.g. "leaguedashplayerstats",
"shotchartdetail", "boxscoretraditionalv3", "playercareerstats") plus a
query_params map; each operation already carries NBA's full default param set,
so override only the fields you need (e.g. {Season: "2024-25", PlayerID: "201939"}).
Browse every operation, its required params and its defaults in the
nba://stats/operations resource. Most responses are column-oriented
({resultSets:[{name, headers, rowSet}]}); zip headers with each row.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral detail beyond the annotations: it discloses the column-oriented response format ({resultSets:[{name, headers, rowSet}]}) and instructs to zip headers with rows. It also notes that no auth is needed and that guessing an operation returns an error (in the schema description). This enriches the agent's understanding of how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense. It front-loads the purpose, then covers usage guidance, resource reference, response format, and authentication in a logical flow. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that wraps 138 possible operations, the description is remarkably complete. It covers invocation, default param behavior, where to browse operations, the common response shape, and auth requirements. It appropriately points to the catalogue resource for operation-specific details, so the agent knows where to look for the rest. The presence of rich annotations and full schema descriptions further complements this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description meaningfully adds to the schema: it explains that operation is a '/stats/ path segment' and that query_params overrides the pre-loaded default parameter set, giving a concrete example ({Season: '2024-25', PlayerID: '201939'}). This goes beyond the schema's generic descriptions and helps the agent construct correct calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Gateway to the stats.nba.com /stats/ analytics API (138 operations)', giving a clear verb ('Gateway') and specific resource. It lists concrete operation examples (e.g., 'leaguedashplayerstats', 'shotchartdetail') that are distinct from the sibling NBA-specific tools, making its role as a raw API gateway unambiguous. Though it doesn't explicitly say 'use this instead of balldontlie_nba_stats', the specificity of the resource and operations differentiates it well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the user exactly what to supply (operation and query_params), explains that each operation has NBA's full default param set and only overrides are needed, and directs to the nba://stats/operations resource for full details. It doesn't explicitly name alternative tools or exclusion criteria, but the usage context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_ladderARead-onlyIdempotent
The NBL ladder (standings) for one season — 10 clubs with position, played/won/lost, points_percentage, win_percentage, points_for/against, last_5 and current streak. year is the season start year (2025 = current NBL26).
Returns: {type, count, data:[{id, position, played, won, lost, points_percentage, win_percentage, points_for, points_against, last_5, streak, team}]}
Example: Current-season ladder {"year": 2025, "seasonType": "regular"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| seasonType | No | Season phase: regular (the main season ladder), all, in_season, preseason or finals. | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds valuable behavioral context beyond annotations by stating 'Auth: none needed' and describing the exact return payload structure (type, count, data array with fields), which helps the agent understand what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: it opens with the purpose, clarifies the year parameter, lists the return format, provides an example, and ends with auth. Every sentence serves a distinct purpose, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only standings tool with two parameters and no output schema, the description is fully adequate. It covers the purpose, parameter semantics, return fields, an example, and auth requirements. Combined with the annotations (read-only, open-world, idempotent), the agent has all necessary information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the `year` mapping and provides an example ({'year':2025,'seasonType':'regular'}), but the parameters are already well-described in the schema (e.g., 'Season START year', enum values). The example adds marginal value but does not introduce new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the NBL ladder (standings) for a season, including the specific data fields (position, played/won/lost, points_percentage, etc.) and the number of clubs (10). It distinguishes itself from sibling tools like nbl_schedule or pl_standings by focusing on the ladder resource and season scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to invoke the tool, including the meaning of the `year` parameter with the 2025=NBL26 mapping and the `seasonType` values, plus a concrete example for the current season. It does not explicitly mention alternatives or exclusions, but the context is sufficient for an agent to know when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_match_outcomesARead-onlyIdempotent
Per-team match outcomes (results) for a season — win/loss rows by team, for head-to-head and form analysis.
Returns: {type, count, data:[{team, …per-match outcome rows}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| seasonType | No | Season phase (default regular). | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds meaningful context beyond these: the response structure ('type, count, data'), the per-team grouping of outcome rows, and the absence of auth requirements. It also specifies the season-start-year convention via parameter documentation. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence adds value: the first sentence states what it does, the second describes the return shape, and the third clarifies auth requirements. No filler or repetition of schema details beyond helpful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a simple 2-parameter schema, clear annotations, and no output schema, the description is largely complete: it covers the resource, the grouping, the response envelope, and auth. It doesn't detail exact row fields (e.g., home/away scores), but the description says 'per-match outcome rows' and the schema handles the input side. Slightly more detail on what fields are in each row would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage, so the baseline is 3. The description adds value by explaining the year parameter's season-start semantics ('2025 = NBL26') and why it is required ('part of the URL path'). It also gives context for the seasonType parameter by showing example enum values inline (regular, finals, preseason), reinforcing the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Per-team match outcomes (results) for a season — win/loss rows by team, for head-to-head and form analysis.' This clearly identifies the resource (match outcomes), the grouping (per-team), and the intended analytic use cases (head-to-head and form analysis). It distinguishes itself from siblings like nbl_ladder (standings), nbl_schedule, and nbl_next_matches by focusing on historical win/loss rows per team.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the purpose of the data ('for head-to-head and form analysis'), which strongly implies when to use it. It also includes a return shape and notes that no auth is needed. However, it does not explicitly name alternative tools or state when not to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_newsARead-onlyIdempotent
NBL news articles (latest ~200) — each with title, slug, body (HTML), excerpt, sub_headline, byline, published_date, categories/tags, a related_player and match_slug link, and featured_image_url. NOTE: this feed returns a RAW ARRAY (not the {type,count,data} envelope). Use limit to cap rows.
Returns: array of {id, status, title, slug, body, excerpt, sub_headline, byline, published_date, categories, tags, related_player, match_slug, featured_image_url, likes} (RAW ARRAY, not enveloped)
Example: Latest 10 NBL articles {"limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max articles to return (default: all ~200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent, open world), the description adds crucial behavioral context: it returns a raw array rather than an envelope, defaults to ~200 articles, and states 'Auth: none needed.' This enriches the agent's understanding of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, a returns section, an example, and an auth note. It is slightly redundant (field list appears twice), but the content is relevant and front-loaded, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description provides a full breakdown of the return fields, an example call, the raw array format, and authentication requirements. It fully describes the tool's behavior and the single parameter, making it complete for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a complete description of the `limit` parameter, including default behavior. The description repeats this ('Use `limit` to cap rows') and gives an example, but adds no new semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns NBL news articles, which is a specific resource. It lists the exact fields and notes the raw array format, making the tool's purpose unambiguous and distinct from other news-related siblings by its NBL scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching latest NBL news but does not explicitly compare with alternatives or state when not to use the tool. The only guidance is to use `limit` to cap rows, which is more parameter usage than tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_next_matchesARead-onlyIdempotent
Upcoming matches across all NBL teams for a season (empty in the deep off-season). For the full fixture incl. completed games use nbl_schedule.
Returns: {type, count, data:[{id, start_time, round, home_team, away_team}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond these: it discloses the return shape ({type, count, data:[...]}), notes the tool only returns upcoming matches (not completed), flags the empty off-season behavior, and states that no auth is needed. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: it leads with the primary purpose, immediately provides the alternative tool for related cases, then lists the return format and auth requirement. Every sentence provides useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple read-only tool: it explains the scope (upcoming matches per season), gives return structure, warns about off-season emptiness, names the sibling tool for full fixtures, and confirms no auth is needed. The schema fully documents the sole parameter, so no gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the only parameter 'year' with detailed semantics (season start year mapping to NBL seasons and required URL path component). The tool description adds no additional parameter information. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns 'Upcoming matches across all NBL teams for a season.' It also distinguishes itself from the sibling tool nbl_schedule by explicitly noting that the full fixture including completed games is available via nbl_schedule, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus the alternative: use nbl_schedule for the full fixture including completed games. It also notes that the result may be 'empty in the deep off-season,' giving context about expected data availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_player_boxscoresARead-onlyIdempotent
Game-by-game box scores for one player across a season — per match the points/rebounds/assists/blocks/steals/turnovers and playing position. The score-series / game-log source.
Returns: {type, count, data:[{period, playing_position, points, rebounds, assists, blocks, steals, turnovers}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| playerId | Yes | Player id (UUID) — from nbl_players[].player.id. Required — part of the URL path. | |
| seasonType | No | Season phase (default regular). | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, lowering the burden. The description adds 'Auth: none needed' and the return structure, providing useful context beyond annotations. However, it does not mention rate limits or pagination, which are common behavior details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, front-loading the core purpose in the first sentence. It includes a return format example and auth note, each earning its place without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with clear annotations and schema. The description explains the output shape and scope, but lacks details on what 'period' means or how seasonType affects results. Given the absence of an output schema, the included return structure is helpful, but a bit more context on the period field would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description itself does not add parameter semantics beyond what the schema already provides, such as the year offset explanation and playerId source. Since the schema fully documents the parameters, no additional description is necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Game-by-game box scores for one player across a season' with specific stats listed (points, rebounds, assists, etc.). It also distinguishes itself from siblings by noting 'The score-series / game-log source', which differentiates it from aggregate stats tools like nbl_player_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool ('game-log source', 'per match' granularity) but does not explicitly name alternatives or exclusions. It provides enough context for an agent to infer that this is for per-game data rather than season totals, but lacks a direct 'use this instead of X' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_playersARead-onlyIdempotent
All players for one season (~165) — each with jersey_number, playing_position and embedded player {id, first_name, last_name, …}, team and season objects. The player id (UUID) feeds nbl_player_stats / nbl_player_boxscores.
Returns: {type, count, data:[{jersey_number, playing_position, player:{id, first_name, last_name}, team:{id, name, team_code}, season}]}
Example: All NBL26 players {"year": 2025}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and side-effect expectations. The description adds meaningful context: approximate result count, embedded objects (team, season), and the return shape (type, count, data). It also explicitly states "Auth: none needed," which is useful. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured into three clear sections: overview, return format, and example. It conveys all necessary information without excessive verbosity. The example is compact and practical, and the auth note is a helpful final touch. It loses one point for slight redundancy with the schema's parameter description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by explicitly listing the response structure and embedded fields. It provides a realistic example and explains the relationship between player IDs and other NBL tools. For a simple list tool with one parameter, this is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'year' is already fully documented in the schema with explanation of the season start year and required status. The description adds an example (2025 = NBL26) and reiterates the parameter is part of the URL path, but these are minor additions over the schema. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool lists all players for a given season, specifying the resource (players) and scope (season). It distinguishes itself from sibling tools by noting the player ID feeds nbl_player_stats/nbl_player_boxscores, indicating its role in a broader workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: to get all players for a season, especially to obtain player IDs for subsequent stats/boxscore queries. It provides an example with a concrete year and notes the parameter is part of the URL path, but it does not explicitly state when not to use it or alternative tools for other player-related needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_player_statsARead-onlyIdempotent
Season statistics for one player — points/rebounds/assists/blocks/steals/turnovers and their per-game averages, shooting splits (field goals / three-pointers / free throws made-attempted-percentage), fouls, minutes. playerId is the player UUID from nbl_players.
Returns: {type, count, data:[{points_average, rebounds_total_average, assists_average, blocks_average, steals_average, turnovers_average, field_goals_percentage, three_pointers_percentage, free_throws_percentage, fouls_average, minutes}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Player id (UUID) — from nbl_players[].player.id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior, and the description adds context by specifying the return structure ({type, count, data:[...]}), the exact fields, and that no auth is needed. This goes beyond the annotations, although it does not cover edge cases like empty data or season scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, uses a clear list of stats, and includes a compact return shape. Every sentence serves a purpose: the purpose, the parameter source, the return structure, and auth. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description covers the purpose, parameter origin, return fields, and auth. It does not specify which season (current or a particular season) or pagination, but the given return structure and simple interface make it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema's playerId description includes 'Player id (UUID) — from nbl_players[].player.id'. The description repeats this source ('playerId is the player UUID from nbl_players') but adds no new meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns season statistics for one player, listing specific data points (points, rebounds, assists, blocks, steals, turnovers, shooting splits, fouls, minutes). It clearly differentiates from siblings like nbl_player_boxscores by specifying 'season statistics' rather than per-game box scores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this for a single player's season stats, and it tells the agent to obtain playerId from nbl_players. It does not explicitly contrast with alternatives like nbl_player_boxscores or nbl_stat_leaders, but the phrase 'for one player' plus the data list implies the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_scheduleARead-onlyIdempotent
Every match for one season — each with start_time, round, match_status (complete/upcoming/live), home/away scores, attendance, match_slug/title, a play_by_play flag, the Genius external_id, and full home_team/away_team objects (name, team_code, logos, colours). seasonType=all for the whole season.
Returns: {type, count, data:[{id, external_id, start_time, round, match_status, home_score, away_score, attendance, match_slug, match_title, play_by_play, home_team:{id, name, team_code, team_logo, color_primary}, away_team:{…}}]}
Example: Full NBL26 schedule + results {"year": 2025, "seasonType": "all"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| seasonType | No | Phase to list (default all). | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, setting a safe read operation baseline. The description adds valuable context by detailing the exact return fields, stating 'Auth: none needed', and providing an example. It does not mention pagination or limits, but it is reasonably transparent for a simple schedule endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a minimal one-liner, but the structure is well-organized: a summary sentence, a return-type block, an example, and an auth note. The detailed return structure is justified since no output schema exists, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by showing the complete return shape (including nested team objects), providing a concrete example, and stating authentication requirements. It covers the parameter options and the scope of data ('every match for one season'). Minor gaps like sort order or pagination are not critical for this type of endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'year' and 'seasonType' fully described, including the year-to-season mapping and the enum values. The description's example repeats this same information ('2025 = NBL26', 'seasonType=all') without adding new parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'every match for one season' and enumerates the fields returned, distinguishing it from season-level metadata tools like nbl_seasons or match-outcome tools. However, it lacks an explicit verb like 'list' or 'retrieve', which would make the purpose even more direct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for retrieving a full season's schedule and results, with `seasonType=all` for the entire season. The example call further demonstrates the intended usage. It does not explicitly mention alternatives or when not to use it, but the scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_season_currentARead-onlyIdempotent
The current season(s). Convenience shortcut over nbl_seasons; may return empty in the deep off-season (the call still resolves). Use limit to cap rows.
Returns: {type, count, data:[{id, name, year, season_type, external_id, start_date, end_date}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds valuable behavior: it may return empty in the deep off-season yet still resolve, and includes the exact return shape. It also states auth is not needed. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. Every sentence contributes: purpose, shortcut relationship, off-season caveat, limit usage, return shape, and auth. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one optional parameter and no output schema, the description is fully adequate. It includes return structure, edge-case behavior, and auth info. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single `limit` parameter (default 1, max rows). The description repeats this via 'Use `limit` to cap rows' without adding new meaning, so baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns current season(s) and explicitly positions it as a convenience shortcut over nbl_seasons, distinguishing it from that sibling. The verb and resource are specific, and the off-season behavior is noted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names nbl_seasons as the broader tool this shortcuts, and warns that results may be empty in the deep off-season, which provides practical context for when this tool is appropriate. The mention of the `limit` parameter also aids usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_seasonsARead-onlyIdempotent
Every NBL season (~73: NBL27, NBL26, blitz/preseason/tournament variants…), each with id (UUID), name, year (season start year), season_type, the Genius external_id, and start/end dates. The discovery entry point — take a season's id for nbl_stat_leaders, or its year for the year-scoped feeds. Current regular season is the latest year with season_type=regular.
Returns: {type, count, source, data:[{id, name, year, season_type, external_id, start_date, end_date, competition}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds value by disclosing that no auth is needed, the exact return structure, and the scope ('Every NBL season'), which goes beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with every sentence providing useful information: the scope of data, the downstream tool connections, the current-season heuristic, the return format, and auth requirements. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter discovery tool, the description is complete. It includes the full return schema, gives practical usage guidance, notes auth requirements, and even explains how to derive the current regular season. The absence of an output schema is fully compensated by the explicit 'Returns' section.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so the baseline is 4. The description does not need to explain parameters, but it does explain the output fields in detail, which adds semantic meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns every NBL season with all relevant fields. It also positions itself as the discovery entry point, linking to downstream tools like nbl_stat_leaders and year-scoped feeds, which distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: to get a season's id for nbl_stat_leaders or its year for year-scoped feeds, and how to identify the current regular season. It lacks explicit exclusions or alternative tool comparisons, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_stat_leadersARead-onlyIdempotent
Season statistical leaders (points/rebounds/assists/etc. averages, per player) for one season — pass the season UUID (seasonId) from nbl_seasons (data[].id), NOT the year. Use limit to cap rows (limit=-1 for all).
Returns: {type, count, data:[{player, team, points_average, rebounds_total_average, assists_average, field_goals_percentage, three_pointers_made_average, …}]}
Example: Top 50 scorers for NBL26 {"seasonId": "1f8e4a79-e98b-457b-85a5-e4b898c6c0bd", "limit": 50, "sort": "-points_average"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key, prefix `-` for descending — e.g. -points_average (top scorers), -assists_average, -rebounds_total_average. Any per-game average column works. | |
| limit | No | Max rows; -1 for all. | |
| seasonId | Yes | Season UUID — from nbl_seasons (data[].id, the season_type=regular one for the main leaders). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return shape ({type, count, data:[...]}), explicitly states auth is not needed, and clarifies the ID source. These are behavioral details beyond what the annotations (readOnlyHint, openWorldHint, idempotentHint) already declare. It does not contradict the annotations and provides a safe, read-only operation context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-structured: a clear first sentence defines the purpose, followed by the key ID source caveat, return shape, a concrete example, and auth note. Every sentence earns its place, and the most critical usage information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides a return shape example and explains all parameters well. It covers the essential context: what the tool does, how to identify the season, how to paginate, and what the output looks like. It could mention behavior on invalid seasonId or empty results, but overall it is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond the schema by explaining that seasonId comes from nbl_seasons (data[].id) and must not be the year. It also gives a real example for sort (-points_average) and limit (limit=-1 for all), making the parameter semantics clearer and more actionable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving season statistical leaders (points, rebounds, assists, etc. averages) per player for a single season. It specifies the resource (season leaders) and distinguishes from siblings like nbl_player_stats (per-player game stats) and nbl_team_stats (team stats) by emphasizing per-player averages and season-level aggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on how to use the tool: pass the season UUID from nbl_seasons, NOT the year, and use limit to cap rows. It provides a concrete example with a real seasonId and sort parameter. It does not explicitly name alternative tools for exclusion, but the context about the correct seasonId source is a clear usage guideline that adds value beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_team_rosterARead-onlyIdempotent
One team's roster for a season. teamId comes from the team objects in nbl_players / nbl_schedule / nbl_ladder.
Returns: {type, count, data:[{jersey_number, playing_position, player:{id, first_name, last_name}, team}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| teamId | Yes | Team id (UUID) — from a team object in nbl_players / nbl_schedule. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the return shape and 'Auth: none needed', which are useful behavioral details not covered by annotations. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by a structured returns line and a single auth note. Every sentence provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only roster lookup, the description covers purpose, parameter sourcing, output structure, and authentication requirements. The schema handles parameter details, and the return shape in the description compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (year, teamId) fully documented including the meaning of year and the source of teamId. The description does not add new parameter semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One team's roster for a season', specifying the verb (roster) and the resource scope (one team, one season). It also points to where teamId comes from, distinguishing this from sibling tools like nbl_players, nbl_schedule, and nbl_ladder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the user that teamId must come from nbl_players/nbl_schedule/nbl_ladder team objects, which implies a prerequisite step. It lacks explicit comparison with alternatives or when-not-to-use guidance, but the purpose is specific enough to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_teamsARead-onlyIdempotent
The NBL club catalogue (~78 incl. historical/relocated franchises) — each with id (UUID), name, team_code, team_nickname, logos and brand colours. Join team_id from nbl_players / nbl_schedule back to here.
Returns: {type, count, data:[{id, external_id, name, team_code, team_nickname, team_logo, color_primary, color_secondary}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behaviors. The description adds value by specifying the return structure, noting that it includes historical/relocated franchises, and stating that no auth is needed. This is sufficient for a zero-parameter catalogue tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear one-sentence overview, a formatted return shape, and an auth note. No unnecessary details; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter catalogue tool with rich annotations, the description is complete. It covers what the tool returns, how to relate it to other NBL data, and authentication requirements. The included return shape compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to add parameter semantics. The empty input schema is fully covered by the description (schema coverage 100%). The description correctly implies this is an unfiltered list of all teams.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the NBL club catalogue, listing teams with their IDs, names, codes, logos, and colors. It explicitly specifies the scope (~78 incl. historical/relocated franchises) and differentiates it from related tools by mentioning the join keys from nbl_players/nbl_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on when to use this tool: to join team_id from nbl_players/nbl_schedule to team details. It implies using this when you need team metadata, but does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nbl_team_statsARead-onlyIdempotent
Team statistics for a season — totals and per-game averages across assists, rebounds (offensive/defensive), blocks, steals, turnovers, and shooting (field goals / three-pointers / free throws made-attempted-percentage).
Returns: {type, count, data:[{team, assists, assists_average, defensive_rebounds, blocks, steals, turnovers, field_goals_made, field_goals_attempted, field_goals_percentage, three_pointers_percentage}]}
Example: Team stats, current season {"year": 2025, "seasonType": "regular"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path. | |
| seasonType | No | Season phase (default regular). | regular |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint and idempotentHint. The description adds a concrete return shape (type, count, data array with field names) and states no auth is needed. This supplements the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-organized: a one-sentence purpose, a return shape snippet, an example request, and an auth note. Every sentence adds value and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple stats tool with two well-documented parameters, the description covers the essentials: what data is returned, how to invoke it (example), and auth requirements. No external output schema, so the return snippet fills that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for both 'year' and 'seasonType'. The description adds an example but no additional parameter semantics beyond what the schema already provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns team statistics for a season, listing the specific stats categories (totals and per-game averages). It is clear what the tool does, though it does not explicitly differentiate from sibling tools like nbl_player_stats or nbl_stat_leaders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need team-level season totals/averages, with an example request for the current season. It does not explicitly exclude alternatives or state when not to use it, 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.
ncaa_rankingsARead-onlyIdempotent
Poll rankings — AP, coaches and others — for a college sport and division.
Returns: {sport, title, updated, page, pages, data:[{RANK, SCHOOL, POINTS, PREVIOUS, RECORD}]} — keys here are UPPERCASE, unlike standings
Example: AP football poll {"sport": "football", "division": "fbs", "poll": "associated-press"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| poll | No | Poll slug, e.g. associated-press, coaches-poll (availability varies by sport). | associated-press |
| sport | No | Sport slug. | football |
| division | No | Division slug. | fbs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent hints, and the description adds the exact return shape, uppercase key warning, an example, and auth requirement. This gives useful behavioral context beyond the structured fields without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's purpose. Every line contributes value: the summary, return structure note, example, and auth mention—nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explicitly lists the return object structure. With simple parameters that have defaults and good annotations, the description covers the needed context (purpose, example, auth, key casing) fully for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (poll, sport, division) is already documented. The description adds an example showing valid values and defaults, but it does not provide additional semantics beyond what the schema already supplies, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns poll rankings (AP, coaches, etc.) for a college sport and division, with a concrete example. It does not explicitly name sibling tools like cfbd_rankings or ncaa_standings to differentiate, but the return format note about UPPERCASE keys distinguishes it from standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description and example (e.g., for AP football poll), but there is no explicit 'when to use this vs. alternatives' or 'when not to use' guidance. The 'unlike standings' remark is more about key casing than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ncaa_scoreboardARead-onlyIdempotent
Current scoreboard for one college sport and division — games with scores, state and clock.
Returns: {updated_at, games:[{game:{gameID, startDate, startTime, gameState, currentPeriod, contestClock, home:{names:{short, full}, score, winner, conferences}, away:{…}, url, network}}]} — note each entry is a one-key object wrapping game
Example: FBS football scoreboard {"sport": "football", "division": "fbs"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | Hyphenated, gendered sport slug: football, basketball-men, basketball-women, ice-hockey-men, lacrosse-men, … | football |
| division | No | fbs/fcs for football; d1/d2/d3 for other sports. | fbs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/OpenWorld/idempotent; the description adds a detailed return structure, the note about one-key object wrapping, and Auth:none needed. No contradictions. It doesn't mention rate limits or empty results, but for a read-only scoreboard the critical context is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly organized: a one-line summary, a Returns block, a structural note, a concrete example, and Auth. Every line carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and readOnly/OpenWorld/idempotent annotations, the description needs mainly to explain the return payload; it does so with a detailed pseudo-schema and the one-key quirk. The example further clarifies parameter usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description's example reiterates the schema defaults (football/fbs) without adding new parameter meaning. No additional semantics needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Current scoreboard for one college sport and division', clearly identifying the tool's resource and scope. It distinguishes from siblings like espn_scoreboard by limiting to one college sport/division, but doesn't name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes clear context: use when you need current NCAA scores for a specific sport/division, with an explicit FBS football example. However, it doesn't state when-not-to-use or name alternatives, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ncaa_standingsARead-onlyIdempotent
Conference standings for a college sport and division.
Returns: {sport, title, updated, page, pages, data:[{conference:'ACC', standings:[{School, 'Conference W', 'Conference L', 'Overall W', 'Overall L', 'Overall PF', 'Overall PA', 'Overall HOME', 'Overall AWAY', 'Overall STREAK'}]}]} — GROUPED BY CONFERENCE: data[] is one entry per conference, each holding its own standings list. The inner column names are human-readable strings WITH SPACES and vary by sport; all values are strings.
Example: FBS football standings {"sport": "football", "division": "fbs"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | Sport slug. | football |
| division | No | Division slug. | fbs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds valuable behavioral context beyond these. It details the return structure, notes that inner column names vary by sport and contain spaces, and clarifies that all values are strings. It also states that no authentication is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose. It packs essential details (return shape, grouping, column variability, auth) into a concise format without redundancy. The example is helpful and placed logically after the return structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description appropriately compensates by fully specifying the return format and grouping behavior. It covers auth and provides an example. However, it mentions 'page' and 'pages' without explaining pagination semantics, leaving a minor gap for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with descriptions, achieving 100% coverage. The description adds a concrete example (sport='football', division='fbs') that clarifies valid values and usage. This goes beyond the schema's minimal 'slug' descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns conference standings for a college sport and division. It distinguishes from siblings by specifying 'college sport' (NCAA) and providing a detailed return structure grouped by conference. The example for FBS football adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. While many sibling standings tools exist, there is no mention of selection criteria or exclusions. The example implicitly shows usage, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_boxscoreARead-onlyIdempotent
Full box score for one game: both lineups with goals, assists, plus-minus, shots, hits, blocks and time on ice.
Returns: {id, gameDate, gameState, gameOutcome, homeTeam:{abbrev, score, sog}, awayTeam:{…}, playerByGameStats:{homeTeam:{forwards:[{playerId, name, goals, assists, points, plusMinus, sog, hits, blockedShots, toi}], defense:[…], goalies:[…]}, awayTeam:{…}}, clock, periodDescriptor}
Example: One completed game {"gameId": 2024020500}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes | NHL game id (from nhl_schedule / nhl_scores). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds useful behavioral context beyond annotations: the full return structure, an example request, and 'Auth: none needed.' It does not contradict annotations and enriches the agent's understanding of what to expect. Not a 5 because it lacks error/edge case handling details, but annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise purpose sentence, a detailed but formatted Returns block, an example with request body, and an auth note. Each section earns its place, and the purpose is front-loaded. It is appropriately sized for the complexity of the return payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return shape including both team lineups and player-level stats. It also provides an example and auth requirements. For a single-parameter tool, this is complete: an agent can confidently invoke it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the schema already explains gameId as the NHL game id from nhl_schedule/nhl_scores and notes it's part of the URL path. The description adds an example gameId value, but that is a minor addition. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the 'Full box score for one game' with specific stat categories (goals, assists, plus-minus, shots, hits, blocks, time on ice). This specific verb+resource+scope distinguishes it from sibling tools like nhl_scores (summary scores) and nhl_game_landing (likely a broader game view).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parameter description instructs that gameId comes from nhl_schedule / nhl_scores, implying a prerequisite workflow. While it doesn't explicitly name alternatives or exclusions, the context is clear: this tool is for detailed box score data for a single game, and it indicates a dependency on other tools for obtaining the ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_club_scheduleARead-onlyIdempotent
One club's entire season schedule with results — the team game log.
Returns: {games:[{id, gameDate, gameType, gameState, homeTeam:{abbrev, score}, awayTeam:{abbrev, score}, gameOutcome:{lastPeriodType}, venue, neutralSite}], currentSeason, previousSeason, nextSeason, clubTimezone} (~200 KB for a full season)
Example: Toronto's full 2024-25 season {"team": "TOR", "season": "20242025"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | 3-letter club abbreviation. Required — part of the URL path. | |
| season | Yes | Concatenated-year season, e.g. 20242025. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context: response size (~200 KB), auth requirements ('Auth: none needed'), and a detailed return shape. It doesn't cover rate limits or data freshness but goes beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence summary, a compact return format snippet, an example, and an auth note. All content is relevant, though the return snippet is somewhat lengthy, it earns its place by showing the response shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and strong annotations, the description covers the key aspects: purpose, response structure, size, example, and auth. No output schema exists, but the return snippet compensates well. It doesn't need further detail for a read-only data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters with 100% coverage. The description's example adds concrete values but no additional semantic meaning beyond the schema, so it meets the baseline without compensating for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'One club's entire season schedule with results — the team game log,' which clearly defines a specific resource and scope. It distinguishes itself from broader sibling tools like nhl_schedule by focusing on a single club's full season.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context that this is for a single club's full season and includes a concrete example (TOR, 20242025). However, it does not explicitly name alternative tools or state when not to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_game_landingARead-onlyIdempotent
Game landing page: scoring summary by period, three stars, penalties and team game stats.
Returns: {id, gameDate, gameState, homeTeam, awayTeam, summary:{scoring:[{periodDescriptor, goals:[{timeInPeriod, firstName, lastName, assists, strength}]}], penalties:[…], threeStars:[…], teamGameStats:[…]}, clock}
Example: One completed game {"gameId": 2024020500}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes | NHL game id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and side-effect expectations. The description adds valuable context beyond annotations by detailing the response structure (including nested scoring and penalties arrays) and explicitly stating 'Auth: none needed', which helps the agent understand what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: first a one-line purpose, then a clear return schema, then a concrete example, then authentication note. Every sentence serves a purpose, and the formatting with bullet-like schema breaks makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no output schema, the description compensates well by providing a detailed return object structure and an example. It is not fully complete—it does not note whether the tool works strictly for completed games or live games, nor any error conditions—but it gives sufficient context for a typical AI agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage (100%) for the single required gameId parameter, describing it as an NHL game id required as part of the URL path. The description adds an example value but does not introduce semantic details beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a game landing page with scoring summary by period, three stars, penalties, and team game stats. It distinguishes its content scope but does not explicitly contrast it with sibling tools like nhl_boxscore, leaving some ambiguity about when to choose one over the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like nhl_boxscore or nhl_scores. It gives an example call and mentions auth requirements, but does not specify prerequisites, appropriate game states (e.g., live vs completed), or when a different tool would be more suitable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_goalie_leadersARead-onlyIdempotent
League leaders among goalies — wins, save percentage, goals-against average and shutouts.
Returns: {wins:[{id, firstName:{default}, lastName:{default}, teamAbbrev, value, headshot}], savePctg:[…], goalsAgainstAverage:[…], shutouts:[…]}
Example: Current goalie leaders {"season_or_current": "current", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Leaders per category. -1 returns all. | |
| categories | No | Restrict to one category, e.g. 'wins', 'savePctg', 'goalsAgainstAverage', 'shutouts'. | |
| season_or_current | No | 'current', or a concatenated-year season. | current |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by detailing the return structure (e.g., {wins:[...], savePctg:[...]}), providing an example call, and noting that no authentication is needed. This gives the agent a clear picture of what the tool returns and any access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. It includes a return structure and example without excessive verbosity. Each section earns its place, though it is somewhat longer than the minimum viable description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of a 100% covered schema, annotations, and a detailed return structure in the description, the tool is well-specified. The description compensates for the absence of an output schema by outlining the response fields. It covers purpose, example, and auth, making it complete for a read-only leaderboard tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's example ({"season_or_current": "current", "limit": 10}) adds a practical usage illustration, but it does not explain parameter semantics beyond what the schema already provides. The schema fully documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'League leaders among goalies — wins, save percentage, goals-against average and shutouts.' It uses a specific verb and resource, and the focus on goalies distinguishes it from sibling tools like nhl_skater_leaders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: if you need goalie league leaders, use this tool. However, it does not explicitly state when to use it over alternatives (e.g., nhl_skater_leaders) or provide exclusions. The guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_playerARead-onlyIdempotent
One player's landing page: bio, draft details, current season splits, career totals and awards.
Returns: {playerId, firstName, lastName, position, sweaterNumber, currentTeamAbbrev, birthDate, birthCity, birthCountry, draftDetails:{year, round, overallPick, teamAbbrev}, featuredStats, careerTotals:{regularSeason, playoffs}, seasonTotals:[…], awards:[{trophy, seasons}]}
Example: Connor McDavid {"playerId": 8478402}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | NHL player id (from nhl_roster or a box score). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds 'Auth: none needed' and details the exact return object, including nested structures like draftDetails and careerTotals, which provide concrete behavioral expectations for a read-only endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line purpose, a return-format block, an example, and an auth note. It's slightly verbose due to the full return object listing, but each section is distinct and serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description compensates by enumerating the return fields and providing an example. It covers purpose, parameter origin, example usage, and auth, making it complete for a simple read-only player lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already explains playerId with a 100% coverage description, including its source and URL path role. The description adds an example value (8478402 for McDavid) but no new semantic information, so it stays at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'One player's landing page: bio, draft details, current season splits, career totals and awards,' which clearly identifies the resource (a single player) and the content scope. It differentiates from sibling tools like nhl_roster by emphasizing 'one player' and the landing page aggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the playerId comes 'from nhl_roster or a box score,' providing clear context for when to call this tool (after obtaining a player ID). However, it doesn't explicitly name alternatives or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_rosterARead-onlyIdempotent
A club's full roster for one season, split into forwards / defensemen / goalies with bio, height/weight, shoots-catches and birthplace.
Returns: {forwards:[…], defensemen:[…], goalies:[{id, firstName, lastName, sweaterNumber, positionCode, shootsCatches, heightInInches, weightInPounds, birthDate, birthCity, birthCountry, headshot}]} — three parallel arrays, NOT one players list
Example: Toronto's 2024-25 roster {"team": "TOR", "season": "20242025"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | 3-letter club abbreviation, e.g. TOR, COL, VGK. Required — part of the URL path. | |
| season | Yes | Concatenated-year season, e.g. 20242025 for 2024-25. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds meaningful behavioral context beyond those hints by specifying the exact return structure (three arrays, NOT one players list), listing output fields, and stating 'Auth: none needed.' This enriches the agent's understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: a one-sentence summary, a clear return format block, a concrete example, and an auth note. Every section adds value without redundancy, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description provides a detailed return structure with fields and an example, making it complete for typical use. It does not cover edge cases (e.g., empty rosters, null headshots) but is sufficient for the tool's simple parameter set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters (team abbreviation and season format) with 100% coverage. The description provides an example ('team': 'TOR', 'season': '20242025') that reinforces the schema but does not add new semantic meaning beyond what's already documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns a club's full roster for a season, split by position, with specific fields. It distinguishes itself from sibling tools by focusing on roster composition and adding the explicit note about three parallel arrays rather than a flattened list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (for retrieving a roster) but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or mention sibling tools like nhl_player or nhl_schedule. The example and return format help, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_scheduleARead-onlyIdempotent
League schedule for the current week (or a given date's week), grouped by day.
Returns: {gameWeek:[{date, dayAbbrev, numberOfGames, games:[{id, startTimeUTC, gameState, gameType, homeTeam:{abbrev, score}, awayTeam:{…}, venue}]}], regularSeasonStartDate, regularSeasonEndDate, playoffEndDate, nextStartDate, previousStartDate}
Example: This week's games {"date": "now"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD, or 'now' for the current week. A 307 to the dated path is followed automatically. | now |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior. The description adds useful context: the return value structure, grouped-by-day organization, and 'Auth: none needed.' This goes beyond what annotations provide without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, a compact return type definition, and a practical example. It is slightly lengthy due to the return block, but every sentence adds value, especially since there is no output schema to rely on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single optional parameter, the description covers the main use case, return format, and authentication requirements. It lacks explicit guidance on divergences from sibling tools (e.g., nhl_club_schedule) but otherwise provides sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the 'date' parameter with format and meaning, achieving 100% schema coverage. The description's example ('date: now') is redundant, adding no new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the league schedule for a week, grouped by day, with a specific resource (league schedule) and verb (retrieve). This distinguishes it from sibling tools like nhl_club_schedule, which focuses on a single club's schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it handles the current week or a given date's week, with an example using 'now'. It does not explicitly mention when not to use it or name alternatives, but the scope is unambiguous and the example clarifies typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_scoresARead-onlyIdempotent
Live scoreboard: every game on a date with current score, clock and period.
Returns: {currentDate, prevDate, nextDate, games:[{id, gameState, gameScheduleState, startTimeUTC, homeTeam:{abbrev, score, sog}, awayTeam:{…}, clock:{timeRemaining, running, inIntermission}, periodDescriptor:{number, periodType}, goals:[…]}], gameWeek:[…]}
Example: Today's scores {"date": "now"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD, or 'now' for today. | now |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, openWorldHint, idempotentHint) already establish safety, and the description adds context beyond them: 'Auth: none needed' and a full return payload layout including gameState, clock, and period fields. This sets realistic expectations for a live read operation without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a single sentence, and the auth note and example are compact. The lengthy return-type block is verbose but earns its place because there is no output schema, giving the agent a precise picture of the response structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by fully spelling out the return shape (currentDate, games, teams, scores, clock, period, goals, gameWeek), plus auth and example usage. For a simple one-parameter read-only tool, this is nearly complete; only minor edge behavior (e.g., dates with no games) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the date parameter ('YYYY-MM-DD, or 'now' for today') with 100% coverage, so the description's {'date': 'now'} example merely reinforces the default. The description adds no new semantic meaning beyond what the schema provides, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Live scoreboard' and precisely scopes the tool: every game on a date with current score, clock, and period. This distinguishes it from sibling NHL tools like nhl_schedule and nhl_boxscore, which cover scheduling and single-game details rather than a date-based live scoreboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case (fetch a date's scoreboard) is clear and supported by the 'Today's scores' example, but the description never explicitly names alternatives or states when not to use this tool. An agent must infer from sibling names (e.g., nhl_schedule, nhl_boxscore) when another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_seasonsARead-onlyIdempotent
Every season the standings API covers, with its start/end dates and which rules applied — call this to get valid season ids.
Returns: {currentDate, seasons:[{id:20242025, standingsStart, standingsEnd, conferencesInUse, divisionsInUse, tiesInUse, wildcardInUse, pointForOTlossInUse}]} — id is the concatenated-year season format every other tool wants
Example: All seasons
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds value by disclosing the response structure (currentDate, seasons array with specific fields), the season id format, and that auth is not needed. It doesn't mention pagination or limitations, but for a no-parameter list endpoint, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and structured: purpose statement, return example, and auth note. It front-loads the key action (get valid season ids) and includes a clear return format example. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete. It explains what data is returned, the format of the important id field, and that no auth is needed. It provides enough context for an agent to call it and correctly use the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the baseline is 4. The description goes beyond schema by explaining each field in the return object and what the season id represents. It fully compensates for lack of input parameters by describing the output semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Every season the standings API covers, with its start/end dates and which rules applied — call this to get valid season ids.' It specifies a concrete verb+resource and distinguishes itself by providing season metadata and IDs for other tools. The return example further clarifies the exact purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: 'call this to get valid season ids' and notes that the id format is what 'every other tool wants.' This implies using it as a prerequisite for other NHL tools. It lacks explicit 'when not to use' or alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_skater_leadersARead-onlyIdempotent
League leaders among skaters — goals, assists, points, plus-minus, power-play and short-handed goals, penalty minutes, ice time.
Returns: {goals:[{id, firstName:{default}, lastName:{default}, teamAbbrev, position, value, headshot}], assists:[…], points:[…], plusMinus:[…], goalsPp:[…], goalsSh:[…], penaltyMins:[…], toi:[…]} — one array per category
Example: Current season leaders {"season_or_current": "current", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Leaders per category. -1 returns all. | |
| categories | No | Restrict to one category, e.g. 'points', 'goals', 'assists'. | |
| season_or_current | No | 'current', or a concatenated-year season, e.g. 20242025. | current |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover basic safety. The description adds useful behavioral context: 'Auth: none needed' and a detailed return structure, which helps the agent understand what to expect without exceeding the annotation coverage. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: the main purpose in one line, a compact return format summary, and a single example. Every sentence adds value, with no redundant or fluff content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a full return structure, an example request, and auth requirements. It covers purpose, parameters, and expected output, making it self-sufficient for a simple read-only stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value with an example showing valid parameter combinations (e.g., 'season_or_current': 'current', 'limit': 10), and the return structure clarifies how parameters like categories map to output fields. This goes slightly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'League leaders among skaters' with a specific list of categories (goals, assists, etc.). It distinguishes itself from the sibling tool nhl_goalie_leaders by explicitly targeting skaters, making the resource and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for what the tool does, but it does not explicitly state when to use it versus alternatives (e.g., nhl_goalie_leaders) or mention exclusions. The example gives usage context, but the guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_standingsARead-onlyIdempotent
League standings with division/conference/wildcard sequencing and clinch indicators.
Returns: {standings:[{teamName:{default}, teamAbbrev:{default}, conferenceName, divisionName, gamesPlayed, wins, losses, otLosses, points, pointPctg, goalFor, goalAgainst, goalDifferential, divisionSequence, conferenceSequence, wildcardSequence, l10Wins, streakCode, streakCount, clinchIndicator}], wildCardIndicator, standingsDateTimeUtc}
Example: Current standings {"date": "now"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD for standings as at that date, or 'now'. | now |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds useful behavioral context: 'Auth: none needed' and a detailed return object with all fields. It doesn't discuss rate limits or date interpretation nuances, but with strong annotations present, the description goes beyond the minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line summary, a compact return schema, an example, and auth note. No word is wasted, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing every return field (teamName, points, divisionSequence, clinchIndicator, etc.). It also covers auth and provides an example. This is sufficient for a tool with one optional parameter and read-only semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single 'date' parameter with format 'YYYY-MM-DD' or 'now' and a default. The description only repeats the 'now' example, adding no semantic meaning beyond what the schema already provides. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as league standings with division/conference/wildcard sequencing and clinch indicators, and the name 'nhl_standings' makes the sport unambiguous. It lacks an explicit imperative verb like 'Get', but the 'Returns:' clause effectively states what the tool does and distinguishes it from other standings tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an example for 'now' standings but provides no explicit guidance on when to use this tool versus alternatives like mlb_standings, pl_standings, or other standings tools. No exclusions or preferred contexts are mentioned, so the agent gets the result but not decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nrl_application_settingsARead-onlyIdempotent
NRL match-centre application config: the current-season competition list (competitionList), stat-grid column layouts (dataGrids), UI components and team/competition image paths. Handy for discovering the active competitionIds and which statistics the official site surfaces.
Returns: {applicationInfo, userInfo, competitionList, components, dataGrids, shellGroups}
Example: Current NRL competition list + stat-grid config.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by disclosing the return shape ({applicationInfo, userInfo, competitionList, components, dataGrids, shellGroups}) and explicitly stating 'Auth: none needed.' This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it names the resource, lists key contents, provides a use case, gives the return shape, and notes auth requirements in just a few lines. Every sentence provides useful information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is remarkably complete. It specifies the return object's fields, highlights the practical use case, and confirms no authentication is required. The 'Example' line reinforces the purpose without adding unnecessary bulk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is an empty object, so schema coverage is trivially 100%. Per the rubric, 0 params earns a baseline of 4. The description adds no parameter details, but none are needed; it clearly references the current-season dynamic nature of the returned config.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is 'NRL match-centre application config' and enumerates the contents (competitionList, dataGrids, UI components, image paths). It differentiates from sibling tools like nrl_competitions by focusing on configuration data rather than match data, and adds a concrete use case: discovering active competitionIds and surfaced statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use this tool: 'Handy for discovering the active competitionIds and which statistics the official site surfaces.' This implies it is for configuration lookup rather than live match data, but it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nrl_competitionsARead-onlyIdempotent
Global Champion Data competition catalogue. Returns every competition id (NRL, State of Origin, plus other Champion Data sports) with its season and round count. Find the NRL competitionId here (e.g. 12999 = 2026 NRL Premiership, 13009 = 2026 State of Origin) to pass to nrl_fixture / nrl_match.
Returns: {competitionDetails:{competition:[{id, name, season, rounds, regulationPeriods, regulationPeriodLength}]}}
Example: All Champion Data competitions (filter client-side for NRL by name/season).
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed' and the exact return structure ({competitionDetails:{competition:[...]}}), which are valuable behavioral details beyond annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and efficiently communicates purpose, return format, example usage, and auth status in a few short blocks. It's concise but not minimal, with the example and return structure adding practical value without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple no-parameter read-only tool with no output schema, the description is complete: it covers what data is returned, the exact JSON shape, the downstream usage (nrl_fixture/nrl_match), and auth requirements. An agent can confidently invoke this tool and interpret results without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. The description correctly focuses on what the returned data contains and how to use it, which is the relevant semantic guidance for a no-arg tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all Champion Data competition IDs with season and round counts, and explicitly positions it as the lookup for NRL competitionId (e.g., 12999 = 2026 NRL Premiership) to pass to nrl_fixture/nrl_match. This distinguishes it from other competition catalogues (pl_competitions, laliga_competitions) via its specific NRL/Champion Data focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to use this tool to find the NRL competitionId before calling nrl_fixture/nrl_match, providing concrete examples. It doesn't explicitly state when not to use it or name alternative competition catalogues, but the context is clear for the intended NRL workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nrl_fixtureARead-onlyIdempotent
Full fixture + results for one competition. One entry per match with round, status, kickoff times (local + UTC), home/away squad ids/names/scores and venue. Use it to list a round's games and to resolve the matchId for nrl_match.
Returns: {fixture:{match:[{matchId, roundNumber, matchStatus, utcStartTime, localStartTime, homeSquadId, homeSquadName, homeSquadScore, awaySquadId, awaySquadName, awaySquadScore, venueId, venueName}]}}
Example: Every 2026 NRL Premiership match (round + result). {"competitionId": 12999}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Champion Data competition id (e.g. 12999). From nrl_competitions / nrl_application_settings. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that no authentication is needed and provides the full return shape, which goes beyond the annotations. It confirms read-only, idempotent behavior implicitly through 'full fixture + results' and the return specification. It doesn't disclose rate limits or other side effects, but the annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose, then tight usage, return format, example, and auth note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description covers purpose, input source, example, return format, and auth. The explicit return JSON compensates for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains the competitionId source and requirement. The description adds an example value (12999) and the context that it's for a competition, but this is mostly redundant with the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Full fixture + results for one competition' and lists the exact fields returned. It also differentiates from nrl_match by explicitly saying 'resolve the matchId for nrl_match,' making its role clear among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage: 'Use it to list a round's games and to resolve the matchId for nrl_match.' It also explains where to obtain competitionId (from nrl_competitions / nrl_application_settings). However, it doesn't explicitly state when not to use this tool or name other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nrl_matchARead-onlyIdempotent
Full match file: per-player match statistics (tries, tackles, runMetres, lineBreaks, tryAssists, offloads, handlingErrors, metresGained, …), per-period player stats, team/player rosters, period durations, sin bins and on-report records. This is the per-player, per-match stat source. Decode stat codes via the nrl://stats/definitions resource.
Returns: {matchStats:{matchInfo, teamInfo:{team[]}, playerInfo:{player[]}, periodInfo:{qtr[]}, playerStats:{player[]}, playerPeriodStats:{player[]}, sinBins:{binned[]}, reports:{onReport[]}, created}, jobId}
Example: Knights v Cowboys, round 1 2026 — full player stat lines. {"competitionId": 12999, "matchId": 129990101}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id from nrl_fixture (e.g. 129990101). Required — part of the URL path. | |
| competitionId | Yes | Champion Data competition id (e.g. 12999). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover safety and mutability. The description adds valuable behavioral context: the full return JSON structure, the note 'Auth: none needed,' and the pointer to stat code definitions. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with a clear summary. It efficiently covers contents, return shape, an example, and auth in a compact, information-dense format. Every sentence contributes value, and the structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description bears the burden of explaining the return value—it does so comprehensively with a detailed JSON structure. It also covers the scope of data (stats, rosters, sin bins, reports), provides an example, and mentions auth and stat code decoding. This is complete for a read-only data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both matchId and competitionId already explained in detail ('Required — part of the URL path'). The description adds an example JSON usage, which reinforces parameter meaning but doesn't introduce new semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Full match file: per-player match statistics' and 'This is the per-player, per-match stat source.' It specifies the resource (match file), scope (per-player, per-match), and distinguishes itself from siblings like nrl_fixture by being the detailed stat source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool ('per-player, per-match stat source') and provides a concrete example. It also directs users to decode stat codes via nrl://stats/definitions. However, it doesn't explicitly mention alternatives or when not to use it, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oddsapiio_bookmakersBRead-onlyIdempotent
The 274 bookmakers indexed, and whether each is currently active. VERIFIED live — works without a key.
Returns: [{name:'10BET', active:true}] — VERIFIED live: 274 entries, 263 active. Names are the vendor's own spelling and are what the odds calls filter on.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every bookmaker
Auth: needs your own key in ODDS_API_IO_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld hints, but description adds a caveat about unverified shape, which is helpful. However, the auth contradiction and lack of clarity about whether a key is required undermines trust; the user can't tell if the tool will work without credentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose with redundancies ('274 bookmakers' twice, 'VERIFIED live' repeated). The note about unverified shape is long and could be more concise, but it is structured with sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param list tool, it covers return shape, counts, and a caveat about reliability. However, the auth contradiction is a gap that prevents full clarity, and there's no mention of pagination or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% and no param semantics needed. The description adds an example of the return shape which is useful given no output schema, though not directly about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the 274 indexed bookmakers with active status, using a specific resource and action. It's distinct from sibling tools like oddsapiio_sports or oddsapiio_odds which focus on other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternative differentiation. It mentions names are used as filters in odds calls, which subtly implies usage, but the contradictory auth statements ('works without a key' vs 'needs your own key') confuse selection and invalidation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oddsapiio_eventsARead-onlyIdempotent
Upcoming events for a sport or league, without prices. NEEDS A KEY.
Returns: [{id, sport, league, home, away, starts, status}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Upcoming football {"sport": "football"}
Auth: needs your own key in ODDS_API_IO_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. | |
| sport | No | Sport slug. | |
| league | No | League id or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the read-only/idempotent annotations by disclosing authentication requirements (own key in ODDS_API_IO_KEY) and, most importantly, explicitly stating the return shape is from vendor docs and NOT verified against a live response. This caveat tells the agent to inspect actual payloads before relying on field names, a high-value behavioral warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured into labeled sections: summary, return shape, caveat, example, and auth. It is slightly longer than strictly necessary but every sentence earns its place. The caveat and example are valuable, and the formatting aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by listing the return fields and warning that the shape is approximate. It also covers authentication, parameter usage via example, and clarifies the tool's scope (no prices). For a simple read-only list tool, this is a complete and self-sufficient description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a concrete usage example ({"sport": "football"}) that illustrates how to pass the sport parameter. This extra example helps clarify the intended call structure, improving over mere schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Upcoming events for a sport or league, without prices.' This is a specific verb (retrieve/list) plus a concrete resource (events) and a distinguishing scope (sport/league, no prices). It also provides the return shape and an example, making the purpose unmistakable and differentiating it from odds-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (upcoming events without prices), implies exclusion (don't use if you need prices), and includes an example query. However, it never explicitly names an alternative tool like oddsapiio_odds, relying on implicit inference rather than direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oddsapiio_leaguesARead-onlyIdempotent
Leagues within a sport. NEEDS A KEY.
Returns: [{id, name, country, sport}] — SHAPE FROM VENDOR DOCS, not probed.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Football leagues {"sport": "football"}
Auth: needs your own key in ODDS_API_IO_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport slug from oddsapiio_sports. | |
| country | No | Restrict to one country. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the response shape is from vendor docs and unverified, which is significant behavioral transparency beyond the readOnly/idempotent hints. It also clearly states the API key requirement, which annotations don't cover. This goes well beyond what the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for summary, returns, note, example, and auth. It is front-loaded with the core purpose. Some redundancy exists ('NEEDS A KEY' vs 'Auth: needs your own key'), but overall it is concise and every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple list tool with 2 parameters and no output schema, the description provides the approximate return shape, an example, and auth guidance. It adequately covers what an agent needs to invoke this tool, though it lacks explicit error handling or edge-case guidance. The unverified-shape caveat adds important context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage. The description adds an example ({"sport": "football"}) but doesn't provide additional meaning about the country parameter or value formats beyond what the schema already states. With full schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Leagues within a sport' clearly indicates the tool retrieves leagues for a given sport, and the example with {"sport": "football"} clarifies the input. It lacks an explicit verb like 'list' and doesn't differentiate from siblings, but the name and example make the purpose evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need leagues for a sport, supply a sport slug. It doesn't mention alternatives or when not to use it, but it does provide an example and notes the auth requirement as a prerequisite. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oddsapiio_oddsARead-onlyIdempotent
Odds for one event across the indexed bookmakers. NEEDS A KEY.
Returns: {id, home, away, starts, bookmakers:{'':{markets…}}} — SHAPE FROM VENDOR DOCS. Reported to key bookmakers by NAME rather than as a list; inspect what you receive before indexing.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One event's odds {"eventId": ""}
Auth: needs your own key in ODDS_API_IO_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Event id from oddsapiio_events. | |
| markets | No | Restrict to specific markets. | |
| bookmakers | No | Restrict to specific bookmaker names (as spelled by oddsapiio_bookmakers). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description discloses that the response shape is unverified from vendor docs, that bookmakers are keyed by name rather than a list, and that a personal key is required. This is substantial behavioral context that helps the agent avoid misinterpreting the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections: purpose, return shape, verification note, example, and auth. The vendor-doc disclaimer adds necessary length, but the content is focused and each sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description adequately covers the return shape and auth requirements. It warns about unverified fields, which is critical. However, it lacks guidance on how to obtain the eventId (though the schema references oddsapiio_events) and does not mention potential errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (eventId, markets, bookmakers), so the baseline is 3. The description adds no extra parameter semantics beyond showing eventId in the example, which is redundant with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns odds for one event across indexed bookmakers, with a specific verb and resource. It distinguishes itself from sibling tools by focusing on a single event, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving odds for a specific event and notes the key requirement, but provides no explicit when-to-use or when-not-to-use guidance compared to alternatives. The example shows the required eventId but no direction on optional filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oddsapiio_sportsARead-onlyIdempotent
The 34 sports covered, with the slug every other tool needs. VERIFIED live — works without a key.
Returns: [{name:'Football', slug:'football'}] — VERIFIED live: 34 entries, slugs include football, basketball, tennis, baseball, american-football, ice-hockey, esports, darts, mixed-martial-arts, boxing, handball, volleyball, snooker, table-tennis, rugby, cricket, aussie-rules, gaelic-football, padel, bandy, golf, cycling.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every sport
Auth: needs your own key in ODDS_API_IO_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing that no API key is required, that the tool is verified live, and that the response shape is unverified and approximate per vendor documentation. This is valuable transparency about reliability and return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly front-loaded with the key point, but includes some redundancy: 'VERIFIED live — works without a key' appears twice, and the caveat note is a bit verbose. Still, it's compact enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool, the description covers purpose, return shape with an example, authentication requirement, and a reliability caveat. It's fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty; the description correctly doesn't address parameters. There is nothing to add because no parameters exist, so this is a non-issue.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the 34 sports with their slugs, and explicitly notes that every other tool needs these slugs, distinguishing it from sibling tools. The return example makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the tool works without a key, implying it can be used as a prerequisite for other OddsAPI tools that need slugs. It doesn't name specific alternatives but gives clear context on when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_heroesARead-onlyIdempotent
The hero catalogue — id, name, primary attribute, attack type and roles.
Returns: [{id, name:'npc_dota_hero_antimage', localized_name:'Anti-Mage', primary_attr:'agi', attack_type:'Melee', roles:[str], legs}] (top-level array, ~127 heroes)
Example: All heroes
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, and the description adds useful context: a concrete return shape ('top-level array, ~127 heroes'), exact field naming ('localized_name', 'primary_attr'), and a no-auth note. This goes beyond the structured annotations to clarify output structure and scale.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a lead phrase, a Returns block with a concrete example, a one-line usage example, and an auth note. Every sentence contributes information and there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a parameterless, auth-free list endpoint. The description fully specifies the output fields, shape, and approximate size, which is sufficient for an agent to invoke it and interpret the result. No output schema exists, but the embedded return example compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing to document; the baseline of 4 applies. The description correctly spends no effort on parameters and focuses on the return payload instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'the hero catalogue' and enumerates the returned fields (id, name, primary attribute, attack type, roles), making the resource unambiguous. It does not explicitly contrast with sibling opendota tools like opendota_hero_stats, but the field list and 'catalogue' wording distinguish it effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternative opendota tools. The 'Example: All heroes' line implies a general list retrieval, but there are no exclusions or references to siblings such as opendota_hero_stats for statistical hero data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_hero_statsARead-onlyIdempotent
Per-hero win and pick counts broken down by skill bracket — the hero meta.
Returns: [{id, localized_name, pro_pick, pro_win, pro_ban, 1_pick, 1_win, …, 8_pick, 8_win}] — the numeric prefixes are skill brackets (1=lowest … 8=highest); win rate is _win / _pick, NOT a percentage field
Example: Hero meta across brackets
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description goes further by explaining the return structure, skill bracket prefixes (1-8), and the win-rate calculation, which are not available in annotations or schema. It also notes 'Auth: none needed.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly packed: a one-sentence summary, a structured return format, an example, and an auth note. Every line adds value, and the field explanation is front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the full burden of explaining the response. It fully documents the field names, meaning, and calculation, and even provides an example. The tool is simple, and the description covers all necessary aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so no parameter explanation is needed. Baseline is 4 per the rubric. The description focuses on the output fields, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Per-hero win and pick counts broken down by skill bracket.' It clearly states what data the tool returns and distinguishes it from sibling tools like opendota_heroes, which likely provide basic hero info, by focusing on meta stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the hero meta' implies it is the go-to for hero performance analysis, and the example adds practical context. However, it does not explicitly contrast with alternatives or provide when-not-to-use guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_leaguesARead-onlyIdempotent
Every Dota 2 league/tournament OpenDota knows. LARGE (~1 MB) — includes years of historical events.
Returns: [{leagueid, name, tier:'premium'|'professional'|'amateur', ticket, banner}] (~1 MB — filter client-side by tier)
Example: All leagues
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint/openWorldHint annotations, the description adds valuable behavioral context: the response is LARGE (~1 MB), includes historical events, returns a specific structure, and requires no authentication. This enriches the agent's understanding of response size and field formats 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It packs essential details (size, return fields, example, auth) into a few well-organized lines without any redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, no-parameter read-only list tool, the description is complete: it covers the data scope, size warning, return schema, example usage, and authentication. There is no output schema to rely on, so these details are essential and provided clearly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is vacuously 100%. The description compensates by explaining that filtering is done client-side (since no server-side filter parameters exist), which clarifies why there are no inputs. This goes beyond the baseline expectation for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: it returns every Dota 2 league/tournament known to OpenDota. The verb 'Returns' and specific resource ('league/tournament') are clear, and it distinguishes itself from sibling OpenDota tools by covering the complete set of leagues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (when you need all leagues/tournaments) and even advises to filter client-side by tier. It does not explicitly name alternatives or exclusions, so it doesn't reach a 5, but the guidance is solid for a simple list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_matchARead-onlyIdempotent
Full detail for one match: every player's hero, items, KDA, gold/XP curves and objectives. LARGE (~250 KB).
Returns: {match_id, duration, radiant_win, radiant_score, dire_score, league, players:[{account_id, hero_id, player_slot, kills, deaths, assists, gold_per_min, xp_per_min, last_hits, hero_damage, items, gold_t:[…], xp_t:[…]}], objectives, picks_bans, teamfights} — player_slot < 128 means Radiant
Example: One professional match {"match_id": 8937822821}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| match_id | Yes | Match id (from opendota_pro_matches). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds a useful LARGE (~250 KB) warning and details the return structure including interpreting player_slot, providing additional behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the size warning placed early, followed by a compact return object, an example, and auth info. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description includes a representative return object, explains player_slot semantics, flags response size, and notes auth requirements, making it a complete and practical specification for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers match_id 100% with a description that mentions it's required and a URL path parameter. The description's example value matches the schema; no additional semantics are added beyond the example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full detail for one match' and enumerates all included data (hero, items, KDA, gold/XP curves, objectives). This distinguishes it from list-type OpenDota siblings like opendota_pro_matches and opendota_public_matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It doesn't explicitly state when to use it over alternatives, but the name and example imply it's for fetching a specific match after obtaining an ID. The schema notes the match_id comes from opendota_pro_matches, but that's not in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_playerARead-onlyIdempotent
A player's profile with rank tier and estimated MMR.
Returns: {profile:{account_id, personaname, name, avatarfull, steamid, country_code, is_pro}, rank_tier, leaderboard_rank, competitive_rank} — rank_tier is two digits: tens=medal (1 Herald … 8 Immortal), units=star
Example: One player's profile {"account_id": 88367253}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Steam 32-bit account id (NOT the 64-bit steamid from a Steam URL). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds value by detailing the exact return fields, the rank_tier encoding (tens=medal, units=star), and that MMR is 'estimated.' It also explicitly states 'Auth: none needed,' which is useful behavioral context beyond the annotations. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence summary, a Returns block, an example, and an auth note. It is front-loaded with the core purpose and every section serves a specific informational role without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no output schema, the description fully compensates by explaining the return fields, rank_tier encoding, and providing an example. It covers auth requirements and the nature of the data (estimated MMR), making it complete for a simple read-only profile lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes account_id with a precise explanation (Steam 32-bit, not 64-bit, required, part of URL path). The description's example ('account_id': 88367253) reinforces usage but does not add substantial new meaning beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'A player's profile with rank tier and estimated MMR,' identifying the specific resource and data. It distinguishes itself from siblings like opendota_player_matches and opendota_player_winloss by focusing on profile/rank information, and it includes a detailed return structure with an example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool to fetch a player's profile with rank tier and MMR, with an example and a note that auth is not needed. It does not explicitly state when not to use it or mention alternatives, but the purpose is unambiguous for this simple read-only tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_player_heroesARead-onlyIdempotent
Which heroes a player uses and how they perform on each.
Returns: [{hero_id, games, win, with_games, with_win, against_games, against_win, last_played}] — ordered by games played; join hero_id via opendota_heroes
Example: Hero pool {"account_id": 88367253}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Restrict to the most recent N matches. | |
| account_id | Yes | Steam 32-bit account id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, and the description does not contradict these. It adds useful behavior context by specifying the return format, ordering by games played, and the need to join hero_id via opendota_heroes, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured, starting with a one-line purpose, followed by return format, an example, and auth note. Every sentence adds value, and the example is practical. It is front-loaded with the core purpose, making it easy for an agent to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description provides the return fields and ordering, which is helpful. It also includes the join hint for hero_id. However, it does not explain the semantics of fields like with_games/against_games or how limit affects the aggregation, leaving some ambiguity for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%—both parameters (account_id and limit) have descriptions. The tool description does not add extra parameter meaning beyond the schema, but the schema itself is sufficient. The limit parameter's effect on the returned hero list is only partially implied ('Restrict to the most recent N matches'), and the description does not clarify this further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Which heroes a player uses and how they perform on each.' This is specific to hero performance per player, distinguishing it from sibling tools like opendota_player_matches (individual matches) or opendota_player_winloss (overall win/loss). The example 'Hero pool' reinforces the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool by stating it returns hero performance data for a player and includes an example invocation. It does not explicitly exclude alternatives or mention when not to use it, but the purpose itself is sufficiently clear for most selection scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_player_matchesARead-onlyIdempotent
A player's recent matches with hero, result and KDA.
Returns: [{match_id, player_slot, radiant_win, duration, hero_id, kills, deaths, assists, start_time, lane_role}] — you won a match when (player_slot < 128) == radiant_win
Example: Last 20 matches {"account_id": 88367253, "limit": 20}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| win | No | 1 = wins only, 0 = losses only. | |
| limit | No | How many matches. Omit and you get the player's whole history. | |
| hero_id | No | Only matches on this hero. | |
| account_id | Yes | Steam 32-bit account id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds meaningful behavioral context by disclosing how to interpret a win ('(player_slot < 128) == radiant_win') and noting 'Auth: none needed.' It also specifies the return structure, which is especially valuable because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a return-format block with win interpretation, a minimal example, and an auth note. Every element earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description fully discloses the return fields and the win heuristic, which are essential for understanding the response. It also covers auth requirements and provides a working example. Combined with thorough schema parameter descriptions and safety annotations, the tool is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (account_id, win, limit, hero_id) are already well-documented in the input schema. The description's example repeats account_id and limit usage but adds no new semantic detail beyond the schema, thus meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'A player's recent matches with hero, result and KDA,' which uses a specific verb (retrieve/list) and resource (player matches) and clearly distinguishes it from sibling tools like opendota_player_winloss or opendota_player_heroes by focusing on the match history with performance stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context (recent match history with hero, result, KDA) and a concrete example invocation, but it does not explicitly mention when to use this tool over alternatives such as opendota_player_heroes or opendota_match. The example implies typical usage but lacks explicit exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_player_winlossARead-onlyIdempotent
A player's win/loss totals, with the same filters as their match list.
Returns: {win, lose} — two integers
Example: Career win/loss {"account_id": 88367253}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Restrict to the most recent N matches. | |
| hero_id | No | Only this hero. | |
| account_id | Yes | Steam 32-bit account id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, open-world, and idempotent. The description adds 'Auth: none needed' and the exact return shape {win, lose}, which is useful context but does not go beyond these basics. No rate limits or edge-case behaviors are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, a clear return type, a practical example, and an auth note. Every sentence adds value with no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While there is no output schema, the description explicitly documents the return structure and provides an example. Combined with full parameter descriptions in the schema and strong annotations, the tool is well-specified for an agent to invoke correctly. It lacks only deeper behavioral caveats, but these are not essential for this simple read-only endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage with descriptions for limit, hero_id, and account_id. The description adds minimal extra parameter meaning, only referencing 'same filters as their match list' without detailing them, so it does not significantly surpass the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: returning a player's win/loss totals. It also distinguishes itself from sibling tools by noting it uses the same filters as the match list, which is a specific, actionable scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when needing win/loss aggregates) via its phrasing, and it references the match list for filter context. However, it does not explicitly state when not to use it or name alternative tools beyond an indirect reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_pro_matchesARead-onlyIdempotent
Recent professional matches with teams, league, duration and result.
Returns: [{match_id, duration, start_time, radiant_team_id, radiant_name, dire_team_id, dire_name, leagueid, league_name, series_id, series_type, radiant_score, dire_score, radiant_win}] — Dota sides are RADIANT and DIRE, not home/away; radiant_win is the result
Example: Latest pro matches
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| less_than_match_id | No | Paginate backwards: pass the lowest match_id you've seen to get older matches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description adds valuable detail: the exact return fields, the clarification that Dota sides are RADIANT and DIRE (not home/away), and that radiant_win is the result. It also states no auth is needed, which is helpful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, with a clear opening line and structured return field list. The 'Example: Latest pro matches' line is somewhat filler, but the overall text is efficient and front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature, one optional parameter, and strong annotations, the description is complete enough. The return fields are enumerated, the auth requirement is stated, and the pagination parameter is documented in the schema, so an agent has sufficient context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a complete description of the only parameter (less_than_match_id) with pagination semantics. The tool description adds nothing extra about parameters, so the schema carries the full burden, yielding baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns recent professional matches with teams, league, duration, and result. The inclusion of 'professional' distinguishes it from the sibling tool opendota_public_matches, so the resource and scope are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like opendota_public_matches or opendota_match. The name and description imply it is for pro matches, but there is no direct comparison or exclusion of other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_public_matchesARead-onlyIdempotent
A sample of recent public (non-professional) matches — the ladder meta rather than the pro scene.
Returns: [{match_id, start_time, duration, avg_rank_tier, radiant_win, radiant_team:[hero_id], dire_team:[hero_id]}] — hero ids only, no player identity
Example: Recent public matches
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| min_rank | No | Minimum rank tier (10=Herald … 80=Immortal). | |
| less_than_match_id | No | Paginate backwards from this match id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it notes this is a 'sample' of recent matches (not exhaustive), lists the exact return fields, and clarifies the data contains 'hero ids only, no player identity'. It also states 'Auth: none needed'. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a return-format line, a minimal example, and an auth note. Every line earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only public data tool with two optional filters and no output schema, the description provides the return structure, the sample nature, and authentication status. It could mention pagination behavior or default ordering, but the schema covers the main parameters and the description is sufficient for a typical agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (min_rank and less_than_match_id) fully described in the schema. The description does not add further parameter details, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'a sample of recent public (non-professional) matches', explicitly distinguishing it from professional play ('the ladder meta rather than the pro scene') and from sibling tools like opendota_pro_matches. It also provides the exact return shape, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for public/ladder match data rather than professional matches, giving clear context. It does not explicitly name alternative tools or state when not to use it, but the 'rather than the pro scene' phrasing effectively communicates the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opendota_teamsARead-onlyIdempotent
Professional teams ranked by rating, with win/loss records.
Returns: [{team_id, name, tag, rating, wins, losses, last_match_time, logo_url}] (~250 KB, ordered by rating)
Example: Pro teams by rating
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read-only, idempotent, and open-world nature. The description adds valuable behavioral context beyond that: approximate response size (~250 KB), ordering by rating, field structure, and the fact that no authentication is required. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. Every sentence serves a purpose: the first line states what it is, the second line details the return format, the example clarifies usage, and the auth line addresses access. No redundancy or unnecessary jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with no output schema, the description adequately covers the return fields, ordering, size, and auth. It could perhaps mention pagination or the specific Dota 2 context, but the tool name and 'Professional teams' suffice. The provided information is sufficient for an agent to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. According to the baseline for 0-param tools, a score of 4 is appropriate. The description doesn't need to explain parameters, though it does provide useful output details which are not parameter-related.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning professional Dota 2 teams ranked by rating, with fields for win/loss records. The resource (teams) and the specific ordering/scope are explicit, and it distinguishes itself from sibling opendota tools (e.g., heroes, leagues) by focusing on teams and ratings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case through the example 'Pro teams by rating' but does not explicitly state when to choose this tool over alternatives or provide exclusions. No sibling comparison is made, leaving the agent to infer that this is the go-to for team ratings from OpenDota.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_car_dataARead-onlyIdempotent
Car telemetry at ~3.7 Hz — speed, throttle, brake, gear, RPM, DRS. HIGH VOLUME: always pass session_key + driver_number.
Returns: [{date, driver_number, speed, throttle, brake, n_gear, rpm, drs, session_key}] (top-level array; large — use date>=/date<= operators on the raw API to window it)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | Yes | Car number (required — one driver's telemetry can be tens of thousands of samples). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond these: the ~3.7 Hz sampling rate, the high-volume warning, the top-level array return shape, and 'Auth: none needed.' This helps the agent understand scale and filtering requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded. The first sentence states the core purpose, followed by a high-volume warning and a compact return-type example. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists all return fields and warns about result size. It also includes auth details and suggests how to constrain results. For a read-only telemetry tool with three parameters, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for meeting_key, session_key, and driver_number. The description reiterates that session_key and driver_number must be passed and explains the volume issue, but this largely mirrors the schema description for driver_number. It adds no new syntax or format details, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Car telemetry at ~3.7 Hz — speed, throttle, brake, gear, RPM, DRS,' which clearly specifies the resource and data type. This distinguishes it from sibling tools like openf1_laps or openf1_position that cover different data. The verb 'telemetry' conveys the exact nature of the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'HIGH VOLUME: always pass session_key + driver_number' and advises using date>=/date<= operators to window results. This tells the agent when and how to invoke the tool, though it does not explicitly list alternatives 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.
openf1_championship_driversARead-onlyIdempotent
Drivers' championship standings around a race — points and position before/after the session.
Returns: [{driver_number, position_start, position_current, points_start, points_current, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Race session key, or 'latest'. | |
| driver_number | No | Filter to one driver. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint, idempotentHint, and openWorldHint, the description adds value by explicitly stating the return format (top-level array with fields) and noting 'Auth: none needed'. It also clarifies that data covers before/after session states, which is behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear purpose statement followed by a compact return format example. Every sentence adds value, and it is appropriately front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only three parameters and no output schema, so the description's explicit return fields and auth note largely compensate for missing output schema. It does not cover optional parameter behavior like using 'latest', but the schema already provides that, so this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters already have clear descriptions. The tool description does not repeat parameter details but does mention session_key in the return structure, reinforcing its role. This meets the baseline for high schema coverage with minimal additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides Drivers' championship standings around a race, specifically points and position before/after the session. It also lists the return structure, making the purpose unambiguous. It differentiates from sibling tools like openf1_championship_teams by mentioning 'Drivers'', though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'around a race' hints at context but does not explicitly state when to use this tool versus alternatives such as openf1_session_result or openf1_drivers. There is no mention of exclusions, prerequisites, or specific scenarios where this endpoint is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_championship_teamsARead-onlyIdempotent
Constructors' championship standings around a race — points and position before/after the session.
Returns: [{team_name, position_start, position_current, points_start, points_current, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| team_name | No | Filter to one team. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Race session key, or 'latest'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world behavior. The description adds useful context: the return array shape with specific fields, the before/after session semantics, and the absence of authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences plus a return format and an auth note. It is front-loaded with the main purpose and contains no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with comprehensive schema and annotations, the description covers the return format and the before/after context. The schema clarifies session_key as 'Race session key', and the return field list provides sufficient detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all three parameters (session_key, meeting_key, team_name) with 100% coverage. The description does not add parameter-level semantics beyond the schema, so the schema carries the burden and is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving constructors' championship standings with positions and points before and after a session. This distinguishes it from driver championship standings (e.g., openf1_championship_drivers) and other race-specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for constructor/team championship standings based on the name and content, but it does not explicitly state when to use this tool over alternatives or provide exclusions. No alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_driversARead-onlyIdempotent
Drivers entered in a session — number, name, acronym, team and colours. Pass session_key (or 'latest').
Returns: [{driver_number, full_name, name_acronym, broadcast_name, team_name, team_colour, headshot_url, session_key, meeting_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| team_name | No | Filter by team name. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | No | Session key, or 'latest'. Strongly recommended to bound the response. | |
| name_acronym | No | Filter by 3-letter driver code (e.g. 'VER', 'HAM', 'NOR'). | |
| driver_number | No | Filter to one car number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds useful context: 'Auth: none needed' and that the return is a top-level array. It also implies behavior for 'latest' values. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence for purpose, one for return format, and one for auth. It is front-loaded with the primary action and includes all necessary detail without any filler. Every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, optional-filter list tool with no output schema, the description compensates by explicitly listing the return fields and their structure. It covers session scoping, the latest option, and auth context. Combined with strong annotations, the overall context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all 5 parameters, so the baseline is 3. The description only reiterates session_key usage ('Pass session_key or latest') and adds no extra semantics for team_name, name_acronym, driver_number, or meeting_key beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource ('Drivers entered in a session'), the key scope ('Pass session_key or latest'), and the fields returned. It distinguishes itself from sibling tools like openf1_championship_drivers by emphasizing session-level data. This is a specific verb+resource+scope definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it to get drivers entered in a session, and explicitly recommends passing session_key (or 'latest') to bound the response. However, it does not explicitly state when not to use it or mention alternatives like championship_drivers or jolpicaf1_drivers, so it falls short of a full when/when-not justification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_intervalsARead-onlyIdempotent
Live gap data during a race — each driver's gap to the leader and interval to the car ahead, sampled over time.
Returns: [{date, driver_number, gap_to_leader, interval, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Race session key, or 'latest'. | |
| driver_number | No | Car number (strongly recommended — this feed is high-volume). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnly/openWorld/idempotent annotations: it explicitly states 'Auth: none needed' and describes the live, sampled nature of the data. It also discloses the return format as a top-level array. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one sentence for purpose, one for return shape, one for auth. Every line adds value without filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with rich schema annotations, the description covers the essential invocation context: what data is returned, that it is sampled over time, and that no auth is needed. It does not mention pagination or volume warnings, but the schema's 'high-volume' note for driver_number partially covers this, and the description is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaning to the parameters beyond what the schema already provides (e.g., 'Race session key, or latest.'). It only lists the output fields, not parameter syntax or semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Live gap data during a race — each driver's gap to the leader and interval to the car ahead, sampled over time.' This uses a specific verb+resource and explicitly names the unique output metrics (gap_to_leader, interval), distinguishing it from sibling tools like openf1_laps or openf1_position that return different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('during a race', for live gap and interval data), but it does not name alternative tools or state explicit 'when not to use' guidance. The schema's note that driver_number is 'strongly recommended — this feed is high-volume' is a parameter-level usage hint, not a tool-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_lapsARead-onlyIdempotent
Per-lap timing for a driver — lap + sector durations, speed-trap (i1/i2/st) speeds, mini-sector segment colours, pit-out flag.
Returns: [{driver_number, lap_number, lap_duration, duration_sector_1/2/3, i1_speed, i2_speed, st_speed, is_pit_out_lap, segments_sector_1/2/3, date_start}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| lap_number | No | Filter to one lap. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | No | Car number (strongly recommended). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds valuable context: the exact return shape (top-level array with field list), the 'Auth: none needed' note, and the pit-out flag. This goes beyond what annotations alone provide, without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first sentence states the purpose, second provides return fields, third handles auth. No filler or redundant content; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only data retrieval tool with no output schema, the description provides a complete field list and auth requirement, which gives the agent a solid mental model. It could be more explicit about whether results include all drivers when driver_number is omitted, and the exact format of segment colours, but overall it is sufficiently complete for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (lap_number, meeting_key, session_key, driver_number) is already documented. The description's mention of 'for a driver' reinforces the driver_number parameter but does not add new parameter syntax or format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact resource ('Per-lap timing for a driver') and enumerates the specific data fields returned (lap/sector durations, speed-trap speeds, segment colours, pit-out flag). This clearly distinguishes it from sibling F1 tools like openf1_pit or jolpicaf1_laps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose ('per-lap timing for a driver'), and the schema notes driver_number is 'strongly recommended.' However, there is no explicit when-to-use guidance, alternatives named, or exclusion such as 'for pit stops use openf1_pit.' It relies on the agent inferring 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.
openf1_locationARead-onlyIdempotent
Car (x, y, z) track position at ~3.7 Hz. HIGH VOLUME: always pass session_key + driver_number (and ideally a date window on the raw API).
Returns: [{date, driver_number, x, y, z, session_key}] (top-level array; large)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | Yes | Car number (required — high-frequency spatial data). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent hints. The description adds meaningful behavioral context: real-time sampling rate (~3.7 Hz), high-volume warning, return shape as a top-level large array, and no auth needed. This enriches beyond the annotations without any contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: first sentence states the data and frequency, second warns about high volume and required parameters, third gives the return shape, fourth states auth. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple location tool with no output schema, the description covers data, frequency, usage constraints, return shape, and auth. It lacks explicit differentiation from similar openf1 tools (e.g., openf1_position) or coordinate system details, but overall it provides sufficient guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three parameters. The description reiterates the necessity of session_key and driver_number but does not add new semantic details beyond the schema, such as exact formats for 'latest' or how a date window would be specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning car track position (x,y,z) at ~3.7 Hz, specifying the resource and data fields. However, it does not explicitly differentiate from sibling tools like openf1_position or openf1_car_data, relying on the coordinate details rather than naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns about HIGH VOLUME and instructs to always pass session_key and driver_number, and ideally a date window, which is clear usage context. It does not mention explicit alternatives or when-not-to-use scenarios, so it stops short of a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_meetingsARead-onlyIdempotent
Grand Prix weekends (meetings). Filter by year/country, or pass meeting_key=latest for the current event.
Returns: [{meeting_key, meeting_name, meeting_official_name, country_name, country_code, circuit_short_name, location, year, date_start}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year (e.g. 2024). | |
| meeting_key | No | Meeting key, or the literal 'latest'. | |
| country_name | No | Country name (e.g. 'Italy'). | |
| meeting_name | No | Meeting name (e.g. 'Singapore Grand Prix'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds valuable context beyond these: the return format (field list, top-level array), the special 'latest' value, and the fact that auth is not needed. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the tool's purpose, then filters, then return format and auth. No redundant or irrelevant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description lists all return fields and notes the top-level array. It covers auth, filter options, and the special 'latest' case. For a simple read-only listing tool, this is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all four parameters. The description enriches the parameter semantics by clarifying that year and country_name are filters, and by revealing the special 'latest' value for meeting_key. This is beyond the schema's basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Grand Prix weekends (meetings)' and explains filtering by year/country or using meeting_key=latest. This distinguishes it from sibling tools like openf1_sessions and openf1_drivers by focusing specifically on meeting-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage instructions: filter by year/country or pass meeting_key=latest for the current event. While it doesn't explicitly mention alternatives like openf1_sessions, the scope is clear enough for an agent to know when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_overtakesARead-onlyIdempotent
Overtake events in a race — who passed whom, when, and for which position.
Returns: [{date, overtaking_driver_number, overtaken_driver_number, position, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Race session key, or 'latest'. | |
| overtaken_driver_number | No | Filter by the car being passed. | |
| overtaking_driver_number | No | Filter by the car making the pass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the agent knows this is a safe, read-only operation. The description adds the return format and states no auth is needed. It does not disclose pagination, rate limits, or edge cases like 'latest' behavior beyond what schema already says. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and a return-type list. Every part earns its place: purpose, return fields, and auth note. It is front-loaded and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered-list tool with 4 params and no output schema, the description is reasonably complete. It includes the return array shape, which compensates for the lack of output schema. It doesn't cover every possible edge case, but the annotations and schema fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented (session_key, meeting_key, overtaken_driver_number, overtaking_driver_number). The description adds no additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Overtake events in a race — who passed whom, when, and for which position.' This is a specific verb-resource pair and distinguishes it from sibling OpenF1 tools (laps, pit, position, etc.) by focusing on overtakes. The return format is also explicitly listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context implies usage: fetch overtakes for a race session, optionally filtered by driver numbers. However, there is no explicit comparison to alternatives like openf1_position or openf1_laps, nor any 'when not to use' guidance. The presence of a required session_key is clear from schema, not described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_pitARead-onlyIdempotent
Pit stops — lap, total time in pit lane and stationary stop duration per driver.
Returns: [{date, driver_number, lap_number, pit_duration, lane_duration, stop_duration, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| lap_number | No | Filter to pit stops on one lap. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | No | Car number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and idempotent. The description adds useful information about the return format and that no authentication is needed, which goes beyond the annotations. It does not discuss potential pagination or data nuances, but given the annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, starting with the tool's purpose, followed by the return structure and auth requirement. Every sentence adds value, and 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description effectively documents the return fields and their meanings. It also covers authentication. It lacks some details like the use of 'latest' for session_key, but the schema handles that, and the tool is simple enough that the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all four parameters. The tool description does not add any parameter-specific context beyond what the schema already provides, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool provides pit stop data, specifying the exact metrics (lap, total time in pit lane, stationary stop duration) and the return structure. This distinguishes it from other openf1_* tools like openf1_laps or openf1_stints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving pit stop data but does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The context is clear from the name and description, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_positionARead-onlyIdempotent
Driver track position over time — position changes throughout a session.
Returns: [{date, driver_number, position, session_key, meeting_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| position | No | Filter to one position. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | No | Car number (strongly recommended). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds the return format (array of specific fields) and explicitly notes that no authentication is needed, which are useful. However, it does not disclose potential large result sets, pagination behavior, or the strong recommendation to filter by driver_number beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: a one-line purpose, a return format list, and an auth note. Every sentence contributes value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, full schema coverage, and strong annotations, the description covers the essential points: what data is returned and that no auth is needed. It includes a return field list, which compensates for the lack of an output schema. It doesn't mention practical filtering guidance (e.g., strongly recommending driver_number), but that is already in the schema, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all parameters and their descriptions. The description does not add information about parameters beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's specific function: retrieving driver track position over time within a session, with the core concept 'position changes throughout a session.' This clearly distinguishes it from sibling openf1 tools like openf1_location or openf1_car_data, which cover different data types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for tracking position changes across a session, but provides no explicit when-to-use guidance or comparison with alternatives. It does not state when not to use it or mention related tools, though the context makes the primary use case reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_race_controlARead-onlyIdempotent
Race-control messages — flags, safety cars, incidents, investigations, penalties — the official message feed.
Returns: [{date, category, flag, scope, sector, lap_number, driver_number, message, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| flag | No | Filter by flag (e.g. 'YELLOW', 'GREEN', 'RED', 'BLACK AND WHITE'). | |
| category | No | Filter by category (e.g. 'Flag', 'SafetyCar', 'Drs', 'CarEvent'). | |
| lap_number | No | Filter to messages on one lap. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | No | Session key, or 'latest'. | |
| driver_number | No | Filter to messages about one driver. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the description adds value by disclosing the return format (top-level array with specific fields) and that no authentication is needed. This goes beyond the annotations and helps set expectations for the tool's output and access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, providing a one-line summary, a return format specification, and an auth note. Every sentence adds useful information with no redundancy or fluff, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the essential return structure and auth requirement, which is especially helpful since there is no output schema. It lacks explicit details on default behavior (e.g., whether all messages are returned when no filters are applied), but the parameter schema compensates, making it sufficiently complete for a read-only feed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with clear descriptions (e.g., flag, category, lap_number, meeting_key, session_key, driver_number). The description does not add any additional parameter semantics, so it relies on the schema—meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it retrieves race-control messages, listing specific message types (flags, safety cars, incidents, investigations, penalties) and identifies itself as 'the official message feed.' This distinguishes it from sibling OpenF1 tools like openf1_laps or openf1_car_data by specifying the resource and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the description ('official message feed') and the listed message categories, making it clear this tool is for race-control data. However, there is no explicit guidance on when to use this versus other OpenF1 tools, nor any when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_session_resultARead-onlyIdempotent
Final classification of a session — per-driver position, laps, points, gap, DNF/DNS/DSQ flags.
Returns: [{position, driver_number, number_of_laps, points, dnf, dns, dsq, duration, gap_to_leader, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| position | No | Filter to one finishing position. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | No | Filter to one driver. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and open-world. The description adds valuable context: the exact return shape (array of objects with named fields), the auth requirement ('none needed'), and the presence of DNF/DNS/DSQ flags, which go beyond the annotation safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly composed: one main clause, a return-type line, and an auth note. Every sentence earns its place, and the most important information (what it returns) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only data fetch with rich annotations and a fully described schema, this is nearly complete. It covers purpose, return shape, and auth. It does not mention rate limits or pagination, but these are not essential given the annotations and the tool's simple output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all four parameters, so the schema does the heavy lifting. The description contributes little beyond stating the return fields and does not add meaning to the parameters (e.g., behavior of 'latest' or filtering semantics) that isn't already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Final classification of a session' — a specific verb+resource that clearly identifies the tool's function. It enumerates the key data (position, laps, points, DNF/DNS/DSQ flags) and distinguishes it from sibling tools like openf1_starting_grid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this is for final session results and implies you need a session_key. It does not explicitly state when not to use it or name alternatives, but the context is unambiguous enough for an agent to select it for session classification data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_sessionsARead-onlyIdempotent
F1 sessions (Practice / Qualifying / Sprint / Race). This is the fixtures feed — filter by year, country or session_name to find a session_key.
Returns: [{session_key, session_name, session_type, date_start, date_end, meeting_key, circuit_short_name, country_name, year}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year. | |
| meeting_key | No | Meeting key to list that weekend's sessions, or 'latest'. | |
| session_key | No | Session key, or 'latest'. | |
| country_name | No | Country name. | |
| session_name | No | Session name (e.g. 'Race', 'Qualifying', 'Sprint', 'Practice 1'). | |
| session_type | No | Session type (e.g. 'Race', 'Qualifying', 'Practice'). | |
| circuit_short_name | No | Circuit short name (e.g. 'Monza'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the return format (top-level array with specific fields) and explicitly states no auth is needed, which is useful beyond annotations. It does not mention rate limits or pagination, but for a read-only list endpoint this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, then return format, then auth note. No filler; every sentence conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage and annotations, the description is sufficient: it lists the return fields, notes no auth, and explains the filtering purpose. It could mention behavior with no filters (e.g., returns all sessions) but that is minor given the openWorldHint and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all seven parameters. The description adds a slight prioritization by calling out 'filter by year, country or session_name', but this doesn't add substantial new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb+resource: lists F1 sessions (Practice/Qualifying/Sprint/Race) and identifies itself as the 'fixtures feed'. It clearly distinguishes from sibling tools like openf1_meetings and openf1_session_result by explaining its role in the workflow (find a session_key).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: it's the fixtures feed for finding session_keys by year, country, or session_name. It implies when to use (need schedule) vs. when to use other tools (need results), but doesn't explicitly name alternative tools or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_starting_gridARead-onlyIdempotent
Race starting grid — per-driver grid position and lap time. (Sparse feed: OpenF1 returns a 404 'No results found' for sessions where no grid is published, which is currently most of them.)
Returns: [{position, driver_number, lap_duration, session_key, meeting_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| position | No | Filter to one grid slot. | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Race session key, or 'latest'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description discloses critical behavior: the 404 'No results found' response for sessions without published grids, and the exact return shape. This saves the agent from misinterpreting errors and provides parse-time expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The sparse feed caveat, return format, and auth note each add essential information without redundancy. No word is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers all necessary aspects: what the data is, the expected return structure, potential error conditions, and authentication requirements. It is fully self-contained for an agent to invoke and parse results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters (position, meeting_key, session_key) at 100% coverage. The description adds no additional nuance about parameter usage or relationships, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the race starting grid with per-driver grid position and lap time. It lacks an explicit action verb, but the resource and scope are unambiguous. It is distinguishable from sibling OpenF1 tools by the specific focus on grid data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sparse feed warning clearly tells the agent when to expect 404 errors, which is essential context for deciding whether this tool is appropriate. It does not explicitly name alternative tools or exclusion criteria, but the guidance provided is clear and practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_stintsARead-onlyIdempotent
Tyre stints — compound and tyre age per driving period (lap_start → lap_end).
Returns: [{stint_number, driver_number, lap_start, lap_end, compound, tyre_age_at_start, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| compound | No | Filter by tyre compound (e.g. 'SOFT', 'MEDIUM', 'HARD', 'INTERMEDIATE', 'WET'). | |
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | Yes | Session key, or 'latest'. | |
| driver_number | No | Car number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description adds 'Auth: none needed' and enumerates the exact return fields, providing useful behavioral context. It does not contradict annotations and no negative behaviors are hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise lines: purpose, return signature, and auth. Every sentence carries value and the structure is front-loaded with the main intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description fully specifies the return array and its fields, plus auth requirements. For a simple read-only list endpoint with well-documented parameters, this is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already explained (e.g., 'Filter by tyre compound'). The description merely echoes 'compound' and 'tyre age' without adding new semantic details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Tyre stints — compound and tyre age per driving period' and explicitly lists the return fields (stint_number, driver_number, lap_start, lap_end, compound, tyre_age_at_start, session_key), giving a specific and unambiguous resource. This clearly distinguishes it from siblings like openf1_laps or openf1_pit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines what data is returned and the context (per driving period), making it obvious when this tool is relevant. However, it does not explicitly mention alternatives or exclusion scenarios, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_team_radioBRead-onlyIdempotent
Team-radio clips — recording URLs of driver/pit-wall radio exchanges during a session.
Returns: [{date, driver_number, recording_url, session_key, meeting_key}] (top-level array)
Auth: none needed.
Also answers this: afl_live_audio.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | No | Session key, or 'latest'. | |
| driver_number | No | Car number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description adds 'Auth: none needed' and the exact return format (list of fields). This is useful but the unexplained 'Also answers this: afl_live_audio' introduces a potentially misleading behavioral claim. No contradiction with annotations, but the added context is partially confusing rather than purely clarifying.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded: purpose first, then return format, then auth. The extra line 'Also answers this: afl_live_audio' is cryptic and could be considered noise, but the overall structure is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the output fields and auth requirement, which is important given there is no output schema. However, it doesn't explain behavior when no parameters are provided, how 'latest' works in practice, or clarify the odd afl_live_audio reference. It is complete enough for basic use but leaves conceptual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with each parameter having a brief description (e.g., 'Meeting key, or latest'). The tool description does not add further parameter usage details, but the schema already provides the necessary semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'recording URLs of driver/pit-wall radio exchanges during a session', which is a specific resource with a clear scope. It distinguishes itself from other OpenF1 data tools by focusing on team-radio clips. The final line 'Also answers this: afl_live_audio' is confusing and slightly muddies the purpose, but the core statement remains clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The only reference to another tool is 'Also answers this: afl_live_audio', which is ambiguous and does not clarify selection criteria. It lacks exclusions, prerequisites, or contextual cues for when this tool is the appropriate choice among the many OpenF1 and audio-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openf1_weatherARead-onlyIdempotent
Track weather, updated ~once a minute — air/track temperature, humidity, pressure, wind, rainfall.
Returns: [{date, air_temperature, track_temperature, humidity, pressure, wind_speed, wind_direction, rainfall, session_key}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_key | No | Meeting key, or 'latest'. | |
| session_key | No | Session key, or 'latest'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond this: update frequency (~once a minute), the exact return shape (array of objects with listed fields), and explicit 'Auth: none needed'. This goes beyond what annotations provide and informs the agent about freshness and response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly efficient: two brief sentences cover the purpose, update frequency, data fields, return format, and auth requirements. No filler or redundant restatement of the name or schema. Front-loaded with the core action and data types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional params and no output schema, the description is complete. It tells the agent what data is returned, how fresh it is, and that no auth is needed. The parameters are well-documented in the schema, so the description doesn't need to repeat them. This is fully sufficient for an agent to decide to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both meeting_key and session_key have descriptions ('Meeting key, or latest') and defaults. The description adds no additional parameter semantics beyond what the schema already defines, so the baseline score of 3 applies rather than a higher one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb+resource: "Track weather" and enumerates the exact measurements (air/track temperature, humidity, pressure, wind, rainfall). This distinguishes it from sibling openf1_* tools which focus on other data types like laps or positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied but not explicitly stated. The description says "Track weather" and lists fields, but does not explicitly say 'Use this when you need session weather conditions' or contrast it with alternatives (though no direct sibling exists). It does mention no auth needed as a prerequisite, which is useful but not a full when-to-use/when-not-to-use guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_current_matchdayARead-onlyIdempotent
Which matchday a league is currently on — resolve 'this week' without guessing.
Returns: {groupID, groupName:'1. Spieltag', groupOrderID} — a single object, not a list
Example: Current Bundesliga matchday {"league": "bl1"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut. | bl1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral details beyond that: the return shape ('a single object, not a list'), the exact fields returned, an example response, and an explicit 'Auth: none needed.' This contextualizes what to expect from the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: starts with purpose, then return type, then a concrete example, then auth note. Every line earns its place, with no redundant or vague language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description is complete: it explains what the tool does, when to use it, the exact parameter format, the return structure, and auth requirements. No significant information is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with a description and default for the 'league' parameter. The description reinforces the semantics by showing a concrete usage example ('{"league": "bl1"}' for Bundesliga), which adds clarity beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Which matchday a league is currently on' and adds practical context ('resolve this week without guessing'). It distinguishes itself from siblings like openligadb_matchdays (list all matchdays) and openligadb_matchday_matches by focusing on the current matchday as a single object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool (need the current matchday, e.g., to resolve 'this week'), and includes a concrete example for Bundesliga. However, it does not explicitly name alternative tools or exclusion criteria, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_leaguesARead-onlyIdempotent
Every competition + season OpenLigaDB carries — call this to find the league shortcut and season year the other tools need.
Returns: [{leagueId, leagueName, leagueShortcut:'bl1', leagueSeason:'2024', sport:{sportId, sportName}}] (~819 entries, ~120 KB)
Example: All competitions
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world behavior, and the description adds meaningful context: the exact return shape, estimated size (~819 entries, ~120 KB), an example, and that no auth is needed. This goes beyond the annotations' basic safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose in the first line, then provides a concise return example, size estimate, and auth note. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description is thorough: it covers what is returned, gives an example, notes size, and states auth requirements. Without an output schema, it provides enough detail for an agent to understand and consume the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds semantic clarity by showing the output fields like leagueShortcut and leagueSeason, which is useful for downstream tool usage, even though no parameter-specific details are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'every competition + season OpenLigaDB carries' and explicitly frames its purpose: to 'find the league shortcut and season year the other tools need.' This is a specific verb+resource (list leagues/seasons) and directly distinguishes it from sibling tools that consume these identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says to call this when you need the league shortcut and season year for other tools, providing clear usage context. It does not explicitly list when not to use it or name alternative sources, but the intended sequencing is evident from the dependency it highlights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_matchARead-onlyIdempotent
One match by id, with goals and scorers.
Returns: {matchID, matchDateTime, team1, team2, matchIsFinished, matchResults:[…], goals:[{goalID, scoreTeam1, scoreTeam2, matchMinute, goalGetterName, isPenalty, isOwnGoal}], location}
Example: A single match {"matchId": 66222}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id (from either match-list tool). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description need not restate them. It adds useful context: 'Auth: none needed' and a full return structure with field names and types. This goes beyond the minimal annotation coverage and helps the agent anticipate the response, though it doesn't cover edge cases like missing IDs or errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The primary purpose is stated in the first sentence, followed by the return shape, a practical example, and the auth note. Each sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-parameter tool, this description covers the key elements: purpose, return payload, example invocation, and auth. It doesn't explain how to obtain a matchId within the description, but the schema and sibling list tools fill that gap. The lack of an output schema is partly mitigated by the inline return field list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the only parameter (matchId) with type, required flag, and provenance ('from either match-list tool'). The description adds a concrete example value, but no additional semantic detail beyond the schema. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, action-oriented statement: 'One match by id, with goals and scorers.' This clearly identifies the tool as a single-match lookup and highlights the key included data (goals, scorers), distinguishing it from sibling list-type tools like openligadb_season_matches and openligadb_matchday_matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a specific match ID is known (via the example and 'by id'), but it never explicitly states when to prefer this tool over alternatives. The input schema hints that the matchId comes from a match-list tool, but that guidance lives outside the description itself. This leaves usage context mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_matchday_matchesARead-onlyIdempotent
One matchday's fixtures and results — the everyday call.
Returns: Same shape as openligadb_season_matches, restricted to one matchday (~9 matches for the Bundesliga)
Example: Matchday 1 of 2024/25 {"league": "bl1", "season": "2024", "matchday": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut. | bl1 |
| season | Yes | Season starting year. Required — part of the URL path. | |
| matchday | Yes | Matchday number (groupOrderID). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context beyond these: auth is not needed, the return shape matches openligadb_season_matches, and typical size (~9 matches). This gives the agent a clear behavioral model without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and front-loaded with the core purpose, then follows with return shape, an example, and auth note. No redundancy or filler—every sentence contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there's no output schema, the description adequately explains the return shape by referencing openligadb_season_matches, and the example provides an input pattern. Combined with the annotations covering safety and idempotency, this is complete for a simple, read-only, single-matchday lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters, so the baseline is 3. The description adds a concrete, complete example that clarifies the season format as a string ('2024') and shows the league default in action, which goes slightly beyond the schema's generic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'One matchday's fixtures and results' and immediately differentiates it from the sibling openligadb_season_matches by noting 'restricted to one matchday'. The verb 'Returns' and resource are specific, and the example further confirms the exact purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by calling this 'the everyday call' and specifying it handles one matchday, indirectly distinguishing it from season-wide tools. However, it stops short of explicitly saying 'use openligadb_season_matches for multiple matchdays', so there's no formal exclusion but the intended use case is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_matchdaysARead-onlyIdempotent
The matchdays ('groups') in a season — OpenLigaDB calls a Spieltag a 'group'.
Returns: [{groupID, groupName:'1. Spieltag', groupOrderID}] — groupOrderID is the matchday number the match tools take
Example: Bundesliga matchdays {"league": "bl1", "season": "2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut. | bl1 |
| season | Yes | Season starting year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior, which the description complements by adding specifics like the exact return fields ([{groupID, groupName, groupOrderID}]), the meaning of groupOrderID, and that no auth is needed. This adds meaningful context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: it explains the purpose, shows the return shape, provides a concrete example, and states auth requirements in a few lines. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of this tool (2 params, no output schema, no nested objects), the description is complete enough: it covers return fields, example usage, and auth. It also provides cross-references to how the result connects to match tools. Minor details like the meaning of groupID are left unexplained, but the tool's scope is simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters, including the fact that season is required. The description adds an example with actual values and clarifies that groupOrderID is the matchday number, but doesn't add significant new parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the matchdays ('groups') in a season, with a specific verb ('returns') and resource ('matchdays in a season'). It distinguishes itself by clarifying OpenLigaDB's terminology ('Spieltag' = 'group') and indicates the return structure. However, it does not explicitly differentiate from siblings like openligadb_current_matchday, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example showing a Bundesliga season and the note that groupOrderID is used by 'match tools' imply when to use this tool, but the description doesn't explicitly state alternatives or when not to use it. The usage context is implied rather than explicitly explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_season_matchesARead-onlyIdempotent
Every match in a league season with results. LARGE (~550 KB for a Bundesliga season) — prefer the matchday tool.
Returns: [{matchID, matchDateTime, matchDateTimeUTC, timeZoneID, leagueName, leagueSeason, group:{groupName, groupOrderID}, team1:{teamId, teamName}, team2:{…}, matchIsFinished, matchResults:[{resultName:'Endergebnis'|'Halbzeit', pointsTeam1, pointsTeam2}], goals:[…], location}]
Example: Whole 2024/25 Bundesliga season {"league": "bl1", "season": "2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut. | bl1 |
| season | Yes | Season starting year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a size warning (~550 KB) and explicit response schema, auth requirement, and example, going beyond the readOnly/idempotent/openWorld annotations. No contradictory behavioral claims.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and size warning; the Returns block is efficiently structured and the example is compact. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, size, alternative, auth, example, and full return structure. Without an output schema, the description takes on that responsibility and fulfills it completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description's concrete example (league:'bl1', season:'2024') adds a real-world mapping that the schema's terse descriptions don't fully convey, earning an extra point.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns every match in a league season with results. It distinguishes itself from the sibling matchday tool by warning about large size and recommending the matchday tool for smaller scope. The Returns: block specifies exact content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'prefer the matchday tool' for the large payload, indicating when not to use this tool. The example shows how to request a whole Bundesliga season, and 'Auth: none needed' covers prerequisites. This provides clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_tableARead-onlyIdempotent
The league table for a season.
Returns: [{teamInfoId, teamName, shortName, points, opponentGoals, goals, matches, won, lost, draw, goalDiff, teamIconUrl}] — ordered top to bottom; goals is scored, opponentGoals is conceded
Example: Bundesliga table {"league": "bl1", "season": "2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut. | bl1 |
| season | Yes | Season starting year. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare read-only and idempotent, but the description adds non-obvious behavior: results are ordered top to bottom, and the semantics of `goals` vs `opponentGoals` are clarified. The 'Auth: none needed' note also adds practical context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary purpose, followed by the return shape, ordering note, an example, and auth status. Every sentence contributes unique information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description covers the return fields, ordering, an example, and auth requirements. The only minor gap is a lack of enumerated `league` shortcut values, but the default 'bl1' mitigates that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% field description coverage, so the description does not need to repeat those details. It adds an example and reiterates that `season` is required and part of the URL path, but provides no additional valid values for `league`, leaving the schema as the primary source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a league table for a season, which is distinct from sibling tools focused on matchdays, matches, or teams. The noun phrase lacks an explicit verb but the return field list makes the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example and states that no auth is needed, implying usage for fetching a league table. However, it does not mention alternatives or when not to use this tool, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openligadb_teamsARead-onlyIdempotent
The clubs contesting one league season.
Returns: [{teamId, teamName, shortName, teamIconUrl, teamGroupName}]
Example: 2024/25 Bundesliga clubs {"league": "bl1", "season": "2024"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League shortcut, e.g. bl1, bl2, bl3, dfb. | bl1 |
| season | Yes | Season STARTING year — 2024/25 is '2024'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and open-world, so the description is not required to repeat those. It adds value by stating 'Auth: none needed' and detailing the exact return fields, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and appropriately front-loaded: one purpose sentence, a return-type line, an example, and an auth note. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no output schema), the description covers the essential aspects: what it returns, a usage example, and authentication status. The annotations handle safety semantics, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for both `league` and `season` (100% coverage), so the baseline is 3. The description reinforces these with a concrete Bundesliga example, but doesn't introduce new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the resource: 'The clubs contesting one league season' and specifies the return structure, making it clear this tool retrieves teams for a given league season. It stands apart from sibling tools like openligadb_table or openligadb_matches, though it doesn't use a verb like 'list' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool to call when you need the clubs participating in a specific league season, and provides a concrete example. However, it does not explicitly contrast with alternatives or state when not to use it, leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_leaguesARead-onlyIdempotent
Leagues (the recurring competitions tournaments belong to).
Returns: [{id, name, slug, image_url, url, videogame:{id, name, slug}, series:[…]}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All leagues
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size (max 100). | |
| filter_videogame | No | Title slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, openWorldHint, idempotentHint) already establish the safety profile. The description adds valuable context beyond annotations: the requirement for an API key in PANDASCORE_TOKEN and the important warning that the return shape is from vendor docs and unverified. This helps an agent know the payload may differ, though error behavior and rate limits are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the definition, followed by the return shape, a critical caveat, an example, and auth note. Every part is relevant, though the example is minimal and the structure could be tightened. It earns a 4 for efficiency and clear organization.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with comprehensive schema descriptions and safety annotations, the description is reasonably complete. It includes the expected return shape (with a caveat), auth requirements, and the resource definition. However, it lacks an explicit statement of the operation (list/get) and does not explain how the optional filters affect results, but given the tool's simplicity this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (100% coverage). The description does not add any additional explanation about the parameters beyond what the schema provides, so the baseline of 3 applies. It does not clarify ambiguous terms like 'Title slug' for filter_videogame.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines leagues as 'recurring competitions tournaments belong to' and provides the return shape, making it clear this is a list/fetch operation for leagues. It distinguishes from siblings like pandascore_tournaments by explaining the relationship, but lacks an explicit verb (e.g., 'List' or 'Get'), so it doesn't fully meet the 5 criterion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as pandascore_tournaments or pandascore_series. The description only defines the resource and returns a shape; it does not state when to choose this tool, any prerequisites, or exclusions. The 'Example: All leagues' is too vague to serve as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_matchesARead-onlyIdempotent
Matches across every title, or one — upcoming, running or past.
Returns: [{id, name, slug, status, begin_at, end_at, number_of_games, opponents:[{type, opponent:{id, name, acronym, image_url}}], results:[{team_id, score}], league:{id, name}, serie, tournament, videogame, winner_id, live:{supported, url}}] (top-level array; totals in X-Total header) — SHAPE FROM VENDOR DOCS. Note opponents wraps each team under an opponent key.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Upcoming CS2 matches {"filter_videogame": "csgo", "filter_status": "not_started"}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| sort | No | Sort field; prefix with '-' to reverse, e.g. -begin_at. | |
| per_page | No | Page size (max 100). | |
| filter_status | No | Match state. One of: not_started, running, finished, canceled, postponed. | |
| range_begin_at | No | ISO date range as 'from,to'. | |
| filter_videogame | No | Title slug, e.g. csgo, dota2, lol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond the annotations: it discloses the return shape (top-level array, X-Total header), warns that the shape is from vendor docs and not verified against live responses, and notes the auth requirement (PANDASCORE_TOKEN). It also highlights a subtle field wrapping ('opponents' wraps teams under 'opponent' key). This is far more than annotations alone provide and is honest about reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with purpose, and every sentence contributes value: the return shape, the unverified caveat, the example, and the auth note. There is no fluff or redundancy; the warning about vendor docs is especially useful and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a detailed return shape, pagination header info, filterable statuses, an example, auth requirements, and a reliability caveat. It covers what the agent needs to select and invoke the tool correctly, including how to interpret the response and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description's example demonstrates how to combine filter_videogame and filter_status, but it doesn't add meaning beyond the schema (the schema already explains 'csgo' is a title slug). The parameter descriptions in the schema are sufficient, and the example is more of a usage guideline than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Matches across every title, or one — upcoming, running or past', which clearly identifies the resource (matches), the scope (all titles or one) and status filter. It distinguishes itself from sibling pandascore tools (e.g., pandascore_videogames, pandascore_tournaments) by focusing specifically on match listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Upcoming CS2 matches' with filter_videogame and filter_status provides a concrete use-case, and the description states it can return matches across all titles or a single one. However, it does not explicitly mention when to use this tool versus related alternatives like pandascore_match_odds or other sports match endpoints, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_match_oddsARead-onlyIdempotent
Betting markets and prices for one esports match — the part opendota cannot give you.
Returns: {match_id, markets:[{name, bookmakers:[{name, odds:[{name, value, ...}]}]}]} — SHAPE FROM VENDOR DOCS AND LIKELY APPROXIMATE; odds access is a paid add-on on some plans, so a free key may 403 here.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Odds for one match {"matchId": 1}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match id from pandascore_matches. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover safety and mutation traits. The description adds valuable behavioral context: potential 403 on free keys, the return shape being approximate and unverified, and advice to inspect the live payload. This goes well beyond the annotations and prepares the agent for real-world failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than strictly necessary but each sentence provides essential information: purpose, return shape, reliability caveats, and an example. The structure is front-loaded with the core purpose and then handles important caveats. Slight verbosity in the caveat section is justified given the unverified nature of the data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return value, which it does by providing an approximate shape. It also covers authentication, potential 403s, and the need to verify field names. For a single-parameter tool, this is fairly complete, though it could specify how to identify the correct match ID from pandascore_matches more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (matchId) with a clear description, giving 100% schema coverage. The description adds a concrete example and references pandascore_matches, which reinforces the schema but does not introduce novel semantic meaning. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: retrieving betting markets and prices for a single esports match. It uses a specific verb-plus-resource construction and distinguishes itself from sibling opendota tools by noting it provides data 'the part `opendota` cannot give you.' This makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context: it is the go-to for esports match odds when opendota data is insufficient. It also warns about the paid add-on and auth key requirements, implying when the tool may not work. However, it does not explicitly state alternatives or when not to use it beyond the opendota comparison, which is a slight gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_playersARead-onlyIdempotent
Esports players with role, nationality and current team.
Returns: [{id, name, first_name, last_name, role, nationality, image_url, current_team:{id, name, acronym}, current_videogame}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Dota 2 players {"filter_videogame": "dota2"}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size (max 100). | |
| search_name | No | Partial name match. | |
| filter_videogame | No | Title slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable context beyond that: the exact return shape (fields and nesting), a prominent caveat that the shape is unverified from vendor docs, and the authentication requirement via PANDASCORE_TOKEN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line summary, return shape, verification note, example, and auth requirement. Every sentence carries necessary information with no fluff, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four documented parameters, read-only hints, and no output schema, the description provides a full picture: return shape, example, and auth. It does not explain pagination behavior in detail or how to discover videogame slugs, but given the moderate complexity and existing annotations, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all four parameters with descriptions (100% coverage), so the baseline is 3. The description adds an example for filter_videogame and implies pagination through page/per_page, but it does not enrich parameter understanding significantly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Esports players with role, nationality and current team,' which clearly identifies the resource (esports players) and the fields returned. It differentiates from sibling tools like pandascore_teams and pandascore_matches by focusing on players, though it lacks an explicit verb like 'list' or 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Dota 2 players {"filter_videogame": "dota2"}' provides concrete context for when to use the tool and how to filter by videogame. However, it does not mention alternatives or when not to use this tool, stopping short of the explicit guidance that earns a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_seriesARead-onlyIdempotent
Series — a league's seasonal editions (e.g. 'LEC Summer 2025').
Returns: [{id, name, full_name, slug, season, year, begin_at, end_at, league:{id, name}, videogame, winner_id}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: LoL series {"filter_videogame": "lol"}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size (max 100). | |
| filter_videogame | No | Title slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds a valuable caveat that the return shape is from vendor docs and unverified, and notes the authentication requirement. This goes beyond annotations, though it does not disclose pagination behavior beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with brief segments for definition, return shape, caveat, example, and auth. Every sentence serves a purpose and there is no filler. The warning about the unverified shape is essential context, and the example is practical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no output schema, the description provides the return shape, an example, authentication details, and a reliability caveat. It lacks an explicit statement about behavior when no filter is applied, but the schema defaults and example make the expected behavior fairly clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, yielding a baseline of 3. The description's concrete example (filter_videogame: 'lol') clarifies the expected slug format, which adds meaningful value beyond the schema's vague 'Title slug'. This justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies 'Series' as a league's seasonal editions and provides the return shape, making it evident that the tool retrieves series data. However, it lacks an explicit action verb like 'List' or 'Fetch', and does not directly differentiate from sibling pandascore tools (e.g., pandascore_tournaments), so it falls short of a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example with filter_videogame implies a usage scenario, but there is no explicit statement about when to use this tool versus alternatives like pandascore_tournaments or pandascore_matches. No when-not-to-use or alternative tool references are provided, leaving usage guidance solely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_teamsARead-onlyIdempotent
Esports teams with their current rosters.
Returns: [{id, name, acronym, slug, image_url, location, current_videogame, players:[{id, name, first_name, last_name, role, nationality}]}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: CS2 teams {"filter_videogame": "csgo"}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size (max 100). | |
| search_name | No | Partial team-name match. | |
| filter_videogame | No | Title slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context: the return shape is from vendor docs and unverified, requiring payload inspection, and auth via PANDASCORE_TOKEN is required. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with separate sections for return shape, caveat, example, and auth. All sentences are informative; no fluff, though slightly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 4 optional parameters and no output schema, the description provides return shape, example, auth, and a verification caveat. Pagination is implied via page/per_page in schema. It's sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but the description adds a concrete example for filter_videogame ('csgo' for CS2), clarifying the slug format. Other params are adequately described in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Esports teams with their current rosters' and provides the return shape, clearly indicating this tool retrieves team data with rosters. This distinguishes it from sibling tools like pandascore_players and pandascore_matches, though it's a noun phrase rather than an explicit verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example ('CS2 teams' with filter_videogame: 'csgo') implying when to use it, but doesn't explicitly compare with alternatives like pandascore_players or pandascore_leagues. No exclusions or when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_tournamentsARead-onlyIdempotent
Tournaments — upcoming, running or past — optionally for one title.
Returns: [{id, name, slug, begin_at, end_at, prizepool, tier, league:{id, name}, serie:{id, full_name}, videogame, teams:[…]}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: LoL tournaments {"filter_videogame": "lol"}
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size (max 100). | |
| filter_videogame | No | Title slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior. The description adds valuable context beyond this: the return shape is from vendor docs and unverified, advises inspecting actual payloads, and specifies the auth requirement (PANDASCORE_TOKEN). This is useful behavioral caveat not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, return shape, reliability caveat, example, and auth. It is longer than minimal but every sentence adds value, and the caveat about unverified shape is important. The main purpose is front-loaded, though the format could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed return shape, which is essential. It also includes an example, auth requirement, and an explicit warning about data reliability. Missing is any guidance on when to use this tool instead of sibling Pandascore endpoints, but the core functional context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters (page, per_page, filter_videogame) already have descriptions. The description adds a concrete example ({"filter_videogame": "lol"}) and clarifies that filter_videogame is a title slug, reinforcing the optional one-title filter. This goes slightly beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning tournaments (upcoming, running, past) with optional filtering by title, which distinguishes it from sibling Pandascore tools like matches, series, and leagues. The verb is implied rather than explicit ('Tournaments' as a noun phrase), but the resource and scope are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the phrase 'optionally for one title,' which maps to the filter_videogame parameter. However, it does not explicitly state when to use this tool over alternatives like pandascore_matches or pandascore_series, nor does it mention any exclusions or prerequisites beyond an auth key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pandascore_videogamesARead-onlyIdempotent
The titles PandaScore covers, with the slug every other tool needs. Call this first rather than guessing a slug.
Returns: [{id, name:'Counter-Strike', slug:'cs-go', current_version}] (top-level array) — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: All titles
Auth: needs your own key in PANDASCORE_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context by disclosing the auth requirement (PANDASCORE_TOKEN) and the unverified status of the response shape ('NOT been verified against a live response'), advising the agent to inspect actual payload. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (purpose, usage, return shape, caveat, auth). It is front-loaded with the key purpose. The 'Example: All titles' line is somewhat redundant and the note is slightly verbose, but each part adds some value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 0-param read-only tool, the description covers purpose, usage timing, return shape (top-level array with specific fields), auth, and data reliability caveats. Since there is no output schema, the return shape example and the warning about unverified data are critical and well provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema offers no information. The baseline for 0 params is 4. The description compensates by providing the return shape example, which helps the agent understand what to expect even though parameters are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'The titles PandaScore covers, with the slug every other tool needs' – a specific verb+resource with explicit scope. It distinguishes from sibling tools by focusing on videogame titles and their slugs, positioning itself as a prerequisite for other PandaScore tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call this first rather than guessing a slug', which directly tells the agent when to use this tool and why. This establishes a clear usage order relative to other tools that depend on slugs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_carouselARead-onlyIdempotent
Featured matchups carousel across all sports (homepage highlights).
Returns: [{id, league:{name}, participants:[{name}], startTime, hasMarkets, hasLive}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds the return shape (array of objects with id, league, participants, startTime, hasMarkets, hasLive) and explicitly notes that no authentication is needed, providing useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose, one line for return format, and one for auth. All information is front-loaded and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only endpoint, the description is complete: it states what the tool returns, the data shape, scope, and authentication requirements. The annotations cover safety and idempotency, so no additional behavioral disclosure is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing for the description to clarify. Per the rubric, a baseline of 4 applies when there are no parameters, and the description correctly does not fabricate parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a featured matchups carousel across all sports, specifically for homepage highlights. This distinguishes it from sibling tools like pinnacle_sport_matchups or pinnacle_league_matchups by indicating it is a curated, cross-sport highlight feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case (homepage highlights) and scope (all sports), but does not explicitly name alternative tools or state when not to use it. Still, the 'homepage highlights' context gives adequate guidance for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_enumsARead-onlyIdempotent
Reference enums (countries, currencies, occupations, etc.) used across the API.
Returns: {countries:[{code2, code3, legalAge, license:{name}}], ...}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. The description adds value by showing a sample return structure (countries array) and noting that no authentication is required, which helps the agent understand what to expect without exceeding 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and neatly structured with a sample return and auth note. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description's sample return structure is helpful. However, it only shows one enum type and uses '...' to suggest more, leaving some ambiguity about the full set of enums and their structures. Given the simplicity of the tool, this is reasonably complete but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to explain them. The zero-parameter baseline of 4 applies, and the description correctly omits any parameter details since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a reference tool for enums used across the API, which distinguishes it from other Pinnacle tools that focus on sports, leagues, or matchups. The phrase 'Reference enums' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for getting reference data, but it does not explicitly state when to use it over other tools or provide exclusions. Since it's a self-contained enum lookup with no parameters, usage is obvious, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_labelsARead-onlyIdempotent
Per-sport market-label dictionary — decodes market keys/types into human names (moneyline → 'Match Odds', etc.).
Returns: [{sport, labels:[{marketLabels:[{full, short, type}]}]}] (top-level array, one per sport)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful context: the return shape, the per-sport grouping, and the fact that no auth is needed. This is meaningful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and front-loaded: purpose, example, return shape, and auth in two concise lines. Every sentence earns its place, and there is no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter dictionary lookup, the description is complete: it explains what is returned, the top-level array structure, per-sport grouping, and auth requirements. The absence of an output schema is adequately compensated by the explicit return shape in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description correctly focuses on what the tool returns rather than parameters, and the example mapping adds a helpful touch even though no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('decodes') and names the resource ('per-sport market-label dictionary'), with a concrete example (moneyline → 'Match Odds'). This clearly identifies it as a label-lookup utility and distinguishes it from sibling tools that fetch matchups or market data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement strongly implies when to use it: when you need human-readable labels for Pinnacle market keys. However, there is no explicit guidance about when not to use it or how it compares to related tools like pinnacle_enums or pinnacle_matchup_markets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_league_matchupsARead-onlyIdempotent
All matchups for one league (competition) — e.g. every NBA game on the board.
Returns: [{id, league:{name}, participants:[{name, alignment}], startTime, hasMarkets, isLive}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueId | Yes | League id, from pinnacle_sport_leagues. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world. The description adds the return payload structure with fields like hasMarkets and isLive, plus a note that authentication is not required, giving useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one purpose sentence, a return format block, and an auth note. Every line adds value and the key info is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter listing tool, the description covers the return structure, auth requirement, and league-based scoping. No output schema exists, so the inline return type is essential and provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter leagueId has 100% schema coverage, including its source (pinnacle_sport_leagues) and URL path status. The description doesn't add parameter-specific details but doesn't need to since the schema already defines it clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all matchups for a single league, with the NBA example providing concrete scope. This distinguishes it from sibling tools like pinnacle_sport_matchups and pinnacle_league_matchups_live by its specific league-level granularity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context (all matchups for one league) but does not explicitly mention alternatives or exclusions. While the sibling names hint at related tools, the description itself doesn't say when to prefer this over pinnacle_league_matchups_live or pinnacle_sport_matchups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_league_matchups_liveARead-onlyIdempotent
Live (in-play) matchups for one league (competition).
Returns: [{id, league:{name}, participants:[{name}], startTime, isLive, liveMode}] (top-level array; empty when nothing live)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueId | Yes | League id, from pinnacle_sport_leagues. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description additionally discloses the exact return shape, top-level array behavior, empty response behavior, and that no auth is needed, adding value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose statement, a concise return signature with empty semantics, and an auth note. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with no output schema, the description provides all essential operational context: input provenance, output shape, empty behavior, and authentication status. There are no significant gaps given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, leagueId, is fully described in the input schema with provenance and URL-path context, giving 100% schema coverage. The description adds only the 'one league' scope, so the schema carries the parameter-semantics burden and the description need not compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Live (in-play) matchups for one league (competition)', which clearly states the verb, resource, and scope. This distinguishes it from siblings like pinnacle_league_matchups (non-live) and pinnacle_sport_matchups_live (sport-wide rather than league-scoped).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly signals when to use this tool: when you need live/in-play matchups for a single league. It also explains the empty-array case ('empty when nothing live'), which gives practical context, though it does not explicitly name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_matchupARead-onlyIdempotent
One matchup's detail: participants, league, periods, start time, state.
Returns: {id, league:{name}, participants:[{name, alignment}], periods:[...], startTime, state, type, rotation}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchupId | Yes | Matchup id (from any matchups feed). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds valuable behavioral context by specifying 'Auth: none needed' and the exact return shape, which is particularly useful since there is no output schema. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-sentence summary, a return structure line, and an auth line. Every sentence earns its place, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single well-documented parameter, strong annotations, and a detailed return shape in the description, the tool is well-covered. The only minor gap is that 'periods' is shown as '[...]' without further detail, but overall the description is adequate for a simple single-resource read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description already fully explains the parameter: 'Matchup id (from any matchups feed). Required — part of the URL path.' The description doesn't add extra meaning beyond implying the singular matchup context, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One matchup's detail' and lists the key fields returned, conveying a specific verb+resource. It distinguishes itself from sibling list/matchup tools by emphasizing singularity, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: you must have a matchupId 'from any matchups feed' as stated in the parameter description, and this tool returns the basic detail of that matchup. However, there is no explicit guidance on when to choose this instead of related tools like pinnacle_matchup_markets or pinnacle_matchup_related.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_matchup_marketsARead-onlyIdempotent
All straight (non-parlay) markets + American-odds prices for one matchup and its related markets.
Returns: [{key, matchupId, period, cutoffAt, isAlternate, limits:[{amount, type}], prices:[{designation, points, price}]}] (top-level array; price is American odds)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchupId | Yes | Matchup id (from a matchups feed; needs hasMarkets=true). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent, so the description adds value by clarifying the return format (array of objects with fields), price type (American odds), and stating no auth needed. This goes beyond the annotations with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, return shape, auth requirement. It is front-loaded with the primary action and contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with good annotations, the description includes the essential return structure and auth requirement. It does not elaborate on what 'related markets' includes, but the schema supplies the prerequisite, making the description reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single required parameter matchupId, including the 'hasMarkets=true' prerequisite. The description adds no extra parameter semantics; it only mentions matchupId as part of the return shape, so the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all straight (non-parlay) markets with American-odds prices for a matchup and its related markets. The verb 'returns' and resource 'markets' are specific, and the phrase 'non-parlay' distinguishes it from sibling tools like parlay markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for straight markets via 'non-parlay' and includes context about the scope (one matchup + related markets), but doesn't explicitly name alternatives or state when-not-to-use. The exclusion of parlays is a strong hint, but not a fully explicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_matchup_parlay_marketsARead-onlyIdempotent
Parlay (same-game multi) markets + prices for one matchup and its related markets.
Returns: Same shape as pinnacle_matchup_markets: [{key, type, period, prices:[{designation, price}], limits, status, cutoffAt}]. Prices are AMERICAN odds.
⚠ VERIFIED 2026-08-30: this returns data IDENTICAL to pinnacle_matchup_markets — same markets, same prices, same limits, byte-for-byte on every matchup tested. Pinnacle does NOT apply a correlation adjustment to parlays, so a combination's price is simply the PRODUCT of its legs and there is nothing extra to fetch. Do not present this as a distinct 'parlay price'.
Before offering any combination, read parlayRestriction on the matchup itself (from pinnacle_sport_matchups): unique_matchups means legs must come from DIFFERENT games, forbidden means no parlay, and only allowed permits a same-game multi — 42 of 16,040 matchups surveyed.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| matchupId | Yes | Matchup id (needs hasMarkets=true). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavioral context: it returns data byte-for-byte identical to pinnacle_matchup_markets, that Pinnacle does not apply correlation adjustment (so parlay price = product of legs), and that the tool is effectively redundant. It also states the exact output shape and price format. This exceeds what annotations provide and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear, purposeful sections: the core purpose, return shape, a critical verification note, and usage prerequisite. Each sentence earns its place—there is no fluff. The important warnings are front-loaded and highlighted, making it easy for an agent to scan and act. Despite its length, it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter and no output schema, the description fully covers what an agent needs: the exact return shape, pricing format, the relationship to sibling tools, the prerequisite on parlayRestriction, and the auth requirement. The verification note even covers ambiguity about whether this tool adds value. Nothing essential is missing for correct invocation and use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, matchupId, is fully documented in the schema (coverage 100%) with a description that mentions it requires hasMarkets=true. The tool description does not add new semantic meaning about the parameter itself; it only adds context about the output and usage. Since schema already covers the parameter, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides parlay (same-game multi) markets and prices for a matchup, and explicitly distinguishes it from pinnacle_matchup_markets by noting the return shape is identical. It also clarifies the critical nuance that there is no separate parlay price, preventing misuse. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: it tells the agent to check the parlayRestriction field on the matchup before offering any combination, explains the three possible values and their meaning, and warns not to present this tool's output as a distinct parlay price. It also notes the tool requires hasMarkets=true via the schema, and explicitly states auth is not needed. This is far beyond typical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sport_leaguesARead-onlyIdempotent
Leagues (competitions) for one sport, with feature/group info.
Returns: [{id, name, group, isFeatured, matchupCount}] (top-level array)
Example: Baseball leagues {"sportId": 3}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | Yes | Sport id (e.g. 3 Baseball, 4 Basketball), from pinnacle_sports. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying the exact return structure (top-level array of objects with id, name, group, isFeatured, matchupCount) and noting that no authentication is needed, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficiently structured: a one-line purpose, a return shape, an example, and an auth note. Every line contributes necessary information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no output schema, the description covers the essential return structure and auth, making it sufficient for an agent to invoke correctly. It misses edge-case details like error behavior, but given the tool's simplicity, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single sportId parameter, including examples and its origin from pinnacle_sports. The description's example repeats this information without adding any new semantic detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns leagues (competitions) for one sport with feature/group info, and it lists the exact return fields. This distinguishes it from sibling tools like pinnacle_sport_matchups and pinnacle_league_matchups, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example ('Baseball leagues {sportId: 3}') and notes it is for one sport, which implies when to use it, but it does not explicitly say when not to use it or mention alternative tools for similar data. The guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sport_matchupsARead-onlyIdempotent
Highlighted matchups for one sport (teams, league, start time, market flags).
Returns: [{id, league:{name}, participants:[{name, alignment}], startTime, hasMarkets, isLive}] (top-level array)
Example: Highlighted baseball matchups {"sportId": 3}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | Yes | Sport id, from pinnacle_sports. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds return structure, an auth note, and an example, which is useful extra context. It does not mention pagination or sorting, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, a return array, an example, and an auth note. Every sentence adds necessary information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with a single parameter, the description provides sufficient information: return shape, example invocation, and auth requirements. The missing definition of 'highlighted' is a minor gap, but the open-world hint and simple scope make it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description fully covers sportId ('Sport id, from pinnacle_sports. Required — part of the URL path.'), so the description adds no additional semantics beyond the schema. The example (sportId: 3) is a usage illustration but not new parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Highlighted matchups for one sport' – a specific verb ('returns') with a clear resource ('matchups') and scope ('one sport'). It distinguishes from siblings like pinnacle_sport_matchups_all and pinnacle_league_matchups via the word 'highlighted' and 'one sport'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is for featured/highlighted matchups as opposed to all or live variants, but it does not explicitly name alternatives or exclusions. The example shows how to call with sportId but provides no clear when-to-use vs. when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sport_matchups_allARead-onlyIdempotent
All matchups for one sport (the full list, not just highlighted).
Returns: [{id, league:{name}, participants:[{name, alignment}], startTime, hasMarkets, isLive}] (top-level array)
Example: All baseball matchups {"sportId": 3}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | Yes | Sport id, from pinnacle_sports. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds genuinely useful behavioral context beyond annotations: the exact return shape ("[{id, league:{name}, participants:[...], startTime, hasMarkets, isLive}]"), the "top-level array" structure, and "Auth: none needed." It adds valuable operational detail without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by compact sections for return shape, a concrete example, and auth requirements. Every line contributes unique information with no redundancy or filler. It is appropriately sized for a simple one-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description correctly shoulders the burden of describing the return value, and it does so explicitly. The example and auth note round out what an agent needs for this simple, annotated read-only tool. It could be more complete by explicitly differentiating itself from live and league-scoped siblings (`pinnacle_sport_matchups_live`, `pinnacle_league_matchups`), but the "not just highlighted" note covers the primary sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for sportId, stating it comes from `pinnacle_sports` and is a URL path component. The description adds a concrete worked example ({"sportId": 3} for baseball), giving the agent a grounded value to verify its call against the return structure. This is a modest but real addition beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a clear, specific verb+resource: "All matchups for one sport (the full list, not just highlighted)." The parenthetical explicitly contrasts this with a highlighted-only version, which distinguishes it from the sibling tool `pinnacle_sport_matchups`. The baseball example further reinforces the intended scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "the full list, not just highlighted" provides clear context on when to use this tool (get every matchup for a sport) versus a featured/highlighted subset. However, it never explicitly names the alternative tool (`pinnacle_sport_matchups`) or states when NOT to use it (e.g., live-only should use `pinnacle_sport_matchups_live`), so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sport_matchups_liveARead-onlyIdempotent
Live (in-play) matchups for one sport.
Returns: [{id, league:{name}, participants:[{name}], startTime, isLive, liveMode}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportId | Yes | Sport id, from pinnacle_sports_live. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context beyond this: 'Auth: none needed' and the exact return shape. It clarifies that only live/in-play events are returned, which is a behavioral trait not fully captured by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded with the core purpose, and uses minimal lines to convey the return structure and auth requirement. Every sentence provides relevant information without repetition or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately documents the return fields explicitly (id, league.name, participants, startTime, isLive, liveMode). Combined with the auth note and simple single-parameter schema, the description gives a sufficiently complete picture for a live-list read tool, though pagination and error behavior are not mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains sportId is from pinnacle_sports_live and required. The tool description adds no extra parameter detail beyond the phrase 'for one sport', so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as live (in-play) matchups for a single sport, which distinguishes it from siblings like pinnacle_sport_matchups (likely scheduled) and pinnacle_sport_matchups_all (all sports). However, it does not explicitly name alternative tools, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one sport' gives a hint that this tool is for live matchups filtered by a single sportId, contrasting with broader tools like pinnacle_sport_matchups_all. But there is no explicit guidance on when to use this versus alternatives, nor any exclusions or prerequisites beyond the sportId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sportsARead-onlyIdempotent
All sports with their matchup counts and primary market type.
Returns: [{id, name, primaryMarketType, matchupCount, isFeatured, isHidden}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds 'Auth: none needed' and the exact return shape with field names, which is valuable behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for purpose, one for return shape, and one for auth. It front-loads the main purpose and every line provides necessary information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, this description is largely complete: it states the output, field names, array type, and authentication. The only missing piece is guidance on when to use this specific tool among the many Pinnacle siblings, but the simplicity of the operation makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is no parameter semantics to explain. Per the rubric, a 0-parameter tool starts at a baseline of 4, and the description does not need to add parameter details, though it does specify the return fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'All sports with their matchup counts and primary market type' and the subsequent 'Returns' line clarifies the action. It clearly identifies the resource (sports) and the scope (all), distinguishing it from sibling Pinnacle tools like pinnacle_sport_matchups or pinnacle_sports_live.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus related Pinnacle tools. It does not mention alternatives, exclusions, or specific use cases, leaving the agent without context for selection among many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_sports_liveARead-onlyIdempotent
Sports that currently have live (in-play) matchups.
Returns: [{id, name, matchupCount, primaryMarketType}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds that authentication is not needed and provides the exact return array format, giving useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: one sentence for the core purpose, a return type specification, and an authentication note. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool, the description is complete. It specifies the top-level array structure, fields, and auth requirements. The open-world nature is already covered by annotations, and no output schema exists, so the explicit return format is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (zero parameters), so the description does not need to explain parameter semantics. According to the rubric, a baseline of 4 applies for zero-parameter tools, and the description adds no unnecessary parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: to return sports that currently have live (in-play) matchups. It specifies the return structure with fields like id, name, matchupCount, and primaryMarketType, which distinguishes it from sibling tools like pinnacle_sport_matchups_live that return matchups for a given sport.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like pinnacle_sport_matchups_live or pinnacle_league_matchups_live. The description simply states what it returns, leaving the agent to infer usage context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinnacle_statusARead-onlyIdempotent
API system status (online/offline + per-service health).
Returns: {code, description, services:[{name, status}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds that no authentication is needed and specifies the response shape, which is useful contextual information 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear statement of purpose, a return-format line, and an auth note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status check, the description fully covers the purpose, return format, and authentication requirements. It is sufficient without an output schema, and the sibling context does not demand additional disambiguation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so no parameter details are needed. The description appropriately focuses on the output, giving it the baseline 4 for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports API system status with online/offline and per-service health, and specifies the return structure. This distinguishes it from other status tools in the sibling list by detailing per-service health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like kalshi_exchange_status or apisports_status. The implied usage is to check Pinnacle API status, but there are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_awardsARead-onlyIdempotent
Season awards — Player/Manager of the Month and other honours for a season.
Returns: {player_awards:[…], manager_awards:[…]}
Auth: none needed.
Also answers this: mlb_awards.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds value beyond annotations by disclosing 'Auth: none needed' and the return shape '{player_awards:[…], manager_awards:[…]}' (useful given there is no output schema). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: purpose first, then return shape, auth, and a routing note. Every line earns its place. The 'Also answers this: mlb_awards' line is cryptic and slightly confusing, which prevents a 5, but overall it is efficient and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read tool, the essentials are covered: purpose, fully documented params in schema, clear auth requirement, and a disclosed return structure despite the missing output schema. Annotations cover read-only/idempotent safety. It is essentially complete; only the ambiguous mlb_awards routing note detracts slightly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both cid and sid carry adequate descriptions in the schema ('Competition id (8)' and 'Season id (2025 = 2025/26)'). The tool description adds no parameter semantics beyond the schema, so the high-coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific read operation: 'Season awards — Player/Manager of the Month and other honours for a season.' The verb and resource are clear, and the scope (per-season honours) is explicit. It doesn't strongly differentiate from sibling pl_* tools, but no sibling has an obviously overlapping purpose, so a 4 is fair rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or a preferred sibling for other award/season queries. The cryptic 'Also answers this: mlb_awards' hints at routing but does not provide usable when-to-use guidance. Nothing tells an agent which tool to pick over the many pl_* season-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_broadcasting_eventsARead-onlyIdempotent
TV/broadcast schedule for a date range (ISO 8601 UTC).
Returns: {pageInfo, content:[{match/broadcast schedule entries}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | No | Range end (ISO 8601 UTC). | |
| fromDate | No | Range start (ISO 8601 UTC, e.g. 2025-08-01T00:00:00Z). | |
| pageSize | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior. The description adds valuable context beyond these annotations by specifying the date format (ISO 8601 UTC), the auth requirement (none), and the return shape ('{pageInfo, content:[...]}'). This enhances transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first line states the purpose, followed by return format and auth requirement. Every sentence earns its place with no redundant information. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (3 optional parameters, no output schema, strong annotations), the description covers essential aspects: purpose, date format, auth, and a top-level return structure. It is slightly vague on the contents of 'match/broadcast schedule entries', but this is acceptable for a simple read-only schedule tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage for all three parameters (fromDate, toDate, pageSize). The description does not add additional parameter-level meaning, so it relies on the schema. The baseline score of 3 applies because the schema does the heavy lifting and the description offers no extra semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a TV/broadcast schedule for a date range, using ISO 8601 UTC. It lacks an explicit verb like 'list' or 'get', but the noun phrase is functional and distinct from siblings like 'afl_broadcast_events' or 'pl_broadcast_match_events' by virtue of the tool name and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. There are sibling tools like 'pl_broadcast_match_events' or 'afl_broadcast_events', but no mention of how this schedule tool differs or when to prefer it. The usage context is only implied by 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.
pl_broadcast_match_eventsARead-onlyIdempotent
Broadcast events for a specific match (sportDataId = SDP match id).
Returns: {pageInfo, content:[{broadcast entries for the match}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Page size. | |
| sportDataId | Yes | SDP match id (from pl_matches). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds useful context: no auth required and the return shape. However, it does not describe pagination behavior beyond the schema's pageSize default, nor the nature of 'broadcast entries.' This is adequate for a read-only tool with strong annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences covering purpose, return type, and authentication. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one required parameter and no output schema, the description provides sufficient context: purpose, key parameter, return shape, and auth. It could be enhanced by clarifying how this differs from pl_broadcasting_events, but it is not critically incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with meaningful descriptions. The description's mention of 'sportDataId = SDP match id' adds no value beyond the schema, which already states 'SDP match id (from pl_matches).' Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Broadcast events for a specific match' with a specific identifier (sportDataId). It distinguishes from likely siblings like pl_broadcasting_events by emphasizing 'specific match' rather than a general listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied via 'specific match' and the note that sportDataId comes from pl_matches, but no explicit alternatives or exclusion criteria are provided. The agent must infer when to use this over pl_broadcasting_events or pl_match_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_clubs_metadataARead-onlyIdempotent
Club metadata (names, stadiums, websites, colours) for theming — static config blob.
Returns: [{id, name, stadium, website}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplements the annotations by specifying the return shape (top-level array of objects with id, name, stadium, website) and stating no authentication is required. It also characterizes the data as a 'static config blob,' implying immutability. No contradictions with the read-only and idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one main sentence, a return type line, and an auth note. Every line adds distinct value, and the return format is front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, return structure, and authentication in just a few lines, rendering the tool understandable without an output schema. Minor gap: it mentions 'colours' in the opening but omits it from the return sample, which could cause slight ambiguity about the actual response fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter schema to explain. The baseline for zero-parameter tools is 4, and the description appropriately focuses on output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides club metadata (names, stadiums, websites, colours) specifically for theming, distinguishing it from sibling tools like pl_teams that serve different purposes. The 'static config blob' label further clarifies its precise role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for theming' provides clear context for when to use this tool, and 'Auth: none needed' simplifies access expectations. It doesn't explicitly name alternatives or contrasting tools, but the use case is specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_competitionARead-onlyIdempotent
One competition by id (8 = Premier League).
Returns: {id, code, name}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8 = Premier League). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior, so the description adds value by explicitly stating 'Auth: none needed' and the return shape '{id, code, name}'. It goes beyond what annotations provide without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short sentences covering purpose, return value, and authentication. Every sentence adds distinct value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with one parameter, the description fully covers the essential context: what it does, what it returns, and that no auth is needed. Annotations cover safety and idempotency, making this complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the 'cid' parameter, including the example (8 = Premier League) and that it's required and part of the URL path. The description repeats this information without adding new semantic detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches one competition by id, with a specific example (8 = Premier League). This distinguishes it from sibling pl_competitions (plural), which presumably lists competitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One competition by id' implies usage for a single competition lookup, contrasting with plural alternatives. However, it does not explicitly mention when not to use it or name an alternative tool, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_competitionsARead-onlyIdempotent
All competitions on the platform (Premier League = id 8). Paginated.
Returns: {pagination, data:[{id, code, name}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| next_cursor | No | Opaque pagination cursor from pagination._next. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds value by stating pagination behavior, the return shape ({pagination, data:[{id, code, name}]}), and that no authentication is needed, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and efficient, covering purpose, pagination, return format, and auth in three short sentences. Every sentence carries useful information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description provides essential details: what resource is returned, pagination, return structure, and auth. It also includes a specific example (Premier League = id 8). This is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions pagination but does not add detail about limit or next_cursor beyond what the schema already provides (page size and opaque cursor). No additional semantics are given for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing all competitions on the platform. It gives the specific Premier League ID as an example, making the resource unambiguous. This distinguishes it from sibling tools like pl_competition (singular) which likely fetches a single competition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all competitions but does not explicitly state when to use this tool over alternatives like laliga_competitions or afl_competitions_list. It mentions pagination and the Premier League ID, but no exclusions or explicit context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_contentARead-onlyIdempotent
Content list/search (articles, video, photos) — filter by content types, entity references (SDP_FOOTBALL_MATCH/PLAYER/TEAM) and tags.
Returns: {pageInfo, content:[{id, type, title, description, date, references, tags}]}
Example: Latest articles + videos {"lang": "en", "contentTypes": "TEXT,VIDEO", "limit": 5}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | Yes | Language (e.g. en). Required — part of the URL path. | |
| limit | No | Page size. | |
| detail | No | Detail level. | DETAILED |
| offset | No | Pagination offset. | |
| tagNames | No | Tag name filter. | |
| references | No | Link to an entity, e.g. SDP_FOOTBALL_MATCH:2561895 (highlights), SDP_FOOTBALL_PLAYER:{pid}. | |
| contentTypes | No | CSV of TEXT, VIDEO, PHOTO, PLAYLIST, PROMO, AUDIO. | TEXT,VIDEO |
| tagExpression | No | Tag filter expression, e.g. "Highlights"or"Match Highlights". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context: return shape (pageInfo + content array with fields), auth ('none needed'), and an example payload. It does not mention pagination details beyond pageInfo, but the provided info is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one line of purpose, a return shape, a minimal example, and an auth note. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list/search tool with 8 params and no output schema, the description is complete enough: it covers purpose, filters, return shape, example, and auth. It does not detail pagination fields or error behavior, but that is acceptable for a read-only list tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter already has a descriptive comment. The description names the conceptual filters (content types, entity references, tags) and provides a concrete example, but it does not add extra semantics beyond what the schema already documents. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Content list/search') and clearly states the scope: articles, video, photos, with filtering by content types, entity references, and tags. This distinguishes it from sibling tools like pl_content_item (single item) and news/video-specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the action 'list/search' and the example 'Latest articles + videos', but there is no explicit guidance on when to use this tool instead of alternatives like pl_content_item or pl_news_latest. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_content_itemARead-onlyIdempotent
One content item by type + id (TEXT/VIDEO/PHOTO/PLAYLIST/PROMO/AUDIO).
Returns: {id, type, title, description, date, body, ...}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | Yes | Language (e.g. en). Required — part of the URL path. | |
| type | Yes | Content type (TEXT, VIDEO, PHOTO, PLAYLIST, PROMO, AUDIO). Required — part of the URL path. | |
| detail | No | Detail level. | DETAILED |
| contentId | Yes | Content id (from pl_content). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints, so the safety profile is covered. The description adds valuable context beyond annotations: 'Auth: none needed' and the return shape ('Returns: {id, type, title, description, date, body, ...}'). This gives the agent expectations for the response without conflicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, containing only two sentences plus an auth note. It front-loads the core purpose, includes return format, and states authentication requirements. No filler or repetition—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-item getter, the description provides sufficient context: type enumeration, id usage, return shape, and auth. It lacks details on the 'detail' parameter options and potential error cases, but the schema covers required fields. Overall, it is nearly complete for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter described (lang, type, detail, contentId). The description itself does not add additional parameter semantics beyond what schema already provides, though it does repeat the type enumeration. Baseline 3 is appropriate since the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single content item by type and id, listing the exact allowed types (TEXT/VIDEO/PHOTO/PLAYLIST/PROMO/AUDIO). This distinguishes it from sibling tools like 'pl_content' (which likely lists items) and other content-specific getters. The verb is implicit but unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this when you need one specific content item by type and id. However, it does not explicitly contrast with alternatives like 'pl_content' for listing, nor does it state when not to use this tool. No explicit exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_countryARead-onlyIdempotent
Echoes the caller's detected country (used by the site for content geo-gating).
Returns: {country}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context beyond the annotations: it explicitly states 'Auth: none needed' and describes the return value. Since annotations already declare read-only, idempotent, and open-world traits, the bar for additional disclosure is lower, and this description meets it by covering auth requirements and output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using a few short lines to convey purpose, return value, and authentication. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and a simple purpose, the description is fully complete. It explains what the tool does, why it exists, what it returns, and that no auth is needed. No additional context is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline for this dimension is 4. The description doesn't need to explain parameters, and it goes beyond by mentioning the return format ({country}), providing semantic meaning where the schema is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Echoes') and resource ('caller's detected country'), and explains its purpose ('used by the site for content geo-gating'). This distinguishes it from sibling PL tools, which focus on competitions, teams, matches, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (i.e., to determine the caller's country for geo-gating), but does not explicitly mention alternatives or exclusion criteria. Given the unique function compared to siblings, the implied usage is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_current_gameweekARead-onlyIdempotent
The current matchweek number (static config blob).
Returns: {matchweek}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by stating 'static config blob' (implying the value does not change frequently) and explicitly noting 'Auth: none needed', which simplifies invocation. This is useful context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using only two short sentences plus return and auth notes. Every element earns its place: it states what the tool returns, labels it as a config blob, and confirms no authentication is required. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, annotation-rich tool, the description is mostly complete. It specifies the output format ({matchweek}) and the static nature. However, it does not explain what a matchweek number is or how it might be used (e.g., for scheduling comparisons), which could be helpful for an agent unfamiliar with the domain. Given the simplicity, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description is not expected to explain parameter semantics. The baseline for zero-param tools is 4, and the description appropriately focuses on the return value. No additional parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'the current matchweek number' and notes it returns {matchweek}. However, it uses a noun phrase rather than an imperative verb like 'Get' or 'Retrieve', making it slightly less direct. It distinguishes itself from siblings by being the only tool focused specifically on the current matchweek.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool instead of alternatives. The phrase 'static config blob' hints that this is a config value rather than live data, but there is no mention of alternatives such as pl_matchweek_matches or pl_metadata. The 'Auth: none needed' line is a prerequisite hint, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_matchARead-onlyIdempotent
Single match detail (match centre) — richer than the list item; adds seasonInfo.
Returns: {matchId, competitionId, competition, seasonInfo, matchWeek, phase, kickoff, period, clock, ground, attendance, homeTeam, awayTeam, resultType}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id (7-digit, from pl_matches; e.g. 2561895). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the description doesn't need to repeat that. It adds value by stating 'Auth: none needed' and enumerating the return fields, which gives the agent clear expectations about the response. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first states purpose and distinction, second lists return fields and auth requirement. Every sentence earns its place, and it is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers purpose, return fields, auth, and id provenance. It is sufficiently complete for an agent to invoke, though it omits potential error behavior, which is acceptable given the low complexity and strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a rich description of the id parameter (format, example, source, URL path), so the description adds no additional parameter semantics. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single match's detailed information ('match centre') and distinguishes it from the list-level tool by noting it is 'richer than the list item; adds seasonInfo.' The return field list further reinforces the specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when richer match detail than the list item is needed, but it does not name alternatives like pl_match_events or pl_match_stats, nor does it provide explicit when-not-to-use guidance. The usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_match_commentaryARead-onlyIdempotent
Live text commentary feed for a match (paginated).
Returns: {pagination, data:[{type, time, timestamp, comment, team1, team2}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. Required — part of the URL path. | |
| sort | No | Sort order. | timestamp:desc |
| limit | No | Page size. | |
| next_cursor | No | Pagination cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only and idempotent, so the safety profile is clear. The description adds useful context beyond annotations: it states that the result is paginated, provides the return shape ({pagination, data:[...]}), and explicitly notes 'Auth: none needed.' These details help the agent understand the response format and access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: a one-line purpose, a return shape, and an auth note. Every sentence adds value with no redundancies, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return structure and notes pagination, which is crucial since no output schema is present. It briefly mentions auth, but does not explain how to use next_cursor for pagination or the meaning of all data fields (e.g., type, team1, team2). Given the simplicity of the tool and the strong annotations, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters with descriptions, including defaults and types. The description adds no additional parameter-specific semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides a 'live text commentary feed for a match (paginated)', which is a specific verb+resource combination. It clearly distinguishes itself from sibling tools like pl_match_events or pl_match_stats by focusing on commentary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving live text commentary, but it does not explicitly state when to use it instead of alternatives such as pl_match_events or pl_match_stats. No exclusions or alternative tool references are given, so the guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_matchesARead-onlyIdempotent
Primary fixtures/results feed — filter by competition, season, matchweek, team, period (PreMatch/Live/FullTime) or a kickoff date range. Paginated.
Returns: {pagination, data:[{matchId, competition, season, matchWeek, phase, kickoff, period, clock, ground, attendance, homeTeam:{id, name, score, halfTimeScore}, awayTeam, resultType}]}
Example: 2025/26 matchweek 1 results {"competition": 8, "season": 2025, "matchweek": 1, "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort, e.g. kickoff:asc or kickoff:desc. | |
| team | No | Filter to one team's matches. | |
| limit | No | Page size. | |
| period | No | Match state filter. One of: PreMatch, Live, FullTime. | |
| season | No | Season id (2025 = 2025/26). | |
| matchweek | No | Matchweek number. | |
| competition | No | Competition id (8). | |
| next_cursor | No | Pagination cursor. | |
| kickoff_after | No | Only matches kicking off after this date (YYYY-MM-DD). | |
| kickoff_before | No | Only matches kicking off before this date (YYYY-MM-DD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so no contradiction. The description adds valuable behavioral context beyond annotations: it states pagination, provides the exact return structure with fields, notes 'Auth: none needed', and gives a working example. This exceeds the baseline for annotation-covered tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states purpose and filters, followed by a return schema, a concrete example, and auth note. Each element earns its place, though the response block is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters and no output schema, the description compensates richly: it declares pagination, provides a full return object shape, includes an example query, and confirms auth is unnecessary. This gives an agent enough context to invoke the tool and interpret results correctly, even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters, so baseline is 3. The description enhances this by listing the filterable categories and providing a concrete example showing how to combine competition:8, season:2025, and matchweek:1. It also clarifies the period enum values. This adds integration-level meaning beyond raw schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Primary fixtures/results feed', clearly identifying the tool as a list/query endpoint for match data. It names the specific resource (fixtures/results) and enumerates filter dimensions (competition, season, matchweek, team, period, kickoff date range), distinguishing it from singular siblings like pl_match or specific pl_matchweek_matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Primary fixtures/results feed' signals this is the default choice for match listings, and the example shows a concrete usage (2025/26 matchweek 1). However, it does not explicitly state when to use alternatives like pl_match or pl_matchweek_matches, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_match_eventsARead-onlyIdempotent
Match events — goals, cards, subs split by home/away team, each with playerId, time, period, timestamp.
Returns: {homeTeam:[{type, playerId, time, period, timestamp}], awayTeam:[…]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context: the return structure and 'Auth: none needed'. It does not describe error handling or edge cases, but for a simple read-only operation with good annotations, this is sufficient extra behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: first line describes the content, second line gives return format, third line states auth. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, clear annotations, and no output schema, the description is complete. It provides the exact return shape, making the output predictable. The lack of output schema is mitigated by the explicit return type description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'id' is already well-described as 'Match id. Required — part of the URL path.' The description adds no further parameter semantics, but the schema fully documents it, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (match events) and specifies the exact content (goals, cards, subs) and split by home/away team. It includes the return structure, distinguishing it from sibling tools like pl_match_lineups and pl_match_stats. Though lacking an explicit verb, 'Match events' unambiguously implies retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching match events for a given match id, but provides no explicit when-to-use guidance or comparisons to alternatives. It doesn't mention exclusions or when not to use this tool, leaving the agent to infer from context among many pl_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_match_lineupsARead-onlyIdempotent
Match lineups — home_team/away_team players[] with formation and subs.
Returns: {home_team:{players, formation, subs}, away_team:{…}}
Auth: none needed.
Also answers this: seriea_match_lineups.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by stating no auth is needed and detailing the return structure ({home_team:{players, formation, subs}, away_team:{…}}). It also discloses that the tool covers Serie A lineups ('Also answers this: seriea_match_lineups'), which is a behavioral trait. The readOnlyHint and idempotentHint are consistent; 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the purpose and return format. It avoids filler, though the final phrase 'Also answers this: seriea_match_lineups' is slightly cryptic and could be clearer. Overall, it is an efficient 3–4 sentence definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool, the description covers essential aspects: return format, auth requirements, and league coverage. It doesn't discuss error handling or edge cases, but these are not critical for a straightforward lookup. The cross-league note and missing output schema are adequately addressed by the inline return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the only parameter (id), and the schema's description already explains it as 'Match id. Required — part of the URL path.' The tool description adds no further semantic detail about the parameter, so the baseline of 3 applies because the schema handles the documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns match lineups with formation and subs, and provides the return structure. It also explicitly mentions it can serve seriea_match_lineups, which helps an agent distinguish it from that sibling. However, it does not explicitly state the league (Premier League) in the description, relying on the tool name, which is a minor ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides 'Auth: none needed' but no explicit guidance on when to use this tool versus alternatives. The phrase 'Also answers this: seriea_match_lineups' hints at a use case but without conditions or exclusions. There is no statement like 'use this for Premier League lineups, and also for Serie A lineups when needed.' This leaves selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_match_officialsARead-onlyIdempotent
Match officials — referee, assistants, fourth official, VAR.
Returns: {matchId, matchOfficials:[{role, name, …}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which tell the agent this is a safe read operation. The description adds 'Auth: none needed' and a return object structure ({matchId, matchOfficials: [...]}), which are useful behavioral details not covered by annotations. This exceeds the baseline while remaining concise, though it doesn't address error handling or empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a short purpose phrase, a return signature, and an auth note. It front-loads the resource name and roles, and every sentence carries useful information with no filler. This is an efficient, well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required integer parameter, no output schema), the description provides enough context for basic usage: it names the resource, identifies the input, and gives a partial return shape. The '…' leaves some response fields unspecified, but for a straightforward read-only fetch this is sufficient. Missing details like error responses or empty behaviors are not critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter exhaustively with 'Match id. Required — part of the URL path.' The tool description does not add any further insight about the id parameter, such as how to obtain it or any value constraints. With 100% schema coverage, the baseline of 3 applies, and the description contributes no additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Match officials' and enumerates the specific roles (referee, assistants, fourth official, VAR), making it unambiguous what data is returned. The 'Returns:' line reinforces that it provides match officials for a given match. However, the description lacks an explicit verb like 'Get' or 'List', so it reads as a noun phrase rather than an action statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to select this tool over sibling tools such as pl_match, pl_match_lineups, or pl_match_stats. There are no mention of alternatives, conditions, or exclusions, so an agent has no clue about the intended use case beyond the tool's obvious resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_match_statsARead-onlyIdempotent
Full team match stats — one block per side with ~200 granular Opta metrics (possession, shots, xG, passes, tackles, …).
Returns: [{side: Home, teamId, stats:{possessionPercentage, totalScoringAtt, expectedGoals, accuratePass, totalTackle, …}}, {side: Away, …}] (top-level array of 2)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Match id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable context: return structure (array of 2 objects with side/teamId/stats), the scale of data (~200 metrics), and that no auth is needed. It does not repeat annotation information, complying with the guideline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: a concise summary, then return format, then auth. It uses bullet-like lines and an example of the return shape without unnecessary prose. Every sentence provides useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description compensates by showing the return structure and example fields. It covers the essential aspects: what it returns, the shape, scale, and auth. It does not mention error cases or pagination, but these are not critical for a read-only stats endpoint with a single required parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'id' parameter with a clear description ('Match id. Required — part of the URL path.'). The tool description itself adds no extra parameter semantics beyond what the schema already states, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Full team match stats' with ~200 Opta metrics. It distinguishes from sibling tools like pl_match and pl_match_events by focusing on team-level granular stats and providing a return structure example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context—if you need comprehensive team-level stats for a match, use this tool. It clearly indicates what data it returns (possession, shots, xG, etc.), but it does not explicitly name alternatives or state when not to use it. That prevents a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_matchweek_matchesARead-onlyIdempotent
Matches for one matchweek (v1 path alternative to pl_matches?matchweek=).
Returns: {pagination, data:[{matchId, kickoff, homeTeam, awayTeam, ground, period}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mw | Yes | Matchweek number. Required — part of the URL path. | |
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| limit | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context beyond these: 'Auth: none needed' and the concrete return shape including pagination and data fields. This gives the agent a clear expectation of the response without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of three short lines. It is front-loaded with the main purpose, immediately followed by the return type and auth requirement. Every sentence earns its place, with no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description is nearly complete: it provides the return shape, auth requirement, and relationship to a sibling. It lacks explicit details on pagination mechanics (e.g., how to page through results beyond the limit parameter), but the presence of a pagination field in the return and the limit parameter in the schema partially cover this. Overall, it is adequate with only minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters (mw, cid, sid, limit) already described in the input schema. The description does not add additional parameter details beyond mentioning matchweek, but it does imply that cid, sid, and mw are path-based parameters via 'v1 path alternative'. This is minimal added value, so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as fetching 'Matches for one matchweek' and explicitly positions it as a 'v1 path alternative to pl_matches?matchweek=', distinguishing it from sibling tools. The verb and resource scoping are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating this is an alternative to pl_matches?matchweek=, implying when this path-based route might be preferred. It does not explicitly state when not to use it or mention other alternatives, but the context is sufficient for an agent to make a reasonable choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_metadataARead-onlyIdempotent
Generic entity metadata (external/fantasy profile links). type ∈ SDP_FOOTBALL_PLAYER, SDP_FOOTBALL_TEAM.
Returns: {metadata:{…external links / fantasy ids}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mid | Yes | Entity id (player id or team id). Required — part of the URL path. | |
| type | Yes | Entity type (SDP_FOOTBALL_PLAYER or SDP_FOOTBALL_TEAM). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds that no authentication is needed and specifies the return structure, which goes beyond the annotations. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with three short sentences covering purpose, return format, and authentication. It is front-loaded with the main purpose and contains no unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers return format and auth, which is important since there is no output schema. However, the term 'generic entity metadata' is vague and the return structure uses an ellipsis, leaving some ambiguity about the full contents. For a simple two-parameter read-only tool, this is sufficient but lacks exhaustive detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters with 100% coverage. The description's mention of type constraints simply reiterates the schema. No additional parameter semantics are provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves entity metadata for football players and teams, explicitly listing the accepted types (SDP_FOOTBALL_PLAYER, SDP_FOOTBALL_TEAM) and the return content (external/fantasy profile links). This gives a specific verb+resource, though it doesn't explicitly differentiate from sibling pl_* tools beyond the 'generic' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching generic entity metadata but does not explicitly state when to use this tool versus alternatives like pl_player or pl_team. There is no 'use this when' or exclusion guidance, so usage is only implied from the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_news_latestARead-onlyIdempotent
Latest news, smart-ranked (homepage feed).
Returns: [{title, author, body, contentSummary, canonicalUrl, date}] (top-level array)
Example: Latest news {"limit": 5}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tag filter (e.g. content-type:article,content-format:long-read). | |
| limit | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds that no auth is needed and reveals the return shape, which are helpful supplemental details. There is no contradiction with annotations, and no destructive behavior is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, opening with the tool's purpose and immediately providing return structure, an example, and auth requirements. No fluff or redundancy. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only feed tool, the description covers the core need: what it returns, an example call, and auth status. The absence of an output schema is mitigated by the explicit field list. It could elaborate on the 'smart-ranked' algorithm or tag syntax, but that is not essential for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage), so the description's role is minimal. The example with 'limit': 5 provides a concrete usage illustration but does not add new semantics beyond the schema. Baseline score of 3 is appropriate given the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the latest news with a smart ranking, described as the homepage feed. It lists the return fields, making the resource and action unambiguous. It does not explicitly contrast with siblings like pl_news_popular, but the 'latest' vs 'popular' distinction is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context that this is the homepage feed for latest news, but it does not specify when to prefer this over siblings such as pl_news_popular or pl_content. No exclusions or alternative tool mentions are provided. The example and auth note add some context, but usage guidance is mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_news_popularARead-onlyIdempotent
Popular news over the last recency hours, smart-ranked.
Returns: [{title, author, contentSummary, canonicalUrl, date}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| recency | No | Lookback window in hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by specifying the return format (top-level array with fields), confirming no auth is required, and introducing the 'smart-ranked' concept. Since readOnlyHint, openWorldHint, and idempotentHint are already provided, the additional return-structure and auth details are valuable. It does not go into depth about ranking logic or pagination, but it covers the essentials for a simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, covering purpose, return format, and auth in three short segments. There is no redundancy or filler content. The most important information is front-loaded, and every sentence contributes useful details for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and no output schema, and the description provides the return structure and auth requirements, which is largely sufficient. However, it does not explicitly identify the domain (Premier League) or explain what 'smart-ranked' means, leaving minor gaps. The level of detail is adequate 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, with clear descriptions for 'limit' and 'recency'. The tool description only repeats the recency concept without adding new parameter context. Since the schema already fully documents the parameters, the description provides minimal additional semantic value, making a baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Popular news over the last `recency` hours, smart-ranked,' which identifies both the action and the resource. It also distinguishes itself from sibling tools like pl_news_latest and pl_video_popular by specifying 'popular' and the recency window. The verb is implicit (retrieve), but the scope is concrete and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the recency parameter and 'smart-ranked' but does not explicitly state when to use this tool versus alternatives. It lacks any mention of exclusions or alternative tools (e.g., pl_news_latest for latest news). The guidance is sufficient for a basic understanding but not for optimal tool selection in all cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_playerARead-onlyIdempotent
Full player career — one entry per club/season spell with dates, height/weight, shirtNum, preferredFoot, position.
Returns: [{id, name, position, currentTeam, country, countryOfBirth, height, dates}] (top-level array, one per spell)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | Player id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds 'Auth: none needed' and the exact return shape, including a top-level array with one entry per spell. This gives agents actionable behavioral knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a purpose line, a return format line, and an auth line. All information is front-loaded with no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, it explains output shape and auth sufficiently. Minor deduction: the first sentence mentions fields like weight, shirtNum, and preferredFoot that do not appear in the return example, creating slight ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes pid ('Player id. Required — part of the URL path') with 100% coverage, and the description adds no additional parameter meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full player career' and specifies the granularity as 'one entry per club/season spell', listing key fields like height/weight, shirtNum, preferredFoot, and position. This distinguishes it from sibling tools such as pl_player_basic or pl_player_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context—it is for full career history with per-spell entries—but does not explicitly mention alternatives or when not to use it. This earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_player_basicARead-onlyIdempotent
Lightweight player profile — name, position, country, currentTeam.
Returns: {id, name, firstName, lastName, position, country, currentTeam}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | Player id (from pl_players; e.g. 223094 = Haaland). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds value by stating that no authentication is required and by explicitly listing the response fields. It does not cover error behavior or data freshness, but these are less critical given the annotations and simple nature of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sections covering what the profile includes, the exact return shape, and auth requirements. Every sentence adds useful information and there is no filler. It is front-loaded with the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one parameter and no output schema, the description is complete: it states the returned object structure and authentication requirements. The annotations cover safety and idempotency. The description gives an agent enough information to select and invoke the tool correctly without needing to infer hidden behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'pid' is fully documented in the input schema with type, origin (pl_players), an example, and the fact that it is part of the URL path. Since schema coverage is 100%, the description does not need to add parameter details. The description contributes nothing beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a 'Lightweight player profile' and specifies the fields it returns (name, position, country, currentTeam). It lacks an explicit verb like 'retrieve' but the intent is unambiguous. The word 'Lightweight' subtly distinguishes it from fuller player profile tools, though it does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for basic profile lookups and states that no auth is needed, which is useful context. However, it provides no explicit guidance on when to use this tool versus alternatives like pl_player or pl_player_info. There are no exclusions or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_player_comp_statsARead-onlyIdempotent
A player's career stats aggregated across the competition (all seasons).
Returns: {player, stats:{…Opta player metrics: goals, goalAssists, expectedGoals, totalPasses, …}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| pid | Yes | Player id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, setting a safe-read baseline. The description adds value by specifying the return structure (player and stats with Opta metrics) and explicitly stating 'Auth: none needed.' This goes beyond annotations by giving insight into the response shape, though it does not cover potential rate limits or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-sentence summary of purpose, followed by return format and auth info. Every line contributes meaning without redundancy or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-documented parameters and strong annotations, the description is sufficiently complete. It provides a sample return structure, clarifies auth requirements, and states the aggregation scope. No output schema exists, but the informal return signature helps the agent understand the tool's output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with each parameter (cid, pid) described as an integer and part of the URL path. The description itself does not add much parameter-level detail beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'A player's career stats aggregated across the competition (all seasons).' This specifies a distinct verb+resource (retrieve career stats) and scope, differentiating it from sibling tools like pl_player_season_stats or pl_player_leaderboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when aggregated career stats across all seasons for a player in a competition are needed. It does not explicitly name alternatives or exclusions, but the 'all seasons' aggregation and the need for cid/pid make the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_player_infoARead-onlyIdempotent
Player bio scoped to a season — team/shirt/dates as they were that season.
Returns: {id, name, currentTeam, shirtNum, country, countryOfBirth, weight, dates}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| pid | Yes | Player id. Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly and idempotent. The description adds 'Auth: none needed' and explicitly lists the returned fields. It adds useful context without contradicting the annotations, though it doesn't mention potential edge cases or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The main purpose is first, followed by return structure and auth note. Every word contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only endpoint with 3 fully documented parameters and no output schema, this description is complete: it states scope, lists all returned fields, and confirms auth requirements. It gives enough for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all three parameters with descriptions, including examples for sid and cid. The description's 'scoped to a season' reinforces the sid parameter's meaning but adds no new parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Player bio scoped to a season — team/shirt/dates as they were that season.' This clearly distinguishes the tool from siblings like pl_player or pl_player_basic, which lack the seasonal scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly sets the context: this tool is for season-specific player bio data. While it doesn't explicitly name alternatives or say 'when not to use,' the scoping phrase provides clear guidance on when this tool is appropriate, differentiating it from season-agnostic player endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_player_leaderboardARead-onlyIdempotent
Player stat leaderboard for a season — sort by any Opta metric (goals, goal_assists, clean_sheets, total_passes, …); filter by position. Each row: {playerMetadata, stats}.
Returns: {pagination, data:[{playerMetadata:{id, name, position, team}, stats:{goals, goalAssists, …}}]}
Example: 2025/26 top scorers {"cid": 8, "sid": 2025, "sort": "goals:desc", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| sort | No | Sort metric:dir (e.g. goals:desc, goal_assists:desc, clean_sheets:desc). snake_case or camelCase accepted. | goals:desc |
| limit | No | Page size. | |
| position | No | Position filter (Goalkeeper, Defender, Midfielder, Forward). | |
| next_cursor | No | Pagination cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, open world, idempotent), the description adds useful behavioral context by stating 'Auth: none needed' and detailing the exact return shape with pagination and data rows. This goes beyond the annotation hints and helps the agent understand the tool's side-effect-free and response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose summary, a clear return-type block, and a JSON example with an auth note. Every part earns its place without fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return format, including the structure of playerMetadata and stats, and provides an example for clarity. It covers pagination, auth, and the key parameters, making it complete for a read-only leaderboard tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all six parameters with descriptions (100% coverage), so the baseline is 3. The description enhances this by listing additional Opta metric examples (total_passes) and providing a full example request that demonstrates how cid, sid, sort, and limit are combined, adding meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'Player stat leaderboard for a season' with sorting by Opta metrics and filtering by position, which distinguishes it from team-level leaderboards and other player stat tools. The example of '2025/26 top scorers' reinforces the specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (season leaderboard, sortable metrics, position filter) and provides a concrete usage example. However, it does not explicitly reference alternative player-stat tools or state when not to use it, so it falls short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_playersARead-onlyIdempotent
Player directory for a season (paginated; the Players index page).
Returns: {pagination, data:[{id, name, position, country, currentTeam, shirtNum, preferredFoot}]}
Example: First page of 2025/26 players {"cid": 8, "sid": 2025, "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| limit | No | Page size. | |
| position | No | Position filter (Goalkeeper, Defender, Midfielder, Forward). | |
| next_cursor | No | Pagination cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds useful context beyond annotations by specifying pagination, the exact return shape ({pagination, data:[...]}), and the lack of authentication requirements. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured, with a one-sentence purpose, a return format, a practical example, and an auth note. Every line serves a clear function, with no redundant wording or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by revealing the return structure and providing a concrete invocation example. Combined with a fully described input schema, the agent has sufficient context to select and call the tool correctly, including pagination awareness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions, so the baseline is 3. The description only adds a concrete example using cid, sid, and limit, which reinforces schema semantics but does not introduce new meaning or clarify aspects not already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a player directory for a season, with the 'Players index page' phrase adding specificity. It distinctively positions it against sibling tools like pl_players_by_id or pl_squad by implying a listing context, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the descriptor and example (listing players for a given season), but the description lacks explicit guidance on when to use this tool versus other player-related tools like pl_players_by_id or pl_squad. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_players_by_idARead-onlyIdempotent
Batch player lookup by a list of ids (hydrates lineups/squads).
Returns: [{id, name, firstName, lastName}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Player id(s) (e.g. [200785, 223094]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds that auth is not needed, which is useful, and shows the exact return shape. But it doesn't disclose behavior like whether missing IDs are silently ignored, error handling, or rate limits. Given annotations cover the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with a return format and auth note. Every line earns its place. The 'Returns:' line is front-loaded with the most critical information, followed by the simple auth disclaimer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a simple lookup tool with one parameter, no output schema, and strong annotations (readOnly, idempotent), the description covers the core semantics well. It could mention what happens with invalid/unknown IDs or the max batch size, but for a simple read-only batch lookup, the description is near-complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage: the only param 'id' is described as 'Player id(s)' with an example '[200785, 223094]'. The description adds context that this is a batch lookup and the expected return format. The schema is already quite clear, so the description adds marginal but useful value above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Batch player lookup by a list of ids' with the specific use case 'hydrates lineups/squads', which distinguishes it from single-player lookups like pl_player or pl_player_basic. The return format is explicitly shown as a top-level array of objects with id, name, firstName, lastName.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need to look up multiple players by IDs at once, especially to hydrate lineups/squads. However, it doesn't explicitly state when NOT to use it or mention alternatives like the single-player lookup tools (pl_player, pl_player_basic) for individual lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_player_season_statsBRead-onlyIdempotent
A player's stats for one season.
Returns: {player, stats:{…season Opta metrics}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| pid | Yes | Player id. Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, establishing the safety and openness of the operation. The description adds 'Auth: none needed' and a return shape, which are useful context, but it does not elaborate on what 'Opta metrics' includes or potential edge cases. This is modest additional value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-line purpose, a return type summary, and an auth note. Every sentence serves a distinct purpose, and the most important information (what the tool returns) is front-loaded. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with all parameters documented in the schema and safety declared through annotations, the description is nearly complete: it states the purpose, the return shape, and auth requirements. It falls slightly short by not providing any usage guidance or caveats about data availability, but given the tool's simplicity, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with each parameter clearly explained (e.g., 'Competition id (8)', 'Player id', 'Season id'). The description adds no additional parameter-specific semantics, so it does not improve on the baseline established by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource: 'A player's stats for one season.' This identifies the scope (single season) and the subject (player), which distinguishes it from broader player tools. However, it lacks an explicit verb like 'get' or 'retrieve', and does not reference sibling tools, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description does not mention any exclusions, prerequisites, or comparison to related tools like pl_player_comp_stats or pl_player_info. The agent is left to infer usefulness from the name and brief description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_season_teamsARead-onlyIdempotent
The teams in a given season (the 20 in that season's table).
Returns: {pagination, data:[{id, name, shortName, abbr, stadium}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| limit | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the baseline safety is clear. The description adds value by explicitly stating 'Auth: none needed' and detailing the return format ({pagination, data:[...]}) and the scoping to the season's table, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a return-type line and an auth note. Every phrase is purposeful, with no filler or redundant information, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description includes the return structure and auth requirement. It does not elaborate on pagination fields, but no output schema exists, so the provided return format is sufficient for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all three parameters (cid, sid, limit) described in the input schema. The description does not add meaningful parameter semantics beyond hinting at the default 20 teams, so it meets but does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns teams for a given season, scoped to 'the 20 in that season's table.' It distinguishes from generic team tools like pl_teams (all teams) and pl_team (single team) by specifying the season context, though it lacks an explicit action verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as pl_standings or pl_teams_by_id. It implies the need for cid and sid but does not state when this is the preferred choice or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_squadARead-onlyIdempotent
Full squad for a team in a season — players[] with name, shirtNum, position, height/weight, dates, country.
Returns: {id, team, players:[{id, name, shirtNum, position, height, weight, country, dates}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| tid | Yes | Team id (e.g. 14 = Liverpool). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context like 'Auth: none needed' and the exact return shape, but it does not discuss pagination, data completeness, or error behavior, which would add more value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. There is minor redundancy between the first sentence listing player fields and the Returns block repeating those fields, but overall it is compact and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a clear return structure including the players array and its fields, plus auth information. For a simple read-only look-up with three well-documented parameters, this is sufficiently complete, though it could clarify semantics of 'dates' and 'team'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for cid, sid, and tid, so the baseline is 3. The tool description adds no parameter-specific 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a full squad for a team in a season, listing the player fields included. It differentiates from siblings like pl_teams or pl_team by focusing specifically on the squad/roster with detailed player attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as pl_players or pl_team. The description implies usage from the purpose but does not state when to prefer it over other squad/player tools or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_standingsARead-onlyIdempotent
The league table for a season. Each entry has overall/home/away blocks (position, played, won, drawn, lost, GF, GA, points). live=true folds in in-progress matches.
Returns: {matchweek, season, competition, live, deductions, tables:[{entries:[{team, overall:{position, played, won, drawn, lost, goalsFor, goalsAgainst, points}, home, away}]}]}
Example: 2025/26 Premier League table {"cid": 8, "sid": 2025, "live": false}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| live | No | Fold in in-progress matches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides the full response return shape, explains the effect of live=true (folding in in-progress matches), and notes that no authentication is needed. These details complement the readOnlyHint and idempotentHint annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short definition, a returns block, an example, and an auth note. It is somewhat lengthy but each section earns its place, and the code blocks make it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only standings tool, the description is quite complete: it specifies the output schema, live behavior, auth requirements, and a concrete example. A minor gap is not pointing to how to discover valid cid/sid values (e.g., via pl_competitions), but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters with 100% description coverage. The description adds concrete context by mapping cid=8 to the Premier League and sid=2025 to the 2025/26 season, going beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the league table for a season and specifies the entry structure, making the tool's purpose unambiguous. It does not explicitly differentiate from other standings tools, but the pl_ prefix and example (cid=8, sid=2025) convey Premier League context effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the example and the live parameter explanation, indicating when to fetch live standings. However, it lacks explicit guidance on when to use this tool over alternatives like pl_competitions or other sports' standings tools, nor does it state 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.
pl_structureARead-onlyIdempotent
Season structure — current phase + phase/matchweek layout for one season.
Returns: {currentPhase, structure}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (the starting year; 2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only, open-world, and idempotent behavior, so the safety profile is already established. The description adds the return shape and an auth note, which is useful, but it does not disclose additional behavioral traits like pagination, error handling, or data freshness. Thus, the description provides some but not rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, front-loaded sentences: a clear purpose line, a return shape line, and an auth line. Every sentence contributes useful information without repetition or fluff, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-documented parameters and supporting annotations, the description covers the core aspects: what it returns, the expected structure, and auth requirements. It is complete enough for an agent to invoke it correctly, though a bit more context about the structure fields would elevate it further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents both parameters fully, with descriptions for cid ('Competition id (8)') and sid ('Season id (the starting year; 2025 = 2025/26)'), achieving 100% coverage. The description adds no param-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (season structure) and its scope (current phase + phase/matchweek layout for one season). The 'Returns' line signals a retrieval operation, and the tool is distinguishable from siblings like pl_current_gameweek or pl_matches by focusing on the overall structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for retrieving a season's structure. It specifies the return object and the absence of auth, but it does not explicitly mention alternatives or when not to use it. However, the use case is well implied, so it earns a 4 rather than 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_teamARead-onlyIdempotent
One team within a competition by id.
Returns: {name, shortName, abbreviation, player_id}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| tid | Yes | Team id (Liverpool 14, Man City 43, Arsenal 3). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/open/idempotent, and the description supplements with return field names and an authentication note ('Auth: none needed'). No side effects or edge cases are disclosed, but for a simple read operation this adds sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact 3-line block: purpose, return fields, and auth. Every line is informative and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read-only getter, the description provides purpose, return shape, and auth. It lacks explicit differentiation from pl_teams_by_id and does not describe the shape of player_id (e.g., whether it's an array), but overall covers essential invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions and examples (cid, tid, including team ID examples). The description adds no additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'One team within a competition by id' and lists returned fields, clearly indicating a read operation for a single team. It distinguishes from plural listing tools like pl_teams, but doesn't explicitly differentiate from sibling pl_teams_by_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternatives are mentioned. The phrase 'within a competition' implies the need for both cid and tid, but no exclusions or comparisons with similar team retrieval tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_team_formARead-onlyIdempotent
One team's recent matches/form within a season.
Returns: [{kickoff, homeTeam, awayTeam, competition, ground, clock, attendance}] (top-level array of matches)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| tid | Yes | Team id. Required — part of the URL path. | |
| seasons | No | Season filter (usually = sid). | |
| competitions | No | Competition filter (usually = cid). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, covering safety and mutability. The description adds 'Auth: none needed' and a return shape, which are useful beyond the annotations. It does not disclose potential response size limits or edge cases, but given the strong annotation coverage, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two lines of summary plus a return type and auth note. It is front-loaded with the primary purpose and includes only essential supplementary details, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema descriptions and safety annotations, the description provides sufficient context. It omits a precise definition of 'recent' or how many matches are returned, but the tool is low complexity and the output structure is clarified, making it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter descriptions, including values like 'Competition id (8)' and 'Season id (2025 = 2025/26)'. The description adds no parameter-specific details beyond the schema, so it does not enhance understanding; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool returns one team's recent matches/form within a season, listing the exact output fields. It distinguishes from most siblings by specifying 'within a season' and the return structure, but does not explicitly contrast with the similarly named pl_teamform, leaving slight ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No information on when to use this tool vs alternatives. Siblings like pl_teamform or pl_team_stats are not mentioned, and there is no guidance on selecting this over them. The only implicit hint is 'recent matches/form,' but it lacks explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_teamformARead-onlyIdempotent
Every team's form for the season in one call (the table's form guide) — recent results + next fixture per team.
Returns: [{id, name, shortName, abbr, form, next}] (top-level array, one per team)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the tool is established as a safe read operation. The description adds valuable context beyond annotations by documenting the return shape ([{id, name, shortName, abbr, form, next}]), clarifying it's a top-level array, and noting 'Auth: none needed.' The field names in the return type are briefly explained by the natural language ('recent results + next fixture per team'), though field semantics like form's format aren't detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-structured: a single value-proposition sentence, then a brief structured return block, then an auth note. Every line earns its place. The parenthetical '(the table's form guide)' is slightly redundant with the first clause but harmless. Could be marginally tightened, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 required params, no output schema, and no nested objects, the description covers the key bases: batch scope, return shape, top-level array structure, and auth requirements. It maps 'form' and 'next' in the return to natural language meanings. Minor gaps exist (e.g., no mention of ordering or form field format), but with annotations covering the read-only safety profile, this is adequate for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the schema already documents both cid ('Competition id (8)') and sid ('Season id (2025 = 2025/26)') with required status and URL path context. The description itself adds no parameter-level information, but the baseline is 3 when the schema fully covers parameters. No value added beyond the schema, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (returns a batch of all teams' form) and resource (season form guide: recent results + next fixture). 'Every team's form for the season in one call' establishes the all-in-one-batch scope, which differentiates it from sibling pl_team_form (which implies a single team). Slight deduction because it doesn't explicitly name the contrast with that sibling, but the singular/plural distinction is strongly implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool ('every team's form... in one call' signals a batch/table-view use case) but never explicitly states when to avoid it or names alternatives like pl_team_form or pl_standings. It successfully conveys 'all teams at once' vs alternatives, yet the guidance is implied rather than stated. Context could be clearer for an agent deciding between this and the many sibling PL tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_team_leaderboardARead-onlyIdempotent
Team stat leaderboard — sort by any Opta team metric. NOTE: season is a query param here, not a path segment. Each row: {teamMetadata, stats}.
Returns: {pagination, data:[{teamMetadata:{id, name}, stats:{…team Opta metrics}}]}
Example: 2025/26 teams by tackles won {"cid": 8, "season": 2025, "sort": "tackles_won:desc", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sort | No | Sort metric:dir (e.g. tackles_won:desc, blocks:desc, possessionPercentage:desc). | wins:desc |
| limit | No | Page size. | |
| season | Yes | Season id (2025 = 2025/26) — a query param, not a path segment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, so the tool is known to be safe and idempotent. The description adds valuable context by stating 'Auth: none needed', clarifying that 'season is a query param here, not a path segment', and showing the return shape. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise opening, a note, return shape, an example, and authentication info. It is somewhat verbose but every section adds value, and the information is front-loaded. The example and return shape are useful, though the row description is redundant with the return format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the absence of an output schema, the description kindly provides the return structure and a concrete example. It also covers authentication and the API quirk about the season parameter. This is sufficiently complete for an agent to invoke the tool correctly, though pagination details are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, meaning each parameter is already well-documented (e.g., cid is 'Competition id (8)', sort is 'Sort metric:dir', limit default is 20). The description does not significantly add to this beyond the concrete example, which reinforces but does not expand the semantics. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Team stat leaderboard — sort by any Opta team metric', which is a specific verb+resource+scope. It distinguishes from sibling tools like pl_standings and pl_player_leaderboard by focusing on team metrics and sorting, and the example with '2025/26 teams by tackles won' further clarifies the exact use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to retrieve a sortable team stat leaderboard based on Opta metrics. It provides a concrete example and notes the season as a query parameter, which gives clear context. However, it does not explicitly mention alternative tools or when not to use it, though the purpose is distinctive enough among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_team_next_fixtureARead-onlyIdempotent
A team's next scheduled fixture. Returns 404 when none is scheduled (e.g. off-season).
Returns: {kickoff, homeTeam, awayTeam, ground, competition} (404 when no fixture scheduled)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| sid | Yes | Season id (2025 = 2025/26). Required — part of the URL path. | |
| tid | Yes | Team id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the 404 error behavior for off-season, the exact return fields, and that no authentication is needed. These are valuable behavioral traits not covered by annotations and improve the agent's ability to handle responses correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a one-sentence purpose, a return shape line, and an auth note. Every sentence adds value with no redundancy, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fixture lookup with three clear parameters and no output schema, the description covers the purpose, the 404 edge case, the response shape, and auth requirements. It is complete enough for an agent to understand what the tool returns and how to handle errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three required parameters with descriptions and notes they are path parameters (100% schema description coverage). The description does not add parameter-specific details beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 next scheduled fixture, which is a specific verb+resource combination. This distinguishes it from siblings like pl_matches (all fixtures) and pl_match (a specific match), especially with the 404 note for no scheduled fixture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it returns the next scheduled fixture for a team, with a 404 when none is scheduled (e.g., off-season). It doesn't explicitly name alternative tools, but the context is sufficient to infer when to use it. No exclusions or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_teamsARead-onlyIdempotent
All teams that have played the competition, each with seasons[], stadium, name, shortName, abbr, id. Paginated.
Returns: {pagination, data:[{id, name, shortName, abbr, stadium, seasons}]}
Example: All Premier League teams {"cid": 8}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| limit | No | Page size. | |
| next_cursor | No | Pagination cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the read-only nature is known. The description adds useful behavioral context: pagination, the exact return shape, and that no auth is needed. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first line defines the resource and its contents, followed by a concise return-type sketch, a concrete example, and a clear auth note. Every sentence carries useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple list operation, the description is complete enough: it specifies pagination, return fields, auth requirements, and a practical example. The absence of an output schema is mitigated by the inline return shape, and the input schema fully documents limit and next_cursor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by giving a concrete example ({"cid": 8}) that maps to Premier League and by stating the return payload structure, which helps disambiguate how cid is used. This lifts it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all teams that have played a competition, with specific fields listed ('seasons[], stadium, name, shortName, abbr, id'). It is unambiguous as a list operation and the example ties it to Premier League teams via cid. However, it does not explicitly differentiate itself from sibling tools like pl_team, pl_season_teams, or pl_teams_by_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this to fetch all teams for a given competition, demonstrated with the Premier League example (cid: 8). It does not state exclusions or explicitly mention alternative tools, but the 'all teams' framing makes the intended use reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_teams_by_idARead-onlyIdempotent
Batch team lookup by a list of ids.
Returns: [{id, name, shortName, abbr, stadium}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Team id(s) (e.g. [14, 43]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the description aligns with these by calling it a 'lookup.' It adds useful behavior beyond annotations by specifying the exact return shape ([{id, name, shortName, abbr, stadium}]) and stating 'Auth: none needed.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded: a one-line purpose, a return structure line, and an auth line. There is no redundant or filler text; every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter batch lookup with high schema coverage and informative annotations. The description covers purpose, return format, and auth requirements, so it is sufficiently complete for an agent to invoke correctly without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the id parameter as an array of team ids with an example ([14, 43]), yielding 100% schema coverage. The description itself adds no extra parameter details, but given the high schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Batch team lookup by a list of ids,' which clearly identifies a batch read operation on teams. It distinguishes itself from sibling single-team tools like pl_team by explicitly noting the batch/list nature, and the return field list adds concreteness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Batch' implies the tool is for looking up multiple teams at once, but there is no explicit mention of when not to use it or alternatives (e.g., pl_team for a single team). The usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_team_statsARead-onlyIdempotent
Team aggregate stats (all-time in the competition) — ~130 Opta metrics.
Returns: {team, stats:{…Opta team metrics: goals, possessionPercentage, passingAccuracy, totalShots, …}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Competition id (8). Required — part of the URL path. | |
| tid | Yes | Team id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. The description adds valuable context: the all-time scope, the count of metrics (~130), the return structure with example keys, and the auth requirement. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: one line for the main purpose, one for return format, and one for auth. Every sentence earns its place without redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a return structure example, the approximate number of metrics, and the all-time scope. It also covers authentication. The lack of a full metric list is acceptable for tool selection purposes, making the description sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both cid and tid have descriptive entries. The description does not add any parameter-specific information beyond what is already in the schema, such as noting they are required and part of the URL path. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns team aggregate stats with all-time competition scope and ~130 Opta metrics. It provides a concrete return example, making the purpose unambiguous. This distinguishes it from sibling tools like pl_team_form or pl_team_leaderboard by specifying 'aggregate stats' and 'all-time'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving historical team statistics but does not explicitly contrast with alternatives such as pl_team_form or pl_standings. It states that no authentication is needed and that both parameters are required, but lacks explicit when-to-use or when-not-to-use guidance relative to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_video_latestARead-onlyIdempotent
Latest video, smart-ranked.
Returns: [{title, canonicalUrl, date, duration, …}] (top-level array)
Example: Latest video {"limit": 5}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tag filter (e.g. content-type:video). | |
| limit | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the description adds value by stating 'Auth: none needed' and showing the return format. However, 'smart-ranked' is never explained, and there is no detail on how tags filter results or pagination behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: purpose, return shape, example, and auth note all in four short lines. Every sentence earns its place and the structure is scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description provides enough context with return format, example, and auth. It lacks a definition of 'smart-ranked' and does not specify whether multiple videos are always returned, but overall it is sufficient given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions (100% coverage), so the baseline is 3. The description's example demonstrates limit usage but does not clarify tags semantics or ranking impact beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('Latest video') and adds 'smart-ranked' to indicate a specific ordering, distinguishing it from siblings like pl_video_popular and pl_news_latest. The verb is implied but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives such as pl_video_popular or other video tools. It provides an example and auth note but relies on the agent to infer usage from the name and 'latest' keyword.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pl_video_popularARead-onlyIdempotent
Popular video over the last recency hours.
Returns: [{title, canonicalUrl, date}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| recency | No | Lookback window in hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the return shape (array of {title, canonicalUrl, date}) and explicitly states no authentication is needed, both of which are behavioral details not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of only the summary, the return format, and an auth note. Each segment provides distinct value with no redundancy or filler, making it well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters, the annotations cover read-only/idempotent behavior, the schema documents the parameters, and the description provides the return format and auth requirement. However, it does not elaborate on the ordering or the precise meaning of 'popular', nor explicitly state that an array is returned (though the return format implies it). Overall, it is nearly complete for a filtered list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (limit as page size, recency as lookback window), achieving 100% coverage. The description reinforces recency by referencing it in the summary, but adds minimal additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Popular video over the last `recency` hours' and provides the return format, making it clear the tool returns popular videos within a time window. However, it lacks an explicit verb like 'list' or 'get', and while it is distinguishable from sibling tools like pl_video_latest by name, the description does not explicitly contrast it with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives such as pl_video_latest or pl_news_popular. The only contextual hint is the recency window, which implies a use case for recent popular videos, but there are no exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_competition_eventsARead-onlyIdempotent
Featured events for one competition (paged) with their insight/featured markets.
Returns: {key, name, nextPage, events:[{key, name, insightMarkets:[], featuredMarkets:[]}]}
Example: AFL competition events, first page {"competitionKey": 7523, "page": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page; follow nextPage in the response. | |
| competitionKey | Yes | Competition key (e.g. 7523 = AFL), from pointsbet_sport_competitions. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value beyond annotations by disclosing the exact return shape ({key, name, nextPage, events:[...]}), the nextPage-based pagination behavior, and that no auth is needed—none of which appear in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a single line, followed by a compact return-shape line, a minimal JSON example, and a one-line auth note. There is no filler or redundancy—every element earns its place and the structure is highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description carries the burden of return-value disclosure and does so with a concrete structure, pagination semantics, and a worked example. Combined with rich annotations, full parameter documentation in the schema, and auth disclosure, the tool is fully specified for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well documented: page is described as '1-based page; follow nextPage in the response' and competitionKey includes an example and its source from pointsbet_sport_competitions. The description's example JSON reinforces usage but adds little meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'Featured events for one competition (paged) with their insight/featured markets' uses a specific verb/resource pairing and clearly scopes to a single competition, distinguishing it from sport-level siblings like pointsbet_sport_featured_events. The mention of paging and the specific market types adds further precision beyond a generic listing statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example ('AFL competition events, first page' with competitionKey 7523) and the schema note that competitionKey comes 'from pointsbet_sport_competitions' give clear contextual guidance on when and how to invoke the tool. However, no explicit alternatives or when-not-to-use exclusions are stated, so differentiation from pointsbet_sport_featured_events remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_content_callARead-onlyIdempotent
Fetch one of PointsBet's static CMS / navigation JSON assets from pointsbet.com.au by operation name (no params). These drive the site's menus, tiles, logo mappings, build manifest and maintenance banner. Read pointsbet://content/operations for the operation list.
Returns: (JSON object)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description adds useful behavioral context: no auth needed, returns a JSON object, and guessing an operation name returns an error listing alternatives. It also explains what the assets drive (menus, tiles, etc.). No contradictions with annotations, though the '(no params)' phrase is internally inconsistent with the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with clear sections for returns and auth. The misleading '(no params)' phrase is extraneous and slightly confusing, but overall the text is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description at least states the return type (JSON object) and points to the operation catalogue for further context. It does not detail the JSON structure, but for a generic static-content fetcher this is acceptable. The auth requirement and asset purpose round out the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter well described. The description adds marginal value by pointing to the catalogue resource for valid operation names, but it does not significantly extend beyond the schema's already detailed parameter explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches PointsBet's static CMS/navigation JSON assets by operation name, distinguishing it from sibling tools that retrieve live sports data. However, the parenthetical '(no params)' is misleading because the schema accepts optional path_params and query_params, which slightly muddies the stated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates the tool is for static content/navigation assets rather than dynamic data, and directs the user to read pointsbet://content/operations for the operation list. It does not explicitly name alternatives or state when not to use it, but the scope is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_eventARead-onlyIdempotent
Full event detail: all fixed-odds markets + selections + prices, SGM, team stats, insights.
Returns: {key, name, competitionName, startsAt, sgmStatus, fixedOddsMarkets:[{key, name, eventClass, enableCorrelatedMulti, outcomes:[{key, name, price, isOpenForBetting}]}], sgmCollisionGroups:[], prePricedSgm:{}, homeTeamStats:{}} — 82 markets and ~4MB on a verified AFL fixture, so ask for the markets you need rather than the whole event where you can.
THIS IS WHERE SGM LEG IDS COME FROM: fixedOddsMarkets[].key is the MarketKey and its own outcomes[].key is the OutcomeKey that pointsbet_sgm_price wants. Outcome keys repeat across markets, so only the pair identifies a leg. sgmStatus: "Available" says the event sells same game multis at all; enableCorrelatedMulti on a market does NOT say the market is eligible (it was true on all 82 while the pricer still refused First Goalscorer), and sgmCollisionGroups lists the families that overwrite one another.
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventKey | Yes | Numeric event key (e.g. 2754627), from any events feed. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, openWorld, idempotent), the description discloses critical behaviors: the misleading nature of enableCorrelatedMulti, the significance of sgmCollisionGroups for overwriting families, the semantic of sgmStatus, and the repetition of outcome keys. It also provides an output sample and size estimate, giving agents a clear behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every section carries value: purpose, output sample, size warning, SGM ID explanation, and auth. It is well-organized with a clear hierarchy, though the caps-lock emphasis could be softened. The length is justified for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is remarkably complete: it explains return structure, SGM leg identification, collision groups, eligibility traps, and performance concerns. The single parameter is well-documented, and the description provides sufficient context for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, eventKey, is fully described in the schema with type, example, and provenance. The description adds no additional parameter guidance, but schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full event detail: all fixed-odds markets + selections + prices, SGM, team stats, insights.' This specifies the resource (event) and the comprehensive contents, distinguishing it from event search or SGM pricing tools. The verb 'returns' is implied, and the scope is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description warns about the large payload ('82 markets and ~4MB') and advises asking for only needed markets, implicitly discouraging full retrieval when unnecessary. It explicitly directs users to this tool as the source of SGM leg IDs for pointsbet_sgm_price. However, it does not name alternative tools for partial market retrieval, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_event_searchARead-onlyIdempotent
Search sport events by class / competition, optionally with historic head-to-head stats.
Returns: {events:[{key, name, competitionKey, startsAt, homeTeam, awayTeam}]}
Example: AFL events with historic stats {"competitionKey": 7523, "numberOfSportEvents": 50, "includeHistoricStats": true}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventClassIds | No | Comma-separated event-class ids to include. | |
| competitionKey | No | Restrict to one competition key. | |
| numberOfSportEvents | No | Max events to return. | |
| includeHistoricStats | No | Inline historic head-to-head stats per event. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description only adds 'Auth: none needed' and the return format. These are useful but limited; it does not disclose pagination behavior, result limits, or error handling. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main action. It includes only essential extras: return format, a concrete example, and auth note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 4 optional parameters, the description covers the main purpose, includes a return example, and specifies auth. It lacks an example using eventClassIds and doesn't address edge cases like empty results, but the schema and example provide enough context for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's example (competitionKey 7523, numberOfSportEvents 50, includeHistoricStats true) adds concrete usage context, clarifying how parameters combine and emphasizing the 'class / competition' filtering concept beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search sport events by class / competition, optionally with historic head-to-head stats' with a specific verb and resource. It distinguishes itself from sibling PointsBet event tools like pointsbet_event and pointsbet_competition_events by emphasizing search across classes/competitions and optional historic stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool—searching sport events by class/competition, especially when historic stats are desired, as shown in the AFL example. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_events_nextupARead-onlyIdempotent
Next-up sport events across all codes, ordered by start time (homepage feed).
Returns: {events:[{key, name, sportKey, competitionName, startsAt, homeTeam, awayTeam, isLive}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| v2Limit | No | Max events to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds useful behavioral details beyond annotations: 'Auth: none needed' and 'ordered by start time', plus the exact return structure. This enriches the agent's understanding without contradicting any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is remarkably concise: two short sentences that front-load the core purpose, then provide return structure and auth info. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers all essential aspects: the scope (all codes), ordering, return fields, and authentication. It is complete enough for an agent to invoke and interpret the response correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, v2Limit, is fully documented in the input schema ('Max events to return.'), giving 100% schema coverage. The description does not add extra parameter context, so it meets the baseline but does not enhance it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Next-up sport events across all codes, ordered by start time (homepage feed).' This clearly differentiates it from sibling tools like pointsbet_event_search or pointsbet_sport_featured_events by emphasizing the cross-code, time-ordered homepage feed context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'homepage feed' phrase provides clear context for when to use this tool versus more specific alternatives, but it does not explicitly name alternatives or state exclusions. This is clear context without full when/when-not guidance, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_inplay_streamingARead-onlyIdempotent
In-play events that carry a live video stream, grouped by sport.
Returns: {sports:[{key, name, events:[{key, name, visionData:[]}]}], numberOfInPlayEvents}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint true, and the description complements these by adding that no auth is needed and by detailing the exact return format. It also notes the data is grouped by sport. This provides useful behavioral context beyond the annotations, though it does not mention rate limits or other edge behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one purpose sentence, a return structure, and an auth note. Every element is necessary and clearly formatted. It avoids verbosity and repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description provides enough information: the purpose and the return structure. It could have explained what 'visionData' contains (e.g., the actual stream URLs) but this is a minor gap. The description is otherwise complete for an agent to understand and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document. The description correctly omits parameter details, and the schema has full coverage (100%). The baseline for zero parameters is 4, and the description does not need to add anything else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns in-play events with live video streams, grouped by sport, which is specific and distinguishes it from sibling tools like pointsbet_sports_inplay (which likely lists all in-play events without the video requirement). The return structure is also explicitly detailed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: if you need in-play events that have live video streams, this is the tool. However, it does not explicitly name alternatives or state when not to use it. The context signals show many sibling tools, but no direct comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_preprice_multisARead-onlyIdempotent
Pre-priced "5 for $25" multi suggestions (one pre-built multi per featured event).
Returns: [{key, name, competitionName, startsAt, homeTeam, awayTeam, ...preBuilt legs}]
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by specifying the return structure and explicitly stating that no authentication is needed. It also notes the constraint of one pre-built multi per event, which clarifies expected output size. The annotations already cover read-only, idempotent, and open-world hints, so the bar is lower; this description meets it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with only three short segments: purpose, return format, and auth. Every line adds value, and the most critical information (what it does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with good annotations, the description is largely complete. It covers purpose, return shape, and auth. However, it omits details about the structure of the 'preBuilt legs' and does not clarify the meaning of '5 for $25', leaving minor ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters, and the input schema is empty. According to the baseline for 0-param tools, a score of 4 is appropriate; the description further confirms no parameters are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing pre-priced '5 for $25' multi suggestions, with a specific scope of one pre-built multi per featured event. The 'Returns' line details the output structure, making the purpose unambiguous and distinct from other PointsBet tools such as racecards or in-play events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description mentions featured events but does not state selection criteria, intended use cases, or when to call other PointsBet tools like pointsbet_event or pointsbet_sport_featured_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_promo_codeARead-onlyIdempotent
Sign-up splash content (info text + hero image) for a named promo code.
Returns: {info, image}
Example: Welcome promo splash {"code": "WELCOME"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Promo code, e.g. "WELCOME". Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds value by revealing the return shape ({info, image}) and explicitly stating 'Auth: none needed,' which are behavioral details not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one purpose sentence, a return type line, an example block, and an auth note. Every line serves a distinct purpose with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, it includes the input example, return type, and auth requirement. This is sufficient for an agent to select and invoke the tool correctly without needing additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already provides an example ('WELCOME') and states the parameter is part of the URL path. The tool description merely repeats the same example in its own format, adding no new semantic information. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Sign-up splash content (info text + hero image) for a named promo code.' It identifies the resource (named promo code) and distinguishes this tool from siblings like pointsbet_promotions or pointsbet_content_call by scoping it to sign-up splash content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for a named promo code, and the example shows a direct invocation. It does not explicitly mention when not to use it or name alternatives, so it is a clear context without exclusions rather than full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_promotionsARead-onlyIdempotent
Live promotions for a display surface (carousel, etc.) from the promotions service.
Returns: [{id, type, title, description, ...}]
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code. | en |
| displayTarget | No | Where the promo renders, e.g. "carousel". | carousel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds that no auth is needed and provides a sample return shape, which is useful but not extensive. It doesn't contradict annotations and adds modest value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise lines cover purpose, return format, and auth requirement. No wasted words, and each sentence carries distinct information. The trailing '...' and 'etc.' are minor but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional params, the description covers the core aspects: what it returns, where it's used, a sample return structure, and auth requirements. Without an output schema, the return hint helps, and the annotations fill in safety guarantees. Slight lack of detail on pagination or filtering, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions, giving 100% schema description coverage. The tool description does not add any extra parameter-level context, so it relies fully on the schema, which meets the baseline but adds no bonus value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'Live promotions for a display surface (carousel, etc.)', identifying both the resource (promotions) and the specific use case. It doesn't explicitly differentiate from siblings like pointsbet_promo_code, but the display-surface scope provides a distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a display surface' implies usage context (e.g., carousels), but there is no explicit comparison or exclusion of alternatives like pointsbet_promo_code or sportsbet_popular_promotions. It has implied context but no direct guidance on when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_featuredARead-onlyIdempotent
Featured races across codes with a preview of their top runners.
Returns: [{raceId, racingType, name, venue, number, advertisedStartTimeUtc, runners:[]}]
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceCount | No | Number of featured races to return. | |
| runnerCount | No | Top runners to preview per race. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare read-only/idempotent behavior, the description adds that no authentication is needed and specifies the return structure, which provides useful operational context. No contradictions detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using three short sections for purpose, return shape, and auth requirement. Every sentence adds value and the structure is clear with labeled return and auth fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description is fairly complete, including an inline return schema and auth status. However, it does not clarify what 'codes' means or what criteria define 'featured,' which could cause slight ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both raceCount and runnerCount fully documented in the input schema. The tool description does not add any additional parameter semantics, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns featured races with top runner previews, providing a specific resource and scope. The word 'featured' distinguishes it from general race-listing tools like pointsbet_racing_races, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus other racing tools. It lacks any exclusions, prerequisites, or alternative recommendations, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_formARead-onlyIdempotent
Detailed form guide for one race: tips, predicted order and per-runner history.
Returns: {RaceId, RaceNumber, RaceName, RacePreview:{PredictedOrder:[]}, RaceTips:[{Comment}]}
Example: Form for Sandown race 1 {"country": "aus", "venue": "sandown", "meetingNumber": 1, "date": "-am", "raceNumber": "01"}
Auth: none needed.
Also answers this: betr_race_form, tab_racing_race_form.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date + session token, "YYYY-MM-DD-am" or "-pm" (e.g. 2026-06-03-am). Required — part of the URL path. | |
| venue | Yes | Venue slug, e.g. "sandown". Required — part of the URL path. | |
| country | Yes | Country slug, e.g. "aus". Required — part of the URL path. | |
| raceNumber | Yes | Zero-padded race number, e.g. "01". Required — part of the URL path. | |
| meetingNumber | Yes | Meeting sequence number for that venue/day (usually 1). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful context: it states the return structure, that no auth is needed, and that it also fulfills two sibling tools. These are behavioral details not present in annotations, enhancing transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured: it leads with purpose, then return format, example, auth, and alternative tools. Each line earns its place. The example and alternative note are valuable, though slightly longer than strictly necessary, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 required parameters and no output schema, the description includes a return skeleton and an example, which helps an agent form correct calls. It also notes auth and alternative tools. It doesn't cover edge cases like invalid race numbers or date formats beyond the example, but it is largely complete for a read-only tool with annotations covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described as 'Required — part of the URL path.' The description goes beyond by providing a concrete example (e.g., date format '<today>-am', meetingNumber as integer, raceNumber zero-padded), clarifying the expected format and usage. This adds meaning beyond the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'a detailed form guide for one race: tips, predicted order and per-runner history.' It names a specific resource (form guide) and the scope (one race). It also distinguishes itself from siblings by explicitly noting it 'also answers' betr_race_form and tab_racing_race_form, so an agent can tell it apart from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it also answers betr_race_form and tab_racing_race_form, but does not provide explicit when-to-use vs. alternatives or exclusions. It doesn't say 'use this when you need form for a specific race across these brands' or differentiate from other pointsbet_racing_* tools. Guidance is vague and left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_futuresARead-onlyIdempotent
Racing futures markets (Cup/Carnival outrights and other long-running racing markets).
Returns: {events:[{key, name, competitionName, startsAt}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by specifying 'Auth: none needed' and the exact return format ({events:[{key, name, competitionName, startsAt}]}), which is beyond the annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very brief and front-loaded: main purpose first, then return shape, then auth requirement. Every line is informative with no filler, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only tool with strong annotations, the description covers purpose, output, and auth. It could slightly improve by explicitly stating that it lists all available futures markets, but the current wording is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics; the empty input schema is self-explanatory. The description's focus on output structure is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Racing futures markets' with specific examples (Cup/Carnival outrights) and details the return structure. It distinguishes from sibling tools like pointsbet_racing_race by focusing on long-running markets, but lacks an explicit verb, making it slightly less actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for racing futures markets but provides no explicit when-to-use guidance or alternatives. It does not contrast with sibling tools such as pointsbet_racing_meetings or sportsbet_racing_futures, leaving the agent to infer context from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_hourly_quaddieARead-onlyIdempotent
Hourly Quaddie schedule — the four-leg quaddie races grouped by hour.
Returns: [{date, hour, advertisedHourUtc, races:[{raceId, venue, number, advertisedStartTimeUtc}]}]
Auth: none needed.
Also answers this: tab_racing_jackpots.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotence. The description adds valuable behavioral context: it explicitly states 'Auth: none needed' and details the exact return structure including fields like date, hour, advertisedHourUtc, and races. This supplements the annotations without contradicting them, providing an agent with a clear picture of what the tool does beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it opens with a clear purpose statement, then immediately provides the return format and a note on authentication, and finally adds a cross-reference. It avoids redundancy, every sentence earns its place, and the most important information (what the tool is) is front-loaded. This is an exemplary model of efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters, the annotations cover safety, and the output schema is absent, the description provides all necessary context: the exact return structure, the authentication requirement, and even an additional linked capability (tab_racing_jackpots). An agent can determine whether to call this tool and what to expect without needing further details. The description is fully complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain beyond the schema. The rule sets a baseline of 4 for such cases, and the description adds no parameter info because none is needed. The description correctly focuses on the return data, which is sufficient given the parameterless nature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: an 'Hourly Quaddie schedule' with a specific focus on four-leg quaddie races grouped by hour. This is a specific verb+resource combination that distinguishes it from other racing tools, and the name itself reinforces the intent. No ambiguity remains about what data this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description does not enumerate when not to use it, it provides clear context that it's for hourly quaddie schedules and even cross-references tab_racing_jackpots, suggesting an additional use case. It lacks explicit exclusions or alternatives beyond the cross-reference, but the purpose is clear enough that an agent could infer its appropriate scope without confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_insightsARead-onlyIdempotent
Editorial form insights for one race (may be empty / 204 before they are published).
Returns: {raceId, insights:[{heading, body}]} (204 No Content when none yet)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceId | Yes | Race id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, openWorld, idempotent), the description discloses the 204 No Content behavior when insights are not yet published, the exact return shape, and that no authentication is needed. This adds meaningful behavioral context that annotations do not capture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using three short labeled sections. It front-loads the primary purpose and avoids any redundant information, making every sentence informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, no output schema), the description fully covers the essential use case, including response format and edge cases like 204. The annotations cover safety, so no additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter (raceId) with a clear description. The tool description adds no additional semantic detail for the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides editorial form insights for a single race, using a specific verb+resource structure. It distinguishes itself from siblings like pointsbet_racing_tips (tips) and pointsbet_racing_form (form data) by specifying 'editorial insights' and 'one race'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that content may be empty before publication, implying a timing consideration, but it does not explicitly state when to use this tool versus alternatives like pointsbet_racing_tips or pointsbet_racing_form. Usage context is implied but lacks explicit guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_meetingARead-onlyIdempotent
One race meeting by id: venue, conditions, and the full list of its races.
Returns: {meetingId, venue, racingType, meetingStartDateTimeUtc, races:[{raceId, raceNumber, name}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| meetingId | Yes | Meeting id (e.g. 2758032), from pointsbet_racing_meetings. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed' and specifies the exact return shape, which is critical since no output schema exists. It adds useful context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences cover purpose, return format, and auth. Every sentence provides distinct value with no redundancy. Front-loaded with the essential purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool, the description includes the return structure (compensating for missing output schema) and auth requirements. Annotations cover safety/idempotency. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already explains meetingId includes an example and source. The description does not add additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single race meeting by ID and lists what it returns (venue, conditions, races). The singular 'One race meeting by id' distinguishes it from the sibling pointsbet_racing_meetings (plural). Specific verb+resource+scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: use this when you have a meetingId and need its details/races. The 'by id' phrasing contrasts with the plural list tool, providing clear context. However, it does not explicitly name an alternative or state 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.
pointsbet_racing_meetingsARead-onlyIdempotent
All race meetings (every code) for a date window, each with its races.
Returns: [{groupLabel, meetings:[{meetingId, venue, racingType, races:[{raceId, raceNumber, advertisedStartTimeUtc}]}]}]
Example: All meetings for one day {"startDate": "T00:00:00.000Z", "endDate": "T23:59:59.000Z"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | Window end, ISO-8601 UTC. | |
| startDate | Yes | Window start, ISO-8601 UTC (e.g. 2026-06-04T00:00:00.000Z). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds value by showing the exact return structure, noting 'auth: none needed', and clarifying the scope ('every code'). It does not mention potential large response sizes or pagination, but the annotations lower the burden; the added details go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely efficient: two sentences, a return shape, a JSON example, and an auth note. It front-loads the core purpose and includes only necessary details. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description includes the full return structure, an example, and auth requirements. For a straightforward read-only listing tool with clear annotations, this is complete. It also distinguishes from siblings well enough for an agent to select it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear ISO-8601 descriptions for both parameters. The description reinforces this with a concrete example using startDate and endDate for a single day, demonstrating the expected format and usage. This adds practical clarity beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all race meetings (every code) for a date window, with nested races included. It distinguishes itself from sibling tools like 'pointsbet_racing_meeting' (singular) by emphasizing 'all' and the date-window scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context (date window) and an example for 'all meetings for one day', but does not explicitly mention when to prefer this over other racing tools like pointsbet_racing_meeting or pointsbet_racing_races. It implies broad coverage but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_raceARead-onlyIdempotent
Full racecard for one race: runners, prices, track/conditions, plus results + dividends once run.
Returns: {raceId, name, venue, number, trackCondition, runners:[{number, name, price}], results:{winners:[], straightDividends:[]}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceId | Yes | Race id (e.g. 109756102), from a meetings/featured feed. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints. The description adds that results and dividends are returned only after the race has run, and provides an explicit return structure, which is valuable conditional behavior context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two clear sentences plus a compact return example. It front-loads the purpose and provides a structured output shape without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description provides a clear return structure and conditional results behavior. It is adequate, though it does not elaborate on field meanings or error cases, which are not critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter raceId is fully described in the input schema, including its source and that it is a URL path parameter. The tool description adds no additional parameter-specific meaning, but schema coverage is 100%, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a full racecard for one race, including runners, prices, track/conditions, and results/dividends once run. This specific scope distinguishes it from sibling tools like meeting-level or race-list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies use when detailed racecard data for a specific race is needed, and explicitly mentions 'Auth: none needed.' However, it does not explicitly name alternative tools or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_racesARead-onlyIdempotent
Racecards for several races in one call (batch by race ids).
Returns: [{raceId, name, venue, number, runners:[{number, name, price}]}]
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| raceIds | Yes | Comma-separated race ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe read/idempotent behavior. The description adds value by specifying 'Auth: none needed' and providing the exact return structure, which helps set expectations. It does not mention error handling or ordering, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: a single purpose sentence, a returns block, and an auth note. Every sentence contributes useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one parameter and good annotations, the description covers the core aspects: purpose, return shape, and auth. However, the missing parameter format clarification and lack of explicit differentiation from the single-race sibling tool leave minor gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description does not clarify the 'raceIds' parameter format. The schema description says 'Comma-separated race ids' while the type is 'array', creating ambiguity. With 100% schema coverage, the baseline is 3, but the description fails to resolve the contradiction or add any meaningful parameter guidance, so it actually underperforms.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns racecards for multiple races in a single call, using 'batch by race ids'. This distinguishes it from the singular 'pointsbet_racing_race' sibling and conveys the specific resource and batching behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching multiple racecards at once, which is clear context. However, it does not explicitly name alternative tools (e.g., pointsbet_racing_race for a single race) or state when not to use this tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_srmARead-onlyIdempotent
Same Race Multi (SRM) market for one race (availability + legs/prices when open).
Returns: {marketType, displayName, isAvailable, availabilityTimeUtc, legs:[]}
Auth: none needed.
Also answers this: entain_graphql_call, sportsbet_racing_popular_srms.
| Name | Required | Description | Default |
|---|---|---|---|
| raceId | Yes | Race id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, and idempotent. The description adds valuable context: returns availability only when open ('availability + legs/prices when open'), shows the return fields, and notes 'Auth: none needed.' This goes beyond the annotations and adds operational detail 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, a return format line, an auth line, and an alternatives line. All sentences earn their place and critical information is front-loaded. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of an output schema, the description lists the return fields and explains the conditional availability. It covers auth, scope, and sibling relationships. For a simple one-parameter read-only tool, this is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the only parameter (raceId) with 'Race id. Required — part of the URL path.' The tool description does not add extra meaning for the parameter beyond implying it's tied to the specific race. Given 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Same Race Multi (SRM) market for one race (availability + legs/prices when open).' This uses a specific resource (SRM market) and scope (one race), and includes the return structure. It distinguishes itself from siblings like pointsbet_racing_races (multiple races) and sportsbet_racing_popular_srms by explicitly noting it's for a single race and mentioning it can answer for those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for one race and requires no auth. It also names alternative tools ('Also answers this: entain_graphql_call, sportsbet_racing_popular_srms'), which helps an agent consider substitution. However, it doesn't explicitly state when NOT to use it or direct to alternatives for multiple races, so it's not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_racing_tipsARead-onlyIdempotent
Tipster selections for a racing code + country for today, grouped by venue.
Returns: [{date, racingType, venue:{name, stateCode}, tips:[{tipster:{name}, links}]}]
Example: Australian thoroughbred tips for today {"racingType": "thoroughbred", "country": "aus"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | Country code slug, e.g. "aus". Required — part of the URL path. | |
| racingType | Yes | Racing code. One of: thoroughbred, harness, greyhound. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent behavior. The description adds the exact return envelope (date, racingType, venue, tips), the grouping by venue, the 'today' time limit, and an 'Auth: none needed' note. This goes beyond the annotations without contradicting them, though it does not cover error behavior or link semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a return shape block, an example call, and an auth note. Each element earns its place, and the information is front-loaded for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the full return structure and an example, which is essential. It also covers authentication and the temporal/grouping scope. Minor omissions like what the links contain or potential empty results exist, but for a simple read-only list tool, the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage: both 'racingType' (with enum) and 'country' are fully described. The description merely repeats these in prose and provides an example call, adding no new parameter-level meaning beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Tipster selections for a racing code + country for today, grouped by venue,' which clearly states the resource, scope, and grouping. The return shape and example further clarify it returns tipster, venue, and link data. This distinguishes it from sibling tools like pointsbet_racing_meetings or pointsbet_racing_race, which focus on meetings or race details rather than tipster picks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (today's tipster selections for a racing code and country) and provides a concrete example, but it does not explicitly state when to prefer this tool over alternatives or provide exclusions. There is no reference to sibling tools or a 'use this instead of X' statement, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it selections from one PointsBet event, get the correlation-adjusted combined price. Prices combinations PointsBet has not pre-built (for the ones it has, see pointsbet_preprice_multis).
Returns: {success: true, price: 3.6, message: null, invalidSelections: null} — VERIFIED live 2026-08-27 against AFL Western Bulldogs v Collingwood (event 2860313).
THE PRICE IS NOT THE PRODUCT OF THE LEGS, which is the entire reason to ask. Match Result Bulldogs (1.96) with Over 169.5 (1.90) returns 3.60, not 3.724. Combine that same 1.96 with Bulldogs +1.5 (1.90) and it returns 1.96 FLAT — the line leg is implied by the head-to-head, so it is worth nothing, against a naive 3.724. Never multiply PointsBet legs yourself; the error runs to tens of percent.
REDUNDANT LEGS ARE SILENTLY COLLAPSED AND NOTHING SAYS SO. The response has no leg echo at all: a three-leg request priced as two comes back looking identical to a genuine three-leg quote. Unlike TAB, which marks dropped legs redundant, PointsBet gives you no way to detect it from the response. So STATE THE LEGS YOU SENT whenever you report a price, and treat a price that equals the shorter combination's price as evidence a leg was absorbed. Exact duplicates are deduplicated the same silent way.
enableCorrelatedMulti ON THE MARKET IS NOT ELIGIBILITY. It was true on all 82 markets of the verified event, yet the pricer still refused with Market ... event class First Goalscorer - Home is not allowed for Same Game Multi. Only the pricer knows; do not pre-filter on that flag and do not promise a combination before pricing it.
REFUSALS ARRIVE AS HTTP 200 with success: false and price: 0 — the engine raises these rather than passing a zero off as a quote. Three kinds seen live: a suspended or unknown market names the legs in invalidSelections, mutually exclusive legs give OddsFactory returned price 1 or less, and a disallowed market names its event class. An unknown eventKey is the one that does NOT follow the pattern: it 500s.
Example: Price Bulldogs to win with over 169.5 total points {"eventKey": "2860313", "selectedOutcomes": [{"MarketKey": "114096420", "OutcomeKey": "1"}, {"MarketKey": "114104206", "OutcomeKey": "11"}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventKey | Yes | Numeric event key as a STRING, e.g. "2860313" — the `key` from pointsbet_event or any events feed. Every selection must belong to this event. | |
| selectedOutcomes | Yes | The legs: [{"MarketKey": "114096420", "OutcomeKey": "1"}, …]. Both come from pointsbet_event — MarketKey is `fixedOddsMarkets[].key`, OutcomeKey is that market's own `outcomes[].key`. OutcomeKey IS ONLY UNIQUE WITHIN ITS MARKET (key "11" is a different bet in each of two markets on the verified event), so the PAIR identifies a leg and an OutcomeKey carried to the wrong MarketKey silently prices something else. Send them as strings. One leg is accepted and just returns that leg's own price. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint, openWorldHint, and idempotentHint, the description adds substantial behavioral detail beyond those flags. It explains redundant legs are silently collapsed with no echo, refusals arrive as HTTP 200 with success:false, and the interaction with eventKey 500s. This is exactly the kind of context annotations cannot convey, and it does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose, but every paragraph earns its place by covering a distinct critical aspect: the correlation-adjusted price, silent leg collapse, eligibility flag caveat, refusal patterns, and an example. It is front-loaded with the core purpose and key warning, then structured into label-headed paragraphs. Slightly long for a tool description, but well-organized and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity (custom SGM pricing with non-obvious failure modes), the description is fully complete. It includes a verified example with actual keys, explains the return shape, documents all observed refusal types, and covers the only case that does not follow the pattern (unknown eventKey 500s). No output schema exists, but the description provides enough to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the input schema already thoroughly documents both parameters, including the critical warning that OutcomeKey is only unique within its market and that the pair is required. The description adds no new parameter semantics beyond what the schema provides; it even repeats the same warning verbatim. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb-resource pair: 'PRICE A SAME GAME MULTI you choose — give it selections from one PointsBet event, get the correlation-adjusted combined price.' It distinguishes from the sibling tool pointsbet_preprice_multis by explicitly stating it covers combinations PointsBet has not pre-built. The purpose is unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use this tool: 'Prices combinations PointsBet has not pre-built (for the ones it has, see pointsbet_preprice_multis).' It also warns against multiplying legs yourself ('Never multiply PointsBet legs yourself') and cautions that `enableCorrelatedMulti` is not eligibility. This gives clear, actionable guidance and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_sport_competitionsARead-onlyIdempotent
Competitions for one sport, grouped by locale (Featured / country buckets).
Returns: {key, name, locales:[{key, name, competitions:[{key, name, numberOfEvents}]}]}
Example: AFL / Australian-rules competitions {"sportKey": "aussie-rules"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportKey | Yes | Sport slug, e.g. "aussie-rules", "basketball", "tennis". Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description supplements the read-only/idempotent annotations with the return shape, the grouping by locale, and explicit note that no auth is needed. It does not elaborate on potential edge cases, but the annotations already cover safety, and the added context is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured; it starts with purpose, gives the return schema, includes a concrete example, and ends with auth. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explicitly defines the return structure and provides an example, covering the essential context for a simple read-only list tool. Minor gaps remain around locale semantics, but overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter sportKey is fully described in the schema with examples, so the description adds little beyond a concrete AFL example. Schema coverage is 100%, making this an adequate baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as competitions for a specific sport, grouped by locale, and includes a return structure example. It distinguishes itself from sibling tools that handle events or feature sliders, though it does not explicitly contrast alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool compared to alternatives like pointsbet_competition_events or pointsbet_sport_featured_events. The provided example shows a valid invocation but does not state the intended use case or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_sport_featured_eventsARead-onlyIdempotent
Featured (highlighted) events for one sport (event headers; call pointsbet_event for markets).
Returns: {key, name, events:[{key, name, competitionKey, startsAt, homeTeam, awayTeam}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sportKey | Yes | Sport slug, e.g. "aussie-rules". Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent hints. The description adds valuable context: 'Auth: none needed' and a detailed return structure. It also clarifies the tool only returns event headers, not markets, which is behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a return type line. Every sentence provides necessary information (purpose, alternative, return shape, auth), with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description is quite complete: it states the input, output structure, auth requirements, and related tool usage. It lacks details like pagination or what 'featured' means, but these are not critical for such a tool, and the return structure compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the only parameter (sportKey), which already explains it is a required sport slug and part of the URL path. The description adds no additional parameter semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: fetching featured (highlighted) events for a single sport. It uses a specific verb+resource ('Featured events for one sport') and distinguishes itself from the sibling tool pointsbet_event by explicitly directing market calls to that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'call pointsbet_event for markets' indicates an alternative tool for a different purpose (markets vs. event headers). This tells the agent when to use this tool (to get event headers) and when not to (when markets are needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_sports_inplayARead-onlyIdempotent
Sports currently in-play, with a live event count per sport.
Returns: {sports:[{key, name, numberOfInPlayEvents}], numberOfInPlayEvents}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, establishing the safety profile. The description adds authentication requirements and the return structure, but does not disclose any potential caveats or edge cases (e.g., whether only sports with active events are included). It adds some value beyond annotations but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with one sentence for the core purpose, one line for the return structure, and one for auth. No wasted words; every element adds value and is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read-only tool, the description is fully complete. It explains the return structure (which is standard practice since no output schema exists), specifies that no auth is needed, and clearly states the data scope. No further information is necessary for the agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. The schema coverage is 100% vacuously, and the baseline for 0 params is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (sports currently in-play) and the key output (live event count per sport). It distinguishes from siblings like pointsbet_sports_list and pointsbet_inplay_streaming through its focus on in-play status and event counts, though the verb is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention alternative tools, exclusions, or situational context beyond the core purpose, leaving the agent to infer usage from the tool's name and output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointsbet_sports_listARead-onlyIdempotent
Full catalogue of sports and their competitions (every code, featured flags).
Returns: {sports:[{key, name, competitions:[{key, name, isFeatured}]}]}
Example: Whole sports + competitions catalogue {"date": "02May2018"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date token in ddMMMyyyy form (e.g. 02May2018). The feed returns the current catalogue regardless, so any valid token works. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond this: the date token does not affect the response ('returns the current catalogue regardless'), auth is not needed, and the return shape is given. This goes beyond the annotations, though it doesn't discuss pagination or size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a one-line purpose, a return shape line, an example, and an auth note. Each sentence carries useful information without waste, and the structure front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, list-type tool with strong annotations, the description is complete. It covers the return structure, an example invocation, and the auth requirement. The absence of an output schema is compensated by the inline return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the input schema already explains the date parameter thoroughly: format, that any valid token works, and that it's part of the URL path. The tool description only repeats an example and adds no new parameter semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the 'Full catalogue of sports and their competitions (every code, featured flags)' – a specific resource with explicit scope. This distinguishes it from sibling tools like pointsbet_sport_competitions (specific sport) and pointsbet_sports_inplay (in-play only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage – you call this when you need the complete sports/competitions catalogue – but it never explicitly says when to use this vs alternatives or provides exclusions. The scope is clear via 'full' and 'every code', but no alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_bookARead-onlyIdempotent
Full order book (bids + asks with sizes) for one outcome token.
Returns: {market, asset_id, bids:[{price, size}], asks:[{price, size}], tick_size, neg_risk, timestamp}
Auth: none needed.
Also answers this: kalshi_orderbook.
| Name | Required | Description | Default |
|---|---|---|---|
| token_id | Yes | CLOB token id (one entry of a market's clobTokenIds). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent. The description adds that no auth is needed and specifies the exact return shape (market, asset_id, bids, asks, tick_size, neg_risk, timestamp), going beyond the annotation-provided safety profile without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, stating the primary purpose in the first sentence. Return format, auth, and alternative are each given in short, structured lines, with no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the purpose, return structure, auth requirements, and an alternative sibling. This is sufficient for an agent to select and invoke the tool correctly, and the schema handles the parameter detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter (token_id) is fully documented in the input schema as 'CLOB token id (one entry of a market's clobTokenIds)', so the schema covers 100% of the parameter semantics. The description does not add additional parameter-specific information beyond restating that it is for one outcome token, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the full order book (bids and asks with sizes) for one outcome token. It uses specific terms like 'bids', 'asks', and 'sizes', and scopes it to a single outcome token, distinguishing it from other Polymarket tools that return prices or midpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions 'Auth: none needed' as a prerequisite and names 'kalshi_orderbook' as an alternative query it can answer, giving the agent a clear when-to-use signal. This provides direct guidance on when this tool is appropriate compared to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_clob_marketsARead-onlyIdempotent
CLOB market catalogue (condition ids, token pairs, tick sizes) — cursor-paginated; the trading-plane view of the same markets.
Returns: {limit, count, next_cursor, data:[{condition_id, question, market_slug, tokens:[{token_id, outcome}], minimum_tick_size, active, closed}]}
Auth: none needed.
Also answers this: kalshi_markets.
| Name | Required | Description | Default |
|---|---|---|---|
| next_cursor | No | Pagination cursor ('' first page, 'LTE=' = end). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior, and the description adds valuable context beyond that. It discloses cursor-paginated behavior, the return structure, and that no authentication is needed, which are not covered by annotations. This goes beyond the baseline and gives the agent practical behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by a useful return format and auth note. The structure is generally clean, but the unclear 'Also answers this: kalshi_markets.' line adds confusion and could be considered extraneous, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema provided, the description carries the burden of explaining return values, which it does comprehensively by listing the exact fields and structure. It also covers pagination and authentication, making it sufficiently complete for a simple one-parameter read-only catalogue tool. The only gap is a lack of explicit sibling differentiation, but this does not severely hamper invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a thorough description of next_cursor, including special values ('' for first page, 'LTE=' for end), covering 100% of the parameter. The description only reinforces the cursor-paginated nature without adding new parameter-specific details. Per the rubric, high schema coverage sets a baseline of 3, and the description does not exceed that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a CLOB market catalogue with specific content (condition ids, token pairs, tick sizes) and pagination. It distinguishes itself as 'the trading-plane view of the same markets,' which implies a sibling tool but does not explicitly name it. The phrase 'Also answers this: kalshi_markets' is cryptic and could confuse rather than clarify the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage context through 'trading-plane view of the same markets' and the cross-reference to kalshi_markets, but lacks explicit guidance on when to choose this tool over alternatives. There are no clear exclusions or alternative tool names mentioned. The reference to kalshi_markets is ambiguous and does not offer actionable selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_eventARead-onlyIdempotent
One event by Gamma id, with all its markets.
Returns: {id, title, slug, description, volume, liquidity, endDate, tags, markets:[…]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Gamma event id (from polymarket_events). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds 'Auth: none needed' and an explicit return shape, which are useful beyond the annotations. It does not disclose potential errors, rate limits, or pagination, but for a simple read operation the provided information is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a compact return list. It front-loads the core action, includes only essential details (return fields and auth), and contains no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with no output schema, the description covers the essential context: what is returned (including a representative field list), authentication requirements, and the data source. It does not explain error handling or edge cases, but given the simplicity of the tool, the information is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id,' and the schema description already explains it is a Gamma event id from polymarket_events, required, and part of the URL path. The tool description adds no extra meaning beyond saying 'by Gamma id,' so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One event by Gamma id, with all its markets,' clearly identifying the resource (an event) and its scope (including markets). It lacks an explicit verb like 'get' or 'fetch,' but the noun-phrase form is unambiguous and distinguishes it from the sibling polymarket_events (plural). The return field list further clarifies what is produced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage—fetch a single event with its markets by supplying a Gamma id—but does not explicitly state when to choose this tool over alternatives like polymarket_events or polymarket_market. The schema description adds a hint that the id comes from polymarket_events, but there is no direct when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_eventsARead-onlyIdempotent
Event catalogue (an event groups related markets, e.g. one game or election) with nested markets.
Returns: [{id, title, slug, description, volume, liquidity, endDate, tags, markets:[{id, question, clobTokenIds, outcomePrices}]}] (top-level array)
Example: Most-traded active events {"limit": 5, "active": true, "closed": false, "order": "volume24hr", "ascending": false}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Exact event slug (e.g. from a polymarket.com/event/... URL). | |
| limit | No | Page size. | |
| order | No | Sort key (e.g. volume24hr, liquidity, endDate). | |
| active | No | Only active events. | |
| closed | No | Only (or exclude with false) closed events. | |
| offset | No | Pagination offset. | |
| tag_id | No | Filter by tag id. | |
| archived | No | Include archived. | |
| ascending | No | Sort direction. | |
| series_id | No | Filter by series id. | |
| volume_min | No | Min volume. | |
| end_date_max | No | ISO date — events ending before this. | |
| end_date_min | No | ISO date — events ending after this. | |
| liquidity_min | No | Min liquidity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, lowering the burden. The description adds the exact return format, an example query, and notes that no auth is needed. This goes beyond annotations by clarifying the response shape and example usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with separate sections for definition, return format, example, and auth. It avoids redundant wording and front-loads the core purpose, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a full return structure and an example request, which compensates for the missing structured output. All 14 parameters are documented in the schema, and the description adds practical usage context, making the tool adequately specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 14 parameters with descriptions (100% coverage), providing the baseline. The description adds meaningful context via an example showing how to combine limit, active, closed, order, and ascending, which clarifies typical usage patterns beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as an 'Event catalogue' that groups related markets, distinguishing it from sibling tools like polymarket_markets or polymarket_event. It specifies the return structure with nested markets and provides a concrete example, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool (to list events with nested markets) and includes a usage example (most-traded active events). It does not explicitly mention alternative tools or exclusion criteria, but the context is sufficient for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_holdersBRead-onlyIdempotent
Top holders of a market's outcome tokens.
Returns: [{token, holders:[{proxyWallet, amount, name, …}]}] (top-level array)
Auth: none needed.
Also answers this: kalshi_trades.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max holders per token. | |
| market | Yes | Condition id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed,' which is not covered by annotations, and discloses the return structure (top-level array) and the presence of non-enumerated fields (…). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is relatively short, but the inclusion of the odd 'Also answers this: kalshi_trades.' line is off-topic and unhelpful, detracting from the overall structure. The return format and auth are clear, but the stray line feels like an accidental note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should fully describe the return value; it gives a partial structure with '…' and doesn't elaborate on the meaning of 'proxyWallet' or 'amount.' It also doesn't explain how to obtain the 'condition id' beyond the schema. The cryptic kalshi_trades note adds noise rather than completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for both parameters (market as 'Condition id.' and limit as 'Max holders per token.'). The description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns 'Top holders of a market's outcome tokens,' which clearly conveys the resource and action. It distinguishes from typical trading tools like 'polymarket_trades' by focusing on holders rather than trades, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. The cryptic line 'Also answers this: kalshi_trades.' is confusing and fails to clarify the intended context or exclusion criteria, leaving the agent without clear routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_marketARead-onlyIdempotent
One market's full detail by Gamma id — question, outcomes + prices, CLOB token ids, volume/liquidity, resolution source.
Returns: {id, question, description, slug, conditionId, clobTokenIds, outcomes, outcomePrices, volumeNum, liquidityNum, endDate, resolutionSource, events:[…]}
Auth: none needed.
Also answers this: kalshi_market.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Gamma market id (from polymarket_markets). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds 'Auth: none needed' and the return object shape, which provide some context, but there is no mention of error handling, latency, or what happens for invalid ids.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise and front-loaded, with the purpose in the first sentence and a compact return shape listing. However, the final 'Also answers this: kalshi_market.' sentence is ambiguous and could mislead, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description provides a reasonable amount of context: it lists the return fields inline, notes no auth required, and specifies the id source indirectly. It lacks explanation of the events array or potential missing fields, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the 'id' parameter already has a rich description (Gamma market id from polymarket_markets, required, URL path part). The tool description merely repeats 'by Gamma id' without adding new parameter syntax or format details, so it does not go beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool retrieves a single market's full detail by Gamma id, listing key fields like question, outcomes, prices, and CLOB token ids. It distinguishes from the sibling 'polymarket_markets' (plural) by the 'One market' phrasing, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: when you have a Gamma id and need full market detail. However, there are no explicit 'when to use' or 'when not to use' instructions, and the cryptic 'Also answers this: kalshi_market.' line adds confusion rather than clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_marketsARead-onlyIdempotent
Market catalogue with current outcome prices — filter/sort by activity, volume, liquidity, tag or slug.
Returns: [{id, question, slug, conditionId, clobTokenIds, outcomes, outcomePrices, volumeNum, liquidityNum, volume24hr, endDate, active, closed, events:[…]}] (top-level array)
Example: Most-traded active markets {"limit": 5, "active": true, "closed": false, "order": "volume24hr", "ascending": false}
Auth: none needed.
Also answers this: kalshi_markets.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Exact market slug. | |
| limit | No | Page size. | |
| order | No | Sort key (e.g. volume24hr, liquidity, endDate). | |
| active | No | Only active markets. | |
| closed | No | Only (or exclude with false) closed markets. | |
| offset | No | Pagination offset. | |
| tag_id | No | Filter by tag id (see polymarket_tags). | |
| archived | No | Include archived. | |
| ascending | No | Sort direction (default false with `order`). | |
| end_date_max | No | ISO date — markets ending before this. | |
| end_date_min | No | ISO date — markets ending after this. | |
| condition_ids | No | Filter by condition id. | |
| clob_token_ids | No | Filter by CLOB token id. | |
| volume_num_min | No | Min volume. | |
| liquidity_num_min | No | Min liquidity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful context beyond these: it states no authentication is needed, lists the returned fields in detail, and provides a concrete example. It does not disclose potential rate limits or error behavior, but for a read-only catalogue tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: a one-line summary, return format, example, auth note, and a cross-reference. It is moderately concise and every part adds information. The 'Also answers this: kalshi_markets' line is slightly extraneous but does not significantly bloat the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by listing the exact return fields and noting the top-level array shape. It also covers auth, provides an example, and mentions filtering options. It does not explain every parameter, but the schema already does that, making this reasonably complete for a list/filter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of all 15 parameters, so the baseline is 3. The description adds extra value by summarizing the main filtering dimensions (activity, volume, liquidity, tag, slug) and by including a concrete example that ties several parameters together (limit, active, closed, order, ascending), helping the agent understand how to combine them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a market catalogue with current outcome prices and lists filtering/sorting options. It identifies the resource (Polymarket markets) and distinguishes from most siblings, though the note 'Also answers this: kalshi_markets' introduces ambiguity about its exact scope relative to that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on what the tool can do (filter/sort by activity, volume, liquidity, tag, slug) and includes an example query. However, it does not provide explicit guidance on when to use this tool versus alternatives; the phrase 'Also answers this: kalshi_markets' is vague and could confuse an agent about when to prefer this tool over the Kalshi-specific sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_midpointARead-onlyIdempotent
Midpoint (between best bid and best ask) for one outcome token.
Returns: {mid}
Auth: none needed.
Also answers this: kalshi_orderbook.
| Name | Required | Description | Default |
|---|---|---|---|
| token_id | Yes | CLOB token id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond these: auth requirements, the return shape {mid}, and the cross-tool behavior of also answering kalshi_orderbook requests. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the core purpose, followed by labeled return and auth lines. The final sentence 'Also answers this: kalshi_orderbook' is potentially confusing but does not significantly bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with strong annotations, the description adequately covers purpose, return shape, and auth. It lacks detail on edge cases such as empty order books or the type/range of the midpoint, but given the simple scope and schema richness, it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter token_id is fully described in the schema as 'CLOB token id,' so schema coverage is 100%. The description's reference to 'one outcome token' adds minimal semantic value and does not clarify format, sourcing, or edge cases beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the midpoint between best bid and best ask for one outcome token, which distinguishes it from siblings like polymarket_price, polymarket_spread, and kalshi_orderbook. However, it lacks an explicit verb and the closing 'Also answers this: kalshi_orderbook' introduces ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus sibling tools like polymarket_price or polymarket_spread. 'Auth: none needed' addresses prerequisites, and 'Also answers this: kalshi_orderbook' hints at cross-tool routing, but this is only implied context, not clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_priceBRead-onlyIdempotent
Best price for one outcome token on one side of the book.
Returns: {price}
Auth: none needed.
Also answers this: kalshi_orderbook.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Which side's best price. One of: buy, sell. | |
| token_id | Yes | CLOB token id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering safety and idempotency. The description adds that no auth is needed and specifies the return shape as {price}, which is useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose, but the final sentence 'Also answers this: kalshi_orderbook' is unclear and does not contribute meaningful structure, slightly detracting from overall conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description covers purpose, return format, and auth. However, it lacks clear guidance on how this tool relates to similar siblings, leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both token_id and side clearly documented. The description's phrase 'one outcome token on one side of the book' adds minimal additional meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the best price for one outcome token on one side of the book, distinguishing it from other Polymarket price tools. However, the line 'Also answers this: kalshi_orderbook' introduces ambiguity about the tool's exact scope, so it isn't a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative-tool guidance is provided. The reference to kalshi_orderbook is vague and does not clarify when to prefer this tool over sibling tools like polymarket_book or polymarket_midpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_price_historyARead-onlyIdempotent
Historical price series for one outcome token — by named interval or an explicit ts window.
Returns: {history:[{t, p}]} (unix seconds, price 0-1)
Auth: none needed.
Also answers this: kalshi_candlesticks, kalshi_candlesticks_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| endTs | No | Window end (unix seconds). | |
| market | Yes | CLOB token id (the API calls this param `market`). | |
| startTs | No | Window start (unix seconds). | |
| fidelity | No | Resolution in minutes. | |
| interval | No | Named lookback window (alternative to startTs/endTs). One of: 1h, 6h, 1d, 1w, 1m, max. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and idempotentHint annotations already present, the description adds valuable context by stating 'Auth: none needed' and specifying the exact return shape '{history:[{t, p}]}' with unix seconds and price 0-1. No annotation contradiction is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately short, leading with the purpose and providing return shape and auth in three lines. The final line about kalshi_candlesticks is confusing and somewhat undermines the otherwise clear structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only historical price tool with full schema coverage and helpful annotations, the description covers the essentials: purpose, time selection, return format, and auth. It doesn't need to explain return values further since it explicitly provides the return shape, making it complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already contains detailed descriptions for all five parameters (100% coverage), including the enum values for interval and the alternative relationship between interval and startTs/endTs. The description only reiterates the two query modes, adding little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Historical price series for one outcome token — by named interval or an explicit ts window,' which clearly identifies the verb (historical price series), resource (one outcome token), and two query modes. This distinguishes it from sibling price tools like polymarket_price and polymarket_spread, which likely serve other purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating both named interval and explicit ts window options, but does not explicitly say when to prefer this over alternatives such as polymarket_price or the Kalshi candlestick tools. The closing line 'Also answers this: kalshi_candlesticks, kalshi_candlesticks_batch' is ambiguous and could be interpreted as a compatibility note rather than a clear usage directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_searchARead-onlyIdempotent
Site-wide search over events/markets/profiles by free-text query.
Returns: {events:[…], tags:[…], profiles:[…]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text (team, person, topic). | |
| events_status | No | Filter events by status (e.g. active). | |
| limit_per_type | No | Max results per result type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful context by stating the return structure and that no auth is required. However, there is a minor inconsistency: the description says it searches over 'events/markets/profiles' but the return key is 'tags' instead of 'markets', leaving the exact response composition slightly muddy. It also omits any mention of pagination or ordering, but with annotations present this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the main purpose is in the first sentence, followed by the return structure and auth requirement. Every line adds value, there is no fluff, and it fits within a compact length appropriate for a search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema), the description covers the essential aspects: what it does, what it returns, and authentication requirements. The return structure is explicitly listed, which is helpful in the absence of an output schema. The minor mismatch between searched entities and returned result keys slightly reduces completeness, but the overall context is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover 100% of parameters (q, events_status, limit_per_type), each with a clear explanation. The description adds no extra parameter semantics beyond the schema, but that is acceptable given the high schema coverage. The baseline of 3 applies because the description does not need to compensate for missing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Site-wide search') with a clear resource scope ('events/markets/profiles') and method ('free-text query'). This distinguishes it from sibling tools that fetch specific entities (e.g., polymarket_market, polymarket_events). The verb and subject are immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when you need to search across multiple entity types by free text, rather than retrieve a known item with a specific ID. It does not explicitly name alternatives or exclusion criteria, but the context of 'site-wide search' is sufficient for an agent to select it appropriately. No misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_seriesARead-onlyIdempotent
One series by Gamma id, with its events.
Returns: {id, title, slug, seriesType, recurrence, events:[…]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Gamma series id (from polymarket_series_list or an event's series). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint. The description adds value by disclosing 'Auth: none needed' and the return shape, which goes beyond annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no fluff. It front-loads the core purpose in the first sentence and uses separate lines for return format and auth, making it highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with no output schema, the description covers the return structure, auth, and resource scope. It could mention error handling for invalid ids, but that is a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself adds no additional meaning to the 'id' parameter beyond what the schema already states about it coming from polymarket_series_list or an event's series.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One series by Gamma id, with its events' which clearly identifies the verb (retrieve), resource (series), and scope (includes events). It distinguishes itself from the sibling polymarket_series_list, which lists series, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a Gamma id, but it does not explicitly say when to use this vs alternatives like polymarket_series_list or polymarket_event. The schema describes the id source, but the description itself lacks explicit usage guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_series_listARead-onlyIdempotent
Series catalogue — a series groups recurring events (e.g. a league's season of games); the top of Gamma's series → events → markets hierarchy.
Returns: [{id, title, slug, seriesType, recurrence, active, closed, volume, liquidity, events:[…]}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Exact series slug. | |
| limit | No | Page size. | |
| order | No | Sort key (e.g. volume24hr, liquidity). | |
| closed | No | Only (or exclude with false) closed series. | |
| offset | No | Pagination offset. | |
| ascending | No | Sort direction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent), the description adds valuable behavioral context: 'Auth: none needed' and a concrete return shape with field names. This tells the agent exactly what to expect from the call, which annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one sentence for the concept, one for the return format, and one for authentication. Every sentence earns its place without redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with thorough schema documentation and clear annotations, this description is complete. It explains the return array structure, auth requirements, and the tool's position in the hierarchy, leaving no major gaps for an agent to misuse it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters are well documented in the input schema itself. The description adds no additional parameter-specific meaning, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a 'Series catalogue' that lists series, and explicitly defines series in the context of the Gamma hierarchy (series → events → markets). This distinguishes it from sibling tools like polymarket_events or polymarket_markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context that this lists series at the top of the hierarchy, making it obvious when to use it versus lower-level tools. It doesn't explicitly name alternatives like polymarket_series, but the hierarchy description implies the usage boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_sportsARead-onlyIdempotent
Sports metadata catalogue — each sport with its tag ids, league/resolution links and series, the entry point for sports markets (feed tag_id into polymarket_markets/polymarket_events).
Returns: [{sport, image, resolution, ordering, tags, series}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral details: returns a top-level array, no auth required, and lists output fields. While it doesn't discuss pagination or the meaning of 'resolution', it goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences: purpose, return format, and auth. Information is front-loaded with the core purpose first, followed by essential details. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter catalogue tool, the description covers purpose, output structure, auth, and downstream usage. It is complete enough for an agent to select and invoke it correctly without further context, even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the input schema is trivially complete (100% coverage) and the description cannot add parameter-level detail. The description compensates by explaining the returned fields, which helps an agent understand what to expect. This aligns with the baseline of 4 for 0-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a sports metadata catalogue providing tag ids, league/resolution links, and series, positioning it as the entry point for sports markets. It explicitly names the downstream tools (polymarket_markets/polymarket_events) and differentiates its role from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: feed the returned tag_id into polymarket_markets/polymarket_events. This establishes a clear workflow and when to use this tool relative to alternatives, with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_spreadBRead-onlyIdempotent
Bid-ask spread for one outcome token.
Returns: {spread}
Auth: none needed.
Also answers this: kalshi_orderbook.
| Name | Required | Description | Default |
|---|---|---|---|
| token_id | Yes | CLOB token id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds that no auth is needed and that the return is a spread object, but provides no further behavioral context such as error cases or data freshness. This offers modest value beyond annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and the main purpose is front-loaded, but the sentence 'Also answers this: kalshi_orderbook' is cryptic and does not clearly earn its place. It reads as an out-of-place note that confuses rather than clarifies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers the return shape and auth requirement. However, the ambiguous relationship to kalshi_orderbook and lack of detail about how the spread is computed or represented leave moderate gaps for an agent trying to select among similar prediction-market tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents token_id as 'CLOB token id' with 100% coverage, so the description has a low bar to meet. The phrase 'one outcome token' reinforces the parameter's purpose but adds no new technical detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the tool returns the bid-ask spread for one outcome token, which is a specific and understandable operation. However, the trailing 'Also answers this: kalshi_orderbook' introduces ambiguity about the exact scope and relationship to an existing sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like polymarket_price, polymarket_midpoint, or kalshi_orderbook. The cryptic 'Also answers this: kalshi_orderbook' is not an actionable usage guideline, and the only operational note is 'Auth: none needed.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_tagsARead-onlyIdempotent
Tag catalogue (Sports, Politics, Crypto, NBA, …) — tag ids feed the tag_id filters.
Returns: [{id, label, slug, forceShow, …}] (top-level array)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| offset | No | Pagination offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context: the return format (top-level array with fields) and that no auth is needed. It does not contradict annotations and adds meaningful detail beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with each sentence earning its place: purpose, return format, and auth. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple catalogue tool with good annotations and a sample return layout, this is nearly complete. It could explicitly mention pagination via limit/offset, but the schema covers that. It might also clarify that the list is static or changes externally, but openWorldHint hints at that without needing explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters (limit, offset) with descriptions, so schema coverage is 100%. The description does not add anything about parameter behavior beyond what the schema states, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a tag catalogue with concrete examples (Sports, Politics, Crypto, NBA) and explicitly notes that tag ids feed the tag_id filters. This distinguishes it from sibling polymorphic tools that consume tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used to obtain valid tag IDs for filtering other queries, but it does not explicitly name alternative tools or state when not to use it. The context is clear enough for an agent to infer the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polymarket_tradesARead-onlyIdempotent
Public trade tape — recent fills, optionally for one market (condition id) or user.
Returns: [{proxyWallet, side, asset, conditionId, size, price, timestamp, title, outcome}] (top-level array)
Auth: none needed.
Also answers this: kalshi_trades.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Taker side filter. One of: BUY, SELL. | |
| user | No | Filter by wallet address. | |
| limit | No | Page size (max 500). | |
| market | No | Condition id (a market's conditionId). | |
| offset | No | Pagination offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it specifies the response shape (top-level array with listed fields), states authentication is not required, and clarifies the tool is for public data. It does not contradict the read-only, open-world, or idempotent hints, and usefully supplements them with return-format and auth details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: each sentence delivers distinct information (purpose, return shape, auth, cross-reference). It is front-loaded with the core purpose and avoids redundancy with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only trade tape with 5 optional parameters and no output schema, the description covers the essential context: what data is returned, that it is public, and that no auth is needed. However, it does not mention default time ranges, ordering, or pagination behavior beyond what the schema implies, leaving minor completeness gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all 5 parameters. The description adds minimal extra meaning by saying filtering can be by 'market (condition id) or user', which mirrors the schema's 'market' and 'user' descriptions. No meaningful additional parameter semantics are provided beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns recent trade fills ('Public trade tape') with optional filtering by market or user, and explicitly lists the return fields. However, it lacks a specific verb like 'list' or 'get', and the note 'Also answers this: kalshi_trades' adds slight ambiguity about its exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need recent trade fills) but never explicitly states when to use it over alternatives. The 'Also answers this: kalshi_trades' note hints at covering kalshi_trades-style queries, but the usage context is not clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
racingandsports_match_listARead-onlyIdempotent
Sports match list (the site's non-racing fixtures feed). Cloudflare-challenged from datacenter IPs.
Returns: (sports fixtures feed; shape served to the site's XHR)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior, and the description adds valuable context: the return shape is the site's XHR feed and it may be Cloudflare-challenged from datacenter IPs. This goes beyond the annotations without contradicting them, providing deployment-relevant behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using three short lines to convey purpose, return shape, auth, and a network caveat. Every sentence earns its place, with the main purpose front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema) and strong annotations, the description covers the essentials: what it returns, that no auth is needed, and a potential environmental issue. It doesn't detail the exact feed structure, but that is acceptable for a straightforward list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to explain any. Baseline for no parameters is 4, and the empty schema is fully covered by the context signal of 100% schema_description_coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a sports match list for non-racing fixtures, distinguishing it from racing-focused siblings like racingandsports_todays_racing. The phrase 'the site's non-racing fixtures feed' provides specific scope, though the site itself is unnamed, leaving slight ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a practical usage caveat about Cloudflare challenges from datacenter IPs and notes that no auth is needed. However, it doesn't explicitly state when to use this tool versus other match-list tools or exclude any alternatives, leaving the usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
racingandsports_race_oddsARead-onlyIdempotent
Bookmaker odds for one race. Needs a per-race token (issued by the form-guide page); raceId + token come from the form-guide view.
Returns: (per-runner bookmaker odds; shape served to the form-guide XHR)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Per-race access token issued by the form-guide page (not generatable here). | |
| raceId | Yes | Race id (from the form-guide page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds extra context by stating 'Auth: none needed' and that the return shape is served to the form-guide XHR, which goes beyond the structured fields. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The separation of token dependency, return shape, and auth into distinct lines makes it easy to scan. Every sentence provides useful information with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool with good annotations and schema descriptions, this description is nearly complete. It covers purpose, parameter source, return shape, and auth. It does not explicitly name the form-guide tool (e.g., racingandsports_todays_racing) or discuss openWorldHint implications, but those are not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are well-documented in the schema (token as per-race access token, raceId as race id). The description reinforces this by repeating that both come from the form-guide view, but it does not add new semantic details beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns bookmaker odds for one race, with the scope explicitly limited to a single race via a per-race token. It distinguishes itself from sibling tools like racingandsports_todays_racing by emphasizing the per-race granularity and the token requirement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the prerequisite (per-race token issued by the form-guide page) and explicitly states that raceId and token come from the form-guide view, giving clear context on when to use it. It does not name alternative tools or state when not to use it, but the source dependency is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
racingandsports_todays_racingARead-onlyIdempotent
Today's race meetings across all codes (thoroughbred / harness / greyhound), grouped by country, each meeting with its form-guide / results URLs.
Returns: [{Discipline:'T'|'H'|'G', DisciplineFullText, Countries:[{CountryName, countryCode, Flag, HasResults, Meetings:[{Course, RaceNumber, HasResults, Remaining, MeetingClosed, FormGuideUrl, PostMeetingUrl, PreMeetingUrl, PDFUrl}]}]}] (top-level array, one per discipline)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the bar for additional transparency is lower. The description adds 'Auth: none needed' and describes the return structure, which is useful. However, it does not disclose potential rate limits, data freshness/timezone semantics, or any other behavioral nuances that might affect invocation expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose statement followed by a compact, precise type definition for the return value. It includes only necessary information (auth note, grouping logic, URL fields) without any filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is remarkably complete. It states what data is returned, how it is organized, the meaning of each field, and authentication requirements. The only minor omission is the timezone for 'today', but that does not undermine the overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema fully covers parameter semantics. The description adds value by detailing the return structure, which helps the agent understand what to expect, but this is not strictly about parameter meaning. Baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns today's race meetings across all codes (thoroughbred, harness, greyhound), grouped by country, with form-guide/results URLs. It specifies the resource ('today's race meetings'), the scope (all codes, grouped by country), and the output structure, making it distinct from many sibling racing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternative racing tools such as betr_todays_races or tab_racing_meetings. It does not mention any trade-offs, exclusions, or preferred use cases beyond its inherent purpose of retrieving today's meetings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_competitionsARead-onlyIdempotent
All Lega Serie A competitions (Serie A, Coppa Italia, Super Cup, Primavera, …), each with its SDP competitionId.
Returns: {competitions:[{competitionId, name, officialName, shortName, acronymName, providerId, imagery}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Auth: none needed' and specifies the return structure, which goes beyond the readOnlyHint and idempotentHint annotations. It does not contradict any annotations. It lacks details on pagination or regional coverage, but these are not critical for a simple listing endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the tool's purpose, followed by a clear return format and an auth note. Every sentence earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing endpoint, the description provides the essential return contract and auth status. It does not explain that the locale parameter affects label language, but the schema covers that. Overall it is sufficient for an agent to understand the tool's output and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional locale parameter is fully described in the schema with 'Label language' and a default value, so the description does not need to elaborate. The tool description adds no additional semantic context beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning all Lega Serie A competitions (Serie A, Coppa Italia, Super Cup, Primavera) with their SDP competitionId. This specific verb+resource scope distinguishes it from sibling tools for other leagues and from related Serie A tools like seriea_seasons or seriea_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives. While the description implies listing competitions, it does not mention exclusions, alternatives, or prerequisites. Sibling tools such as seriea_competition or seriea_seasons are not referenced, leaving the agent to infer the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_matchesARead-onlyIdempotent
All 380 matches for a season — scores, status, kickoff, stadium, matchday. Season-scoped. NOTE: returns the WHOLE season in one ~1.2 MB payload — it cannot be narrowed server-side (matchday/round/page params are all ignored); filter the returned matches by matchSet/roundName (the matchweek) client-side.
Returns: {matches:[{matchId, home, away, providerHomeScore, providerAwayScore, status (FINISHED/…), matchDateUtc, stadiumName, roundName, matchSet:{matchSetId}, winTeamId}]} (matchSet = the matchweek, providerId opta:MatchDay:N — group by it client-side)
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, but the description adds substantial behavioral context: the ~1.2 MB payload, that narrowing params are ignored, the need for client-side filtering, and the exact meaning of matchSet/roundName. It also states auth is not needed and outlines the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with essential information: purpose, size warning, filtering instruction, return schema, and auth. Each sentence or code snippet earns its place; the formatting with a separate note and code block makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully explains the return structure, the matchweek grouping concept, and the client-side filtering requirement. It also addresses the large payload and how to source the required seasonId, making it highly complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that matchday/round/page parameters are ignored (even though they don't exist in the schema) and clarifying the seasonId comes from seriea_seasons. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'All 380 matches for a season' and lists the included fields (scores, status, kickoff, stadium, matchday). It is season-scoped and distinguishes itself from sibling tools like seriea_seasons, seriea_standings, and seriea_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong context: season-scoped, whole season returned, must filter client-side, and mentions seasonId comes from seriea_seasons. However, it does not explicitly name alternative tools or when not to use this one, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_match_lineupsARead-onlyIdempotent
Lineups for one match — per side: tacticalFormation, the fielded XI (with average pitch positions, captain/GK flags, per-player events), the bench, and staff. Discover the matchId from seriea_matches.
Returns: {matchId, pitchSizeX, pitchSizeY, home:{teamId, tacticalFormation, fielded:[{displayName, bibNumber, isCaptain, isGoalkeeper, averageXPosition, averageYPosition, events}], benched, staff}, away:{…}}
Auth: none needed.
Also answers this: pl_match_lineups.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
| matchId | Yes | SDP match id (from seriea_matches.matches[].matchId). Required — part of the URL path. | |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description adds 'Auth: none needed' and details the response structure, including pitch size and per-player metrics. It explains what data is included (average pitch positions, per-player events, etc.), which goes beyond the annotations. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an opening summary, a Returns block, and an auth note. It is somewhat lengthy due to the inline return schema, but this compensates for the absence of an output schema. Content is front-loaded and easy to scan, with minimal filler. The closing alias note is extraneous but not disruptive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description provides a concrete return structure, covers authentication, and directs the user to find matchId via seriea_matches. It does not explicitly state the league scope (Serie A), though the tool name implies it. The ambiguous 'Also answers this: pl_match_lineups' introduces uncertainty about whether it covers Premier League too, which is a gap in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description. The tool description does not add new semantic details beyond the schema (e.g., it repeats the source for matchId, which is already in the schema). The locale default is given in the schema. Since coverage is high, the baseline of 3 applies; no additional value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'Lineups for one match' with a detailed breakdown of per-side content (tactical formation, fielded XI with positions, captain/GK flags, events, bench, staff). The verb-resource pair is explicit and the return structure is shown. The only oddity is the closing 'Also answers this: pl_match_lineups', which is ambiguous but does not obscure the primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite ('Discover the matchId from seriea_matches') which guides the agent to obtain a required input. However, it does not explicitly differentiate this tool from its sibling pl_match_lineups, nor does it state when not to use it. The phrase 'Also answers this: pl_match_lineups' hints at a possible overlap but lacks clarity on selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_playersARead-onlyIdempotent
Every player in a season with identity AND full Opta stats[] (~279 {statsId, statsValue} pairs) — no separate squad call needed. Paginated 30/page (pagination.totalPages / isLastPage; the pageSize param is ignored). NOTE: category selects which STAT SET is returned (General or Goalkeeping; others 400) — it is NOT a position filter, every category returns all players.
Returns: {players:[{playerId, displayName, mediaFirstName, mediaLastName, shirtName, role (1 GK,2 DEF,3 MID,4 FWD), roleLabel, nationalityIsoCode, team, imagery, stats:[{statsId, statsValue}]}], pagination:{totalPages, currentPage, isLastPage}}
Example: 2025/26 outfield player stats, page 1 {"seasonId": "serie-a::Football_Season::5f0e080fc3a44073984b75b3a8e06a8a", "category": "General", "page": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (30 players/page; total via pagination.totalPages). | |
| locale | No | Label language. | en-GB |
| category | No | Stat category — only General and Goalkeeping are valid (Attack/Defence/etc. return 400). | General |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral details: category values other than General/Goalkeeping return 400, pageSize parameter is ignored, pagination fields (totalPages/isLastPage), and the return structure. It also confirms no auth is needed, exceeding 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with distinct sections: purpose, pagination, category warning, return format, example, and auth. It is somewhat long but every sentence adds valuable information without redundancy. The use of code blocks and notes improves readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description compensates by fully specifying the return shape. It also covers critical constraints (category values, pagination, auth), provides an example, and addresses potential misuse. This makes it comprehensively actionable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics beyond the schema: category selects the stat set rather than filtering by position, and the example provides a concrete seasonId and page usage. It also clarifies pagination fields, which the schema only partially communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every player in a season with identity and full Opta stats, which is a specific verb+resource pair. It distinguishes itself from sibling tools by noting 'no separate squad call needed' and clarifying the scope (all players, not just a squad).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: pagination behavior (30/page, pageSize ignored), category semantics (not a position filter), and an explicit example. It implies alternatives ('no separate squad call needed') but does not name specific sibling tools, slightly reducing its guidance value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_seasonARead-onlyIdempotent
One season's detail by seasonId.
Returns: {season:{seasonId, seasonName, startDateUtc, endDateUtc, competitionId, imagery}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
| seasonId | Yes | SDP season id (from seriea_seasons; e.g. serie-a::Football_Season::5f0e080fc3a44073984b75b3a8e06a8a = 2025/26). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the read-only nature is covered. The description adds value by disclosing the response structure and confirming 'Auth: none needed', which provides useful operational context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and includes return format and auth details with no waste. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval tool with full schema coverage and enabling annotations, the description covers purpose, usage implication, response shape, and auth. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description goes further by providing a concrete example for seasonId and pointing to the source tool 'seriea_seasons', adding meaning beyond the schema. Locale does not get extra explanation, but the schema description suffices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One season's detail by seasonId' with a specific verb and resource, clearly distinguishing it from the sibling list tool 'seriea_seasons'. The return structure is also outlined, reinforcing the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The seasonId parameter description says 'from seriea_seasons', implying the correct workflow of first listing seasons then fetching details. However, there is no explicit when-not-to-use or alternative comparison, so it is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_seasonsARead-onlyIdempotent
All 41 Serie A seasons (1986/87 → 2026/27) with seasonId + seasonName. The Serie A competition id is baked in — start here to get a seasonId, then drill into standings/teams/players/matches.
Returns: {seasons:[{seasonId, seasonName, startDateUtc, endDateUtc, competitionId, providerId, imagery}]} (seasonName like '2025/2026')
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds useful behavioral context beyond annotations: 'The Serie A competition id is baked in', 'Auth: none needed', and the exact return shape including the seasonName format. This gives the agent extra confidence and practical knowledge without conflicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, immediately stating the resource and scope. The return format is condensed into a single line, and the auth note is minimal. Every sentence adds value and there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with one optional parameter and no output schema, the description is complete. It covers what is returned, how to use the result, that no auth is needed, and how the competition ID is embedded. No important information is missing for the agent to invoke and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents 'locale' as 'Label language' with a default of 'en-GB', and schema coverage is 100%. The tool description does not add any additional meaning about the parameter—it never mentions locale or how it affects the output. With full schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns all 41 Serie A seasons with seasonId and seasonName. It explicitly positions itself as the starting point for getting a seasonId before drilling into standings/teams/players/matches, which distinguishes it from sibling tools like seriea_standings and seriea_season. The scope is precise and the verb is implied by 'All 41 Serie A seasons'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'start here to get a seasonId, then drill into standings/teams/players/matches'. It tells the agent when to use this tool and what to do next. It does not explicitly state when not to use it or mention alternatives like seriea_season, but the 'start here' guidance is clear enough for a simple listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_standingsARead-onlyIdempotent
League table for a season. Returns three tables — standings[0]=overall, [1]=home, [2]=away — each with 20 teams; each team carries stats[] keyed by statsId (rank, points, matches-played, win, draw, lose, goals-for, goals-against, goal-difference).
Returns: {standings:[{type: table|home|away, teams:[{teamId, mediaName, providerId, imagery, stats:[{statsId, statsLabel, statsValue}]}]}]}
Example: 2025/26 Serie A table {"seasonId": "serie-a::Football_Season::5f0e080fc3a44073984b75b3a8e06a8a"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context: no auth required, exact return structure (three tables, team fields, stats keys), and an example seasonId. It does not contradict annotations and provides value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured and front-loaded with the main purpose, followed by return schema and example. It is slightly verbose but every sentence adds value (structure, stats explanation, auth). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only standings tool with no output schema, the description thoroughly explains the response format, stats semantics, example seasonId, and auth. It is complete enough for an agent to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a concrete example seasonId value, which helps illustrate the format, but does not explain the locale parameter beyond the schema's 'Label language.' Minimal added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a league table for a season, with specific structure (three tables: overall, home, away). It is distinct from siblings by describing the three-table organization, but does not explicitly name alternative tools for other standings/league information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or mention of alternatives. It only provides an example seasonId and notes auth is not needed. Does not clarify how this differs from related tools like seriea_team_stats or pl_standings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_teamsARead-onlyIdempotent
The 20 teams in a season, with identity + imagery (logos). Season-scoped.
Returns: {competition, teams:[{teamId, providerId, officialName, mediaName, shortName, acronymName, countryCode, imagery:{teamLogo}}]}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Label language. | en-GB |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, and the description adds the exact return structure and authentication requirement (Auth: none needed). It also clarifies the season-scoped nature, going beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by a compact return structure and auth note. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two parameters and no output schema, the description provides the return shape, scope, and auth, making it self-sufficient. The absence of explicit alternatives is minor given the clarity of the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have schema descriptions (100% coverage), so the baseline is 3. The description does not add material meaning beyond the schema; it merely mentions seasonId comes from seriea_seasons, which is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the 20 teams in a season with identity and imagery, and explicitly notes it is season-scoped. This specific verb+resource combination differentiates it from other Serie A tools like standings or players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating season-scoped scope and showing the return shape, implying seasonId comes from seriea_seasons as noted in the schema. However, it does not explicitly state when to prefer this over alternative team-listing tools or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seriea_team_statsARead-onlyIdempotent
Team stat leaderboard for a season — all 20 teams with full Opta team stats[] (~402 {statsId, statsValue} pairs: games-played, total-points, total-wins/losses/draws, …). Same category rule as players (General or Goalkeeping; others 400).
Returns: {teams:[{teamId, mediaName, providerId, imagery, stats:[{statsId, statsLabel, statsValue}]}], pagination:{totalPages, currentPage, isLastPage}}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (all 20 teams usually fit on page 1). | |
| locale | No | Label language. | en-GB |
| category | No | Stat category (General or Goalkeeping; others 400). | General |
| seasonId | Yes | SDP season id (from seriea_seasons). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the return structure (teams, stats, pagination), auth requirement (none), and the category limitation. It does not contradict annotations and gives a clear picture of output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: the first sentence covers purpose and content, the second explains category behavior, and the third provides return format and auth. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return structure including nested fields and pagination, plus auth and category restrictions. This is sufficient for an agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for all four parameters (100% coverage), so the description adds little beyond a cross-reference to the player category rule. This meets the high-coverage baseline without adding significant new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description precisely states the tool's function: a 'Team stat leaderboard for a season' with all 20 teams and full Opta stats. This clearly distinguishes it from siblings like seriea_standings, seriea_teams, and seriea_players, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for a season, requires seasonId (from seriea_seasons), and the category rule is explained. It does not explicitly name alternatives or say 'when not to use', but the tool name and content make the use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_draftBRead-onlyIdempotent
One draft's configuration: type, rounds, slot order and status.
Returns: {draft_id, league_id, season, status, type, settings:{rounds, teams, pick_timer}, draft_order, slot_to_roster_id, start_time, last_picked}
Example: A draft's settings {"draft_id": "289646328504385537"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | Draft id (from sleeper_league_drafts). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds value by stating 'Auth: none needed' and listing the exact return structure, but it does not disclose any other behavioral traits (e.g., behavior on missing draft_id, pagination, or rate limits). This is adequate for a simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a purpose line, a returns list, a short example, and an auth note. There is no fluff, and the most important information is front-loaded. The example label ('Example: A draft's settings') is slightly ambiguous because it shows the request parameter rather than the returned settings, but it is still reasonably clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, read-only annotations), the description covers the essential points: what the tool does, what it returns, an example, and authentication requirements. It could be improved by noting that the draft_id should be obtained from a prior call, but the schema already hints at this. Overall, it is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that draft_id comes from sleeper_league_drafts and is part of the URL path. The description adds little beyond an example value, so it does not meaningfully compensate or expand beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'One draft's configuration' and enumerates the fields included, making it distinct from sibling tools like sleeper_league_drafts (which lists drafts) and sleeper_draft_picks (which fetches picks). However, it lacks an explicit verb such as 'Get' or 'Retrieve', relying on the tool name and return section to convey the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention exclusions. The only contextual hint is in the schema ('from sleeper_league_drafts'), which hints at a prerequisite but is not part of the description itself. The example shows a request but no comparative usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_draft_picksARead-onlyIdempotent
Every pick in a draft, in order, with the player taken and who took them.
Returns: [{pick_no, round, draft_slot, roster_id, picked_by, player_id, is_keeper, metadata:{first_name, last_name, position, team}}] — metadata carries the player's NAME, so you don't need the 15 MB player file
Example: All picks in a draft {"draft_id": "289646328504385537"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | Draft id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is clear. The description adds valuable behavioral context beyond the annotations: it lists the exact return fields, notes that metadata carries player names (eliminating the need for a large player file), and explicitly states auth is not needed. This is more than what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: purpose, return structure, example, and auth. Every line adds distinct value with no redundancy. It is front-loaded with the core purpose and avoids unnecessary detail, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the essentials: what it returns, the input needed, and that no auth is required. With no output schema, the explicit return structure is helpful. It doesn't mention error scenarios or how to obtain draft_id, but those are minor gaps; the description is largely complete for its complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers draft_id fully (required, part of URL path), so baseline is 3. The description adds a concrete example value and clarifies that metadata carries player names, but this is more about return behavior than parameter semantics. The added value over the schema is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns every pick in a draft in order, with player and drafter info. This distinguishes it from sibling tools like sleeper_traded_picks (which covers traded picks) and sleeper_draft (draft details), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this to get all picks in a specific draft. It includes a concrete example of the required draft_id, showing how to invoke it. However, it does not explicitly mention when not to use it or point to alternatives like sleeper_traded_picks, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_leagueARead-onlyIdempotent
League configuration: scoring rules, roster slots, playoff format, waiver settings and status.
Returns: {league_id, name, season, season_type, status, sport, total_rosters, roster_positions:[…], scoring_settings:{…}, settings:{playoff_week_start, waiver_type, …}, draft_id, previous_league_id, bracket_id}
Example: Sleeper's public example league {"league_id": "289646328504385536"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | League id (from the Sleeper app URL, or sleeper_user_leagues). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the annotations by showing the full response schema (e.g., league_id, scoring_settings, settings fields), providing an example league_id, and noting that no authentication is needed. This helps set expectations for the tool's behavior without contradicting the readOnlyHint or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, a 'Returns' section, an example, and an auth note. It is information-dense without being unnecessarily verbose, though the return schema block is somewhat long. Overall, it is concise and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description effectively compensates by providing a detailed return structure and an example, which is sufficient for understanding what the tool returns. It could be even more complete with notes on error handling or edge cases, but it is largely complete for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a thorough description of the single parameter, league_id, including where to find it. The tool description adds an example value but no further semantic detail. Since schema_description_coverage is 100%, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly outlines what the tool does by listing the league configuration aspects it returns (scoring rules, roster slots, playoff format, etc.) and provides a detailed return structure. This distinguishes it from sibling tools like sleeper_league_rosters, though it lacks an explicit verb like 'get' or 'fetch'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. Given the large number of Sleeper sibling tools, mentioning that this is for league configuration specifically and using others for rosters or users would have been helpful. The usage is implied by the return fields but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_league_draftsARead-onlyIdempotent
The drafts belonging to a league (a dynasty league has one per season).
Returns: [{draft_id, league_id, season, status, type:'snake'|'auction'|'linear', settings:{rounds, teams}, draft_order:{user_id: slot}, start_time}]
Example: Drafts for the example league {"league_id": "289646328504385536"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds valuable context by disclosing the exact return shape, the fact that no auth is needed, and the one-per-season nuance for dynasty leagues. This goes beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense: a clear purpose, a compact return specification, a minimal example, and an auth note. Every sentence earns its place, and key details are front-loaded. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with a single parameter and no output schema, the description is highly complete. It provides the return structure, an example call, auth requirements, and domain-specific context about dynasty leagues. The agent can invoke the tool correctly and interpret results without needing additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, league_id, is fully described in the schema with 'League id. Required — part of the URL path.' The description adds a concrete example value and explains it is the league whose drafts are returned, but does not add significant semantic detail beyond the schema. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool retrieves the drafts belonging to a league, with the return format giving exact fields such as draft_id, league_id, season, and type. It distinguishes from sibling tools like sleeper_draft and sleeper_draft_picks by focusing on the collection of drafts for a league, and the dynasty note adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need the list of drafts for a given league, and the dynasty league note clarifies when to expect one per season. It does not explicitly mention alternative tools, but the context and example provide clear when-to-use guidance. No exclusions or when-not-to-use cases are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_league_rostersARead-onlyIdempotent
Every roster in a league: the player ids each manager holds, their starters, and season record.
Returns: [{roster_id, owner_id, league_id, players:[player_id], starters:[player_id], reserve:[…], taxi:[…], settings:{wins, losses, ties, fpts, fpts_against, waiver_position}}] — join owner_id to sleeper_league_users.user_id for a human name
Example: All rosters in the example league {"league_id": "289646328504385536"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the description need not repeat those. It adds value by stating 'Auth: none needed' and including the exact return structure and a join hint, which are beyond what annotations provide. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line summary, a return format, an example, and auth note. No superfluous words. Information is front-loaded, and the example is concrete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no output schema), the description is complete: it outlines the return fields, provides an example call, and mentions authentication. It also gives a useful join hint for interpreting owner_id. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, league_id, is fully described in the schema as 'League id. Required — part of the URL path.' The description adds an example value but does not significantly enhance the semantic meaning beyond the schema. With 100% schema coverage, baseline is 3, and the example is a minor bonus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every roster in a league, including player IDs, starters, and season record. It distinguishes from sibling tools like sleeper_league (league info) and sleeper_league_users (user info) by specifying its focus on rosters. The verb 'get' is implied but the resource and scope are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it returns rosters for a league, but it does not explicitly mention when to use this tool over siblings like sleeper_matchups or sleeper_league_users. No exclusionary or alternative guidance is provided, but the purpose is clear enough for an agent to infer appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_league_usersARead-onlyIdempotent
The people in a league — display names and team names, keyed by user_id.
Returns: [{user_id, display_name, avatar, is_owner, metadata:{team_name}}] — the ONLY place a human name lives; rosters carry owner_id, not names
Example: Managers in the example league {"league_id": "289646328504385536"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. Description adds the return shape, the keying by user_id, and the data model uniqueness, which is useful context beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with a clear purpose, followed by a compact return type, example, and auth note. Every part adds value and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no output schema, and strong annotations, the description fully covers what the tool returns, how to call it, and its unique role in the data model. The example makes it actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already describes league_id as required and part of the URL path with 100% coverage. Description adds an example league_id but doesn't explain semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns league users with display names and team names, keyed by user_id. It also specifies the exact return format and explicitly distinguishes itself from rosters by noting this is the only place a human name lives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states this is the ONLY place a human name lives, contrasting with rosters that carry owner_id, not names. Also notes auth is none needed, so the agent knows it can be called without credentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_matchupsARead-onlyIdempotent
One week's matchups with each roster's points, starters and per-player scoring.
Returns: [{roster_id, matchup_id, points, custom_points, starters:[player_id], starters_points:[float], players:[player_id], players_points:{player_id: float}}] — rosters sharing a matchup_id played each other; there is no home/away
Example: Week 1 matchups {"league_id": "289646328504385536", "week": 1}
Auth: none needed.
Also answers this: espnfantasy_matchups, espnfantasy_matchup_score.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number (1-18). Required — part of the URL path. | |
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds meaningful context: the relationship between rosters sharing a matchup_id (no home/away), the return structure, and auth requirements, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly well-structured with return format, example, and auth, but the final 'Also answers this' line is vague and detracts from focus; it does not clearly earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only data retrieval, the description provides sufficient detail: return format, an example, auth note, and matchup semantics. The ambiguous ESPN cross-reference is the only weakness, but overall it is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both week and league_id. The description's example reinforces usage but does not add 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one week's matchups with roster points, starters, and per-player scoring. It is specific about the resource and content, though it lacks a direct verb form and the trailing cross-reference to ESPN tools adds ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for Sleeper league matchups and provides an example, but it does not explicitly state when to prefer this over alternatives. The 'Also answers this' line hints at covering similar ESPN tools but is ambiguous and does not give clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_playersARead-onlyIdempotent
THE player id → name table. Every other Sleeper tool speaks in player ids and nothing else; this is the only thing that resolves them. HUGE — read the caching note before calling it.
Returns: {player_id: {full_name, team, position, status}} — an OBJECT keyed by player id, not an array. team is null for a free agent, which is how you tell one.
CALL THIS AT MOST ONCE A DAY AND CACHE IT. Sleeper says so explicitly, and it is 14.6 MB before projection — 12,221 players including every retired and practice-squad name they have ever held. Projected here to four fields, it is still far too large to put in a model's context: resolve the handful of ids you actually care about and discard the rest.
VERIFIED live 2026-08-24: 12,221 players, 3,250 of them on an NFL team.
Example: The id → name table (large; cache it) {"sport": "nfl"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | Sport. One of: nfl, nba, lfl. | nfl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No contradiction with annotations (readOnlyHint=true, openWorldHint=true, idempotentHint=true). The description adds substantial behavior beyond the annotations: the 14.6 MB payload, 12,221 player count including retired/practice-squad names, the return-shape caveat (an OBJECT keyed by id, not an array), the null-team-free-agent semantics, and the daily call limit. This is rich contextual disclosure the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence is load-bearing — the size and caching warnings are operationally critical and clearly front-loaded. Purpose leads, followed by return shape, then warnings and example. The ALL-CAPS emphasis on caching is justified given the genuine risk of blowing model context. Slightly verbose but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional param and safety fully covered by annotations, the description fills the missing output-schema gap by explicitly detailing the return structure, null-team semantics, and the critical caching/frequency constraints. Combined with the verification data and example, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is 100% schema-covered (enum nfl/nba/lfl, default nfl). The description adds an example call ({"sport": "nfl"}) and NFL-context remarks but no new semantic information beyond what the schema already provides. With high schema coverage, baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'THE player id → name table. Every other Sleeper tool speaks in player ids and nothing else; this is the only thing that resolves them.' This unambiguously identifies the tool's function and distinguishes it from the many sibling sleeper_* tools that reference players by id. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage direction: it is the resolver for all other Sleeper tools' player ids, and it gives hard operational constraints — 'CALL THIS AT MOST ONCE A DAY AND CACHE IT' and 'resolve the handful of ids you actually care about and discard the rest.' It does not name a specific alternative tool, but it frames itself as unique within the Sleeper family, which effectively differentiates it. Exclusions are implied rather than naming explicit alternatives, keeping this at a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_playoff_bracketARead-onlyIdempotent
The playoff bracket — who plays whom in each round, and who advanced.
Returns: [{r, m, t1, t2, w, l, t1_from, t2_from}] — TERSE keys: r=round, m=match id, t1/t2=roster ids, w=winner, l=loser, *_from=which earlier match fed this slot
Example: Championship bracket {"league_id": "289646328504385536", "bracket": "winners_bracket"}
Auth: none needed.
Also answers this: espnfantasy_matchups, espnfantasy_matchup_score.
| Name | Required | Description | Default |
|---|---|---|---|
| bracket | No | Championship bracket or consolation. One of: winners_bracket, losers_bracket. | winners_bracket |
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds value by disclosing the exact return format ({r, m, t1, t2, w, l, t1_from, t2_from}) and explaining the meaning of each key. It also notes 'Auth: none needed,' which is a practical behavioral detail 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly efficient, with a clear purpose line, a compact return format spec, and an example. However, the final line 'Also answers this: espnfantasy_matchups, espnfantasy_matchup_score.' is cryptic and does not earn its place; it is likely confusing to an agent and reduces overall clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and full schema coverage, the description is fairly complete. It provides the return format, which compensates for the lack of an output schema, and includes an example and auth note. It does not mention error cases (e.g., no playoff bracket available), but for a simple read-only tool this is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description gives an example bracket value ('winners_bracket') but does not add meaningful semantic detail beyond the schema. The league_id parameter is described in the schema as 'part of the URL path,' and the description does not elaborate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'The playoff bracket — who plays whom in each round, and who advanced.' This is a specific verb+resource with a clear scope. It also distinguishes itself from siblings like sleeper_matchups by focusing on the playoff bracket specifically, and the 'Also answers this' line hints at its relationship to fantasy matchups tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example call and notes that no auth is needed, giving basic usage context. However, it does not explicitly state when to use this tool over alternatives like sleeper_matchups or espnfantasy_matchups. The 'Also answers this' line is ambiguous and does not clearly guide tool selection. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_stateARead-onlyIdempotent
Current NFL state — season, week, and whether scoring has started. Call this to resolve 'this week' instead of guessing.
Returns: {season, season_type:'pre'|'regular'|'post', week, leg, display_week, season_start_date, previous_season, league_season, season_has_scores}
Example: Where the NFL season is up to {"sport": "nfl"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | Sport. Fantasy football (nfl) is the live one. | nfl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds value by disclosing the exact return structure (list of fields) and stating 'Auth: none needed,' which is useful context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence overview, a usage tip, a return-field list, an example, and an auth note. Every element earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description fully documents the return fields and provides an example. It also covers auth and usage context. The only minor gap is that the description says 'NFL state' while the parameter allows other sports, leaving slight ambiguity about non-NFL usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the single 'sport' parameter with an enum and a note about NFL being the live one. The description adds an example but no further parameter semantics. Since schema coverage is 100%, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving current NFL state including season, week, and scoring status. It also provides a specific usage directive ('Call this to resolve 'this week' instead of guessing'), which distinguishes it from sibling tools that focus on user/league data. The example further grounds the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool (to resolve 'this week') and frames it as a substitute for guessing. It does not mention alternatives or exclusions, but the guidance is clear and sufficient for a simple state-retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_traded_picksARead-onlyIdempotent
Draft picks that have changed hands — who owns which future pick (dynasty leagues).
Returns: [{season, round, roster_id, previous_owner_id, owner_id}] — roster_id is the pick's ORIGINAL owner; owner_id holds it now
Example: Traded picks in the example league {"league_id": "289646328504385536"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable behavioral details: the exact return structure with field semantics ('roster_id is the pick's ORIGINAL owner; owner_id holds it now') and 'Auth: none needed.' This goes beyond the annotation baseline, so it earns a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with clear sections for purpose, return format, example, and auth. The example request is helpful but presented as a single-line JSON block that could be slightly clearer. Overall, it is efficient and front-loaded, earning a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read endpoint, the description is complete. It explains the return fields and their meanings, notes that no auth is needed, and provides an example. Since there is no output schema, the description effectively fills that gap, making it fully sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for the single parameter league_id with the description 'League id. Required — part of the URL path.' The tool description adds no further semantic detail about the parameter beyond an example request, so it remains at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Draft picks that have changed hands — who owns which future pick (dynasty leagues).' It specifies the exact resource (traded draft picks) and scope (dynasty leagues), and the 'Returns:' line further clarifies the output structure. This distinguishes it from sibling tools like sleeper_draft_picks by focusing on traded picks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when needing ownership of traded future picks in dynasty leagues. However, it does not explicitly mention alternatives or when not to use it (e.g., for all draft picks use sleeper_draft_picks). Since context is clear but exclusions are absent, it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_transactionsARead-onlyIdempotent
Adds, drops, waiver claims and trades for one week.
Returns: [{transaction_id, type:'free_agent'|'waiver'|'trade', status, roster_ids:[int], adds:{player_id: roster_id}, drops:{player_id: roster_id}, draft_picks:[…], settings:{waiver_bid}, created}]
Example: Week 1 transactions {"league_id": "289646328504385536", "week": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. NOTE: returns the whole season's transactions in some leagues, not just this week. Required — part of the URL path. | |
| league_id | Yes | League id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description does not contradict them. It adds useful context by noting 'Auth: none needed' and providing the return structure, which is helpful given there is no output schema. The added value is modest but above baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The return format, example, and auth note each serve a distinct informative role without redundancy. It is appropriately concise for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no output schema, the description covers the essential aspects: what it returns, the return structure, an example invocation, and auth requirements. However, it lacks explicit usage guidance and the week caveat ('returns whole season in some leagues') resides only in the schema, not the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both league_id and week described in the schema. The description provides an example call but adds no new parameter-level meaning beyond the schema. The baseline of 3 applies since the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'Adds, drops, waiver claims and trades for one week,' using a specific verb-like enumeration and scope. This distinctly differentiates it from sibling tools like sleeper_matchups or sleeper_traded_picks. The return format further clarifies the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus other Sleeper tools, nor any exclusions. The example and description imply it is for fetching weekly transactions, but no alternatives are mentioned, such as directing users to sleeper_traded_picks for traded picks specifically.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_trending_playersARead-onlyIdempotent
Players being added or dropped most across all of Sleeper — the waiver-wire signal, without downloading the 15 MB player file.
Returns: [{player_id, count}] (top-level array) — count is how many leagues made the move. Resolve player_id via a roster or Sleeper's player file.
Example: Most-added players in the last 24h {"sport": "nfl", "add_or_drop": "add", "limit": 25}
Auth: none needed.
Also answers this: espnfantasy_player_info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many players. | |
| sport | No | Sport. | nfl |
| add_or_drop | No | 'add' for most-added, 'drop' for most-dropped. | add |
| lookback_hours | No | Window in hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint, so the bar is lower. The description adds useful behavioral context: return format (top-level array), semantics of 'count' (how many leagues made the move), need to resolve player_id via a roster or player file, and that no auth is required. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and well-structured with clear sections: purpose, return format, example, auth. However, the final line 'Also answers this: espnfantasy_player_info.' is confusing and seems out of place, slightly detracting from clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the essential context: return format, count semantics, player_id resolution, authentication, and an example. It does not mention pagination or limit behavior, but the schema covers parameters. The odd cross-reference line slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all four parameters (limit, sport, add_or_drop, lookback_hours). The description's example shows a typical call but adds no additional meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Players being added or dropped most across all of Sleeper'—a specific verb+resource with scope ('across all of Sleeper'). It distinguishes itself from the player file download and sibling Sleeper tools by focusing on trending/waiver-wire signals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an example and implies usage as a waiver-wire signal ('without downloading the 15 MB player file'), but it does not explicitly state when to use this tool over other Sleeper tools or when not to use it. The reference to 'esPNfantasy_player_info' is ambiguous and does not serve as a clear alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_userARead-onlyIdempotent
Look up a Sleeper user by username (or user id) — the first step to finding someone's leagues.
Returns: {user_id, username, display_name, avatar, is_bot} — user_id is what sleeper_user_leagues needs
Example: Resolve a username to a user_id {"username_or_id": "sleeperuser"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| username_or_id | Yes | Sleeper username, or a numeric user_id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it specifies the exact return fields ({user_id, username, display_name, avatar, is_bot}), states that no auth is needed, and clarifies the distinction between username and user_id input. It doesn't mention error cases or rate limits, but for a simple lookup tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, return values, example, and auth in four short lines. Every sentence earns its place, and the example is directly useful. No fluff or redundant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 parameter, no output schema), the description provides everything needed: input format, return fields, and downstream usage. It even tells the agent what to do with the result. Annotations cover the safety dimensions, so no additional behavioral details are necessary for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already explains that username_or_id is 'Sleeper username, or a numeric user_id... part of the URL path'. The description's example and mention of 'username (or user id)' add little beyond the schema. It does reinforce the dual nature of the parameter, but baseline 3 is appropriate since the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Look up a Sleeper user by username (or user id)'. It also positions it as 'the first step to finding someone's leagues', which differentiates it from sibling tools like sleeper_user_leagues and sleeper_league. This is a specific verb+resource with a defined scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool: it's the first step to finding leagues, and it states that the returned user_id is what 'sleeper_user_leagues needs'. This provides clear contextual guidance and a next step, effectively telling the agent when and how to chain this tool with others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleeper_user_leaguesARead-onlyIdempotent
Every league a user is in for one sport and season — how you get a league_id from a username.
Returns: [{league_id, name, season, status, sport, total_rosters, scoring_settings, roster_positions, settings, draft_id, previous_league_id}] (top-level array)
Example: A user's 2025 NFL leagues {"user_id": "483459259485384704", "sport": "nfl", "season": "2025"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | Sport. | nfl |
| season | Yes | Season year, e.g. '2025'. Required — part of the URL path. | |
| user_id | Yes | Numeric user_id from sleeper_user (NOT the username). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and openWorld hints. The description adds 'Auth: none needed' and explicitly shows the return array fields, contributing useful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, including a returns list and a concrete example. The only minor waste is the misleading 'from a username' phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool without an output schema, the description covers the key return fields, auth, and an example. It is complete enough to invoke correctly, though it could clarify the source of user_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with useful descriptions, so the baseline is 3. The description's example demonstrates realistic values but doesn't add deeper parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists all leagues for a user filtered by sport and season, with the specific use case of deriving a league_id. However, the phrase 'from a username' contradicts the actual parameter which requires a numeric user_id, per the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear implied use case: 'how you get a league_id from a user.' It does not explicitly mention alternatives like sleeper_league or sleeper_user, nor any exclusions, so the guidance is sufficient but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_fixtureARead-onlyIdempotent
One fixture. The include you choose decides whether you get lineups, events and statistics.
Returns: {data:{id, name, starting_at, result_info, participants:[…], scores:[…], events:[{type_id, minute, player_name, related_player_name, result}], lineups:[…], statistics:[…]}} — SHAPE FROM VENDOR DOCS. Events use NUMERIC type_ids, not names — resolve them via sportmonks_types.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A fixture with events {"id": 18535517, "include": "participants;scores;events"}
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Fixture id. Required — part of the URL path. | |
| include | No | e.g. 'participants;scores;events;lineups.player;statistics'. Nesting depth is capped on the free tier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent/open-world annotations, the description discloses that the return shape is from vendor docs and unverified, that event type_ids are numeric and require resolution via sportmonks_types, that include controls response composition, and that authentication requires a SPORTMONKS_TOKEN. These are valuable caveats for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with 'One fixture' and every subsequent element—return shape, vendor caveat, example, auth note—earns its place. It is dense but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers the expected response shape, the unverified vendor-doc status, numeric type_id resolution via sportmonks_types, an example, and auth requirements. This is sufficient context for an agent to invoke the tool with appropriate expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully documents both parameters (100% coverage), so baseline is 3. The description adds meaning by explaining that 'include' determines whether lineups, events, and statistics are present, and by giving a concrete example include string. This elevates understanding beyond the schema's example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a single fixture ('One fixture') and explains that the include parameter controls whether lineups, events, and statistics are returned. This distinguishes it from sibling tools like sportmonks_fixtures_by_date, which fetches multiple fixtures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that this is for a single fixture lookup with include-driven response richness. However, it does not explicitly mention alternatives like sportmonks_fixtures_by_date or when to prefer other sportmonks tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_fixtures_by_dateARead-onlyIdempotent
Fixtures on one date. Add include=participants;scores or you will get ids without teams or a score.
Returns: {data:[{id, sport_id, league_id, season_id, name:'Home vs Away', starting_at, result_info, state_id, participants:[…only if included…], scores:[{score:{goals, participant}, description:'CURRENT'|'1ST_HALF'|…}]}], pagination} — SHAPE FROM VENDOR DOCS. scores is a LIST of period scores; pick description == 'CURRENT' for the live/final figure.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A date's fixtures with teams and scores {"date": "2024-08-17", "include": "participants;scores"}
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD. Required — part of the URL path. | |
| include | No | e.g. 'participants;scores;league;venue'. WITHOUT THIS the response has no team names and no score. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, but the description adds substantial context: the exact response shape, the behavior of the `include` parameter (without it, no teams/scores), the structure of `scores` (list of period scores requiring selection of CURRENT), the authentication requirement, and a clear warning that the shape is unverified from vendor docs. This goes well beyond the structured hints and provides critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than the ideal one-liner but every sentence serves a purpose: purpose, include warning, response shape, caveat, example, and auth. It is front-loaded with the core purpose and structured with line breaks for readability. The caveat and shape details add necessary length for a tool with no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values — and it does so thoroughly, including the exact data structure, how to interpret `scores`, the unverified-shape warning, an example call, and auth requirements. The pagination field is mentioned, and the tool's simplicity (one date, three params) means this is comprehensive 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters, so the baseline is 3. The description adds value by warning that omitting `include` results in IDs only, and by explaining the nested `scores` structure and how to extract the live/final score. It reinforces the meaning of `include` and `date` with a concrete example. The `per_page` parameter is not further elaborated, but the schema already describes it as 'Page size.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Fixtures on one date,' which clearly states the tool's function: retrieving sports fixtures for a single date. It distinguishes itself from sibling tools like sportmonks_fixture (likely a single fixture) and sportmonks_livescores by specifying the date-scoped query. The additional note about the `include` parameter clarifies what the tool returns by default.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage instructions: it tells the user to add `include=participants;scores` to avoid getting bare IDs, and includes a concrete example. However, it does not explicitly mention when to prefer this tool over alternatives like `sportmonks_fixture` or `sportmonks_livescores`, so it lacks explicit exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_leaguesARead-onlyIdempotent
Leagues your plan can see. On the free tier this is the Danish Superliga and Scottish Premiership.
Returns: {data:[{id, sport_id, country_id, name, active, short_code, image_path, type, sub_type, last_played_at}], pagination:{count, per_page, current_page, next_page, has_more}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Leagues on your plan
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| include | No | Relations to expand, e.g. 'country;currentSeason'. Semicolon-separated; dots nest. | |
| per_page | No | Page size (max 50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description adds critical caveats: the return shape is from vendor docs and unverified, and it notes the auth requirement (SPORTMONKS_TOKEN). This discloses uncertainty and prerequisites that are not present in the annotations, providing meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line purpose, a structured return shape block, a caveat note, an example, and an auth line. It is front-loaded and each element carries useful information, though the 'Example: Leagues on your plan' line is somewhat redundant with the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed return shape including pagination fields, which is essential for an agent. It also includes a reliability caveat, auth note, and free-tier example. The field names are self-explanatory, so missing field-level explanations are acceptable, making this quite complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters (page, include, per_page) with examples and constraints (e.g., 'max 50'). The description does not add extra parameter-specific meaning, so with 100% schema coverage the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource being returned ('Leagues your plan can see') and provides concrete examples (Danish Superliga, Scottish Premiership on free tier). It distinguishes from sibling sportmonks tools by focusing specifically on league-level data, though it lacks an explicit verb like 'gets' or 'lists'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about plan-based visibility and a free-tier example, which implies when an agent might expect limited results. However, it does not explicitly state when to use this tool versus other sportmonks endpoints, nor does it name any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_livescoresARead-onlyIdempotent
Fixtures in progress now.
Returns: {data:[{id, name, starting_at, state_id, participants:[…], scores:[…], periods:[{minutes, seconds, ticking}]}]} — SHAPE FROM VENDOR DOCS. periods[].ticking is how you tell a running clock from a half-time pause.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: In-play now {"include": "participants;scores"}
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | e.g. 'participants;scores;events'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the return shape is from vendor docs and not verified against a live response, warning the agent to treat it as approximate. It also explains how to interpret periods[].ticking for running vs. paused clocks, and mentions the required auth token. These details provide practical behavioral context that annotations alone lack.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, return shape, caveat, example, and auth note. Each section serves a purpose, though it is slightly verbose with the unverified shape note and example. It is not bloated, but could be tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description provides the return structure, usage example, auth requirements, and a reliability caveat. This is comprehensive enough for an agent to invoke the tool and interpret the response correctly, even without prior knowledge of the Sportmonks API.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's example with include='participants;scores' demonstrates usage but does not add new semantic meaning beyond the schema's example ('participants;scores;events'). It is somewhat redundant, so no higher score is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Fixtures in progress now,' which clearly identifies it as a live/in-progress fixtures tool. This distinguishes it from siblings like sportmonks_fixtures_by_date and sportmonks_fixture by focusing on the current time. The purpose is unambiguous and action-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it (live/in-play fixtures) and includes a concrete usage example with the include parameter. However, it does not explicitly mention alternatives or when not to use this tool, such as needing fixtures for a specific date (use sportmonks_fixtures_by_date) or a single fixture (use sportmonks_fixture).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_playersARead-onlyIdempotent
Players, with season statistics when included.
Returns: {data:[{id, sport_id, country_id, nationality_id, position_id, name, common_name, firstname, lastname, display_name, date_of_birth, height, weight}], pagination} — SHAPE FROM VENDOR DOCS. Statistics arrive only via include=statistics.details, and each detail row is keyed by a numeric type_id.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Players on your plan
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| include | No | e.g. 'statistics.details;nationality;position'. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses that the response shape is unverified from vendor docs, that the provider key is not held, and that the field names should be treated as approximate. It also explains the statistics inclusion mechanism and numeric type_id. This is valuable behavioral context that goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but mostly relevant: it front-loads the purpose, then provides the return shape, a caveat about unverified data, an example, and auth info. The capitalized 'SHAPE FROM VENDOR DOCS' and 'Example: Players on your plan' add some noise, but overall each sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with three optional parameters and no output schema, the description covers the essential context: what data is returned, how to request statistics, the unverified nature of the response shape, and authentication needs. The pagination field in the return shape plus explicit parameter descriptions make this adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with descriptions, so the baseline is 3. The description adds extra meaning by explaining how the include parameter works ('statistics.details'), providing an example value, and noting the numeric type_id keying. This gives the agent a better mental model than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as players from SportMonks and notes the optional season statistics via include. Although it lacks an explicit verb like 'get' or 'list', the phrase 'Players, with season statistics when included' and the return shape make the purpose unambiguous. It distinguishes itself from sibling tools by naming SportMonks and the statistics capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it returns players and season statistics only when the include parameter is specified. It gives a concrete example of using the include parameter and notes authentication requirements. It does not explicitly mention alternative tools or exclusions, but the context is sufficient for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_standingsARead-onlyIdempotent
League table for a season.
Returns: {data:[{id, participant_id, position, points, result, sport_id, league_id, season_id, group_id, round_id, standing_rule_id, participant:{…only if included…}}]} — SHAPE FROM VENDOR DOCS. Without include=participant you get team IDS ONLY, which is the most common complaint about this endpoint.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A season's table with team names {"seasonId": 19686, "include": "participant"}
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | e.g. 'participant;details'. | |
| seasonId | Yes | Season id (from a league's currentSeason include). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several important behavioral traits beyond the readOnlyHint/idempotentHint annotations: the response shape is unverified and approximate, team names require the include=participant parameter, and authentication needs a user-provided SPORTMONKS_TOKEN. This is valuable context that helps the agent set expectations and avoid relying on unverified fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line summary, return shape, caveat, example, and auth note. It is somewhat long but each part serves a purpose; the unverified-shape warning is particularly important. Slightly verbose but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description provides a detailed return shape, flags its unverified nature, includes a practical example, and states auth requirements. This covers all essential aspects for an agent to invoke the tool and interpret results, making it comprehensively complete for a read-only standings endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes both parameters (100% coverage), the description adds meaningful usage context: a concrete example showing seasonId and include values, and a warning about the consequence of omitting include=participant. This goes beyond the schema's simple field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a league table for a season, including a detailed return shape and an example. However, it does not differentiate this tool from sibling standings tools (e.g., pl_standings, apisports_football_standings), so it lacks the sibling distinction needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternative standings tools. It does give parameter-level advice (e.g., without include=participant you only get team IDs), but that does not address tool selection. There is no mention of exclusions or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_teamsARead-onlyIdempotent
Clubs, by search or by season.
Returns: {data:[{id, sport_id, country_id, venue_id, name, short_code, image_path, founded, type}], pagination} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Teams on your plan
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| include | No | e.g. 'country;venue;players.player'. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, open-world, and idempotent, and the description adds valuable context beyond this: the need for a SPORTMONKS token, the unverified vendor-documented response shape, and the explicit warning to inspect the actual payload before relying on field names. This additional transparency about data reliability and authentication is genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it opens with a concise summary, then gives a sample return shape, a critical caveat about unverified documentation, and an auth note. The 'Example: Teams on your plan' line is cryptic and adds little, but overall the length is justified and the text is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description compensates by providing a detailed return shape, pagination info, authentication requirements, and a caveat about data reliability. This is fairly complete for a list/read-only tool. The main gap is the unexplained 'search or season' capability, which leaves the tool's full usage surface ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% parameter coverage with descriptions for page, include, and per_page, so a baseline of 3 applies. The description does not add meaningful parameter semantics—in fact, it introduces a 'search/season' concept not represented in the schema, which could mislead an agent into expecting parameters that do not exist. No additional value is provided beyond the schema's already minimal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as retrieving clubs/teams from Sportmonks, clearly distinguishing it from sibling tools like sportmonks_leagues or sportmonks_players. However, the phrase 'by search or by season' is vague and does not specify what search terms or season identifiers are accepted, leaving some ambiguity about the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It mentions two modes ('search' and 'season') but does not explain how they differ or when to prefer one over the other, and there is no mention of alternative tools or exclusion criteria. The only practical guidance is the auth requirement, which is operational rather than usage-oriented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportmonks_typesARead-onlyIdempotent
The type catalogue — resolves the numeric type_ids that appear all over events, statistics and standings details.
Returns: {data:[{id, name:'Goal'|'Yellow Card'|'Shots Total'|…, code, developer_name, model_type, stat_group}], pagination} — SHAPE FROM VENDOR DOCS. Without this, a fixture's events and a player's statistics.details are unreadable — they are numbers.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: The type catalogue {"per_page": 50}
Auth: needs your own key in SPORTMONKS_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. | |
| per_page | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior. The description adds essential context beyond this: the expected return shape, a caveat that the shape is from vendor docs and unverified, the auth requirement ('needs your own key in SPORTMONKS_TOKEN'), and a pagination example. These disclosures are valuable for setting agent expectations about accuracy and invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured, with a clear lead sentence, a return-shape block, a cautionary note, an example, and an auth instruction. Each section serves a distinct purpose (purpose, output, reliability, usage, credentials) and is front-loaded with the core purpose. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explicitly details the return structure ({data:[...], pagination}) with field names and examples. It explains why the tool is needed, provides usage context via the example, and includes a crucial caveat about data unreliability. For a simple 2-parameter lookup tool, this is highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters ('Page number.' and 'Page size.') with 100% coverage. The description adds only a minor example using per_page=50, which does not significantly enhance understanding beyond the schema. Thus the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'resolves the numeric type_ids that appear all over events, statistics and standings details.' It uses a specific verb ('resolves') and identifies the resource ('type catalogue'), distinguishing it from sibling sportmonks tools that handle fixtures, teams, players, or standings directly. The inclusion of example names ('Goal', 'Yellow Card', 'Shots Total') further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'Without this, a fixture's `events` and a player's `statistics.details` are unreadable — they are numbers.' This tells the agent to use this tool to decode numeric type IDs in specific data structures. It does not explicitly mention alternatives or when-not-to-use, but the context is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_bet_historyARead-onlyIdempotent
Your own bets at Sportsbet. THIS IS HOW A PLACEMENT IS CONFIRMED — placing answers 202 Accepted, so a bet is only really on once it appears here.
Returns: {betList:[…]} — the account's bets. VERIFIED live 2026-08-28.
THE KEY IS betList, NOT bets. Reading bets returns nothing and looks exactly like an empty account — which is a dangerous false negative when you are checking whether a placement landed.
THIS IS HOW A PLACEMENT IS CONFIRMED. sportsbet_place_bet answers 202 Accepted, which means taken for processing rather than on, so a bet is only really placed once it appears here. Match on the betId the placement returned, and check the STAKE AND THE PRICE, not merely that a bet exists.
filterType takes SETTLED and PENDING — both verified 2026-08-28 alongside limit and includeLegData. PENDING is what you want for reading back a bet you have just placed.
Rows carry betId, receipt, stake, price, placedAt, summary, and per-leg detail including externalClassId / externalMeetingId / externalOutcomeId — the racing external ids that placement itself does NOT use.
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many bets. | |
| channel | No | Client channel. `cxp` is what the website sends; leave it. | cxp |
| appToken | Yes | Sportsbet's app key — a short constant the web client sends on every /apigw call. Not a personal credential, but not published either; read it from the browser once. Collected by `sportsdata-mcp connect sportsbet`. | |
| dateType | No | Date window. ALL is what the site sends. | ALL |
| requestId | No | A fresh UUID per call, for Sportsbet's own tracing. Optional here; send a new one each time if you send one at all. | |
| sortField | No | Sort field. | DATE |
| sortOrder | No | Newest first. | DESC |
| customerId | Yes | Your own account number. It is also the `custId` claim inside the access token, so it is not extra authority — the gateway just wants it stated. Collected by `connect`. | |
| filterType | No | Which bets. SETTLED is verified; PENDING alone was rejected on probing and may need other parameters alongside it. | SETTLED |
| includeLegData | No | Include each bet's legs — needed to verify WHAT was bet, not just that something was. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by disclosing critical behavioral traps: the response key is `betList`, not `bets`, reading `bets` produces a dangerous false negative, and sportsbet_place_bet's 202 Accepted means processing rather than confirmation. It also documents verified behavior, row fields, and auth behavior, which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loaded with the most critical warning, but it is repetitive: 'THIS IS HOW A PLACEMENT IS CONFIRMED' appears twice, and the verified-date caveats add length. Every sentence contributes useful content, yet tighter editing would improve readability without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description properly explains the return shape ({betList:[…]}), key row fields, and the false-negative risk. All parameters are already covered by the schema (100%), and the description adds the behavioral caveats needed to use the tool correctly, including filter semantics, placement confirmation, and auth expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parameter guidance: `filterType` values are explained for the placement-readback use case, `includeLegData` is tied to verifying what was bet, and the returned fields give practical meaning to parameters like limit. It also clarifies that auth works without a key, enriching the `appToken`/`customerId` parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns the account's own bets ('Your own bets at Sportsbet') and emphasizes its role as the confirmation point for placements. The verb 'Returns' plus the explicit {betList:[…]} result makes the function unmistakable, and the placement-confirmation framing distinguishes it from other Sportsbet read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong contextual usage guidance is present: 'PENDING is what you want for reading back a bet you have just placed' and the repeated warning that a bet is only confirmed once it appears here. It does not explicitly name alternative tools to choose instead, but the placement-verification scenario is clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_bet_liveARead-onlyIdempotent
BetLive feed — events currently in-play and bettable live.
Returns: {events:[{eventId, name, classId, score, startTime}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| birType | No | Bet-in-running type filter. One of: BETLIVE. | |
| excludeNonLiveEvents | No | Return only live events. | |
| includePrimaryMarket | No | Inline each event's primary market + prices. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds meaningful behavioral context beyond those: no API key is required, a refresh token unlocks more data if set, and the return shape is disclosed. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, dense lines: purpose, return shape, and auth behavior. Each sentence earns its place, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an optional-parameter read-only feed, the description sufficiently covers purpose, output structure, and auth requirements. It could clarify what 'unlocks more' means or default filtering behavior, but nothing essential is missing given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are documented in the input schema with 100% coverage, so the description does not need to restate them. The description adds no extra parameter-level meaning, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line identifies a BetLive feed of events currently in-play and bettable live, which is a clear, specific resource scope. It distinguishes itself from historical or upcoming event tools, though it does not explicitly name a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this is the tool for Sportsbet's current live, bettable events, and the auth note adds practical context about when extra data becomes available. It stops short of explicit when-not-to-use guidance or naming alternative live-feed tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_class_couponARead-onlyIdempotent
Coupon (grouped markets) for a whole sport class.
Returns: {class:{classId, name}, competitions:[{competitionId, events:[{eventId, markets:[]}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| classId | Yes | Sport class id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds non-redundant context by showing the exact return skeleton and disclosing that no API key is required unless SPORTSBET_REFRESH_TOKEN is set. This goes beyond the annotations, though it does not mention pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one line for purpose, one for the return contract, and one for auth requirements. There is no filler or repetition; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential details for a one-parameter read-only call: return shape, auth behavior, and class-level scope. It does not explain how to discover classId or describe the contents of nested market objects, but given the simple input and annotations, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes classId as a required sport class id in the URL path. The description reinforces that the call targets a whole class but adds no additional parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a coupon (grouped markets) for a whole sport class, and the Returns line makes the output shape explicit. It lacks an explicit action verb like 'retrieves,' but it is unambiguous and distinguishable from generic sibling tools by its class-level scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need grouped markets across an entire sport class, and the auth note provides useful operational context (works without a key; token unlocks more). However, it does not name sibling alternatives or state when not to use this tool, so routing guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_cms_messagesARead-onlyIdempotent
Sitewide CMS messages (banners, notices).
Returns: {messages:[{id, type, text}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly, idempotent, and openWorld, and the description goes beyond those by explaining that no API key is required and that an optional SPORTSBET_REFRESH_TOKEN can unlock more data. It also specifies the response contract, which is valuable since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of three compact, purposeful segments: purpose, return shape, and authentication behavior. Every sentence adds useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, this is complete: it states what data is returned, its basic shape, and the authentication behavior. The annotations contribute safety and idempotency context, and no output schema exists, so the described return shape is especially important.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema confirms no properties, so detailed parameter documentation is unnecessary. The description's return shape adds some useful context but does not need to compensate for missing parameter meaning, giving the parameterless baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Sitewide CMS messages (banners, notices)' and states the return shape, making the operation obvious despite not using an explicit verb like 'list' or 'get'. The phrase 'sitewide messages' also distinguishes this from sibling CMS tools such as sportsbet_cms_page and sportsbet_cms_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied by naming the exact content type: sitewide CMS banners and notices. However, it does not explicitly describe when to choose this tool over related CMS siblings 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.
sportsbet_cms_pageARead-onlyIdempotent
CMS page block by competition id or page path (one of the two is required).
Returns: {page:{path, blocks:[{type, content}]}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| loggedIn | No | Return the logged-in variant. | |
| pagePath | No | CMS page path (use this OR competitionId). | |
| competitionId | No | Competition id (use this OR pagePath). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and open-world behavior. The description adds useful context beyond annotations: the expected return shape and the auth behavior, noting that a token is optional but unlocks more data. This is meaningful supplementary disclosure, though 'unlocks more' is somewhat vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then return shape, then auth. Each sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read operation with full schema coverage and read-only/idempotent annotations, the description covers the core invocation details, return shape, identifier requirement, and auth behavior. The main gap is that it doesn't clarify how the optional token changes the response or when to prefer related CMS tools, but this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well documented. The description adds the important constraint that one of competitionId or pagePath is required, which the schema does not explicitly encode. It also gives context for what the returned page object contains, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a CMS page block, retrievable by competition ID or page path. It also states that exactly one of these identifiers is required, making the operation specific. It doesn't explicitly distinguish this tool from similar siblings like sportsbet_cms_messages or sportsbet_page_content, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives such as sportsbet_page_content, sportsbet_cms_settings, or entain_cms_entries. The identifier requirement is implicit usage context, but there are no stated when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_cms_settingsARead-onlyIdempotent
Global CMS settings / feature flags for the app.
Returns: {settings:{}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is covered. The description adds meaningful behavior beyond annotations: auth works without a key, SPORTSBET_REFRESH_TOKEN can unlock more, and the top-level response is a settings object. It does not enumerate actual settings flags, but the added auth and return-shape context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose, return shape, and auth behavior are each stated in a single explicit line with no filler. The most important information, that this is global CMS settings, is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only settings fetch, the description is nearly complete: it covers what the tool returns, that it needs no key, and that a refresh token can expand results. The main gap is that it does not list the actual settings or feature flags included, and there is no output schema to fill that gap. However, given the simplicity of the tool, this is not a critical omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and an empty schema, so there is no parameter burden for the description to carry. The description appropriately frames the tool as global and unfiltered. The baseline for a zero-parameter tool is 4, and nothing here reduces that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the exact resource: global CMS settings and feature flags for the app, and even states the return shape as {settings:{}}. It is distinguishable from sibling CMS tools like sportsbet_cms_messages and sportsbet_cms_page because it names settings/feature flags. It lacks an explicit verb like 'Get' or 'Retrieve', which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this when global app settings or feature flags are needed. It also gives auth context by noting no key is required and the refresh token may unlock more. However, it never explicitly contrasts itself with sibling CMS tools or states 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.
sportsbet_competition_matchesARead-onlyIdempotent
Match-type events for a sport competition.
Returns: {events:[{eventId, name, startTime, score}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Sport competition id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and idempotent, and the description adds useful behavioral context beyond that: it states the auth requirements and that setting SPORTSBET_REFRESH_TOKEN unlocks more. The phrase 'unlocks more' is vague, but it still provides meaningful operational information an agent would not get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's purpose, followed by the return shape and auth note. Every line earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool, the description covers the essentials: what is returned and how authentication behaves. It could be stronger by explaining what 'unlocks more' means or listing alternative tools, but the provided details are sufficient for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already says competitionId is a required integer that is part of the URL path. The description does not add meaning beyond that, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'match-type events' for a sport competition and includes a concrete return shape. However, it lacks an explicit action verb like 'list' or 'get,' and it doesn't name sibling tools to differentiate itself, though 'match-type' does implicitly separate it from outright-style endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to choose this tool over alternatives such as sportsbet_competition_outrights or sportsbet_sport_competition. The usage context must be inferred entirely from the name and the word 'match-type,' so an agent gets little routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_competition_outrightsARead-onlyIdempotent
Outright (futures) events for a sport competition.
Returns: {events:[{eventId, name, markets:[{name, selections:[{name, price:{winPrice}}]}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Sport competition id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as read-only, idempotent, and open-world, and the description adds useful non-obvious behavior: auth works without a key, a refresh token unlocks more data, and the exact return structure is given. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose first, then return shape, then auth behavior. Every sentence earns its place and there is no filler or redundant schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description is largely complete: it states the data shape and auth requirements. It does not explain how to find a valid competitionId or detail pagination, but for such a simple interface this is a minor gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully described in the schema (integer, required, URL path component), so the description does not need to re-explain it. The return-shape text provides some indirect context on how the parameter is used but does not add meaningful semantics beyond the 100%-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as outright/futures events for a sport competition and gives the return shape, so an agent can tell it apart from match- or event-level tools. It lacks an explicit verb like 'Gets' or 'Lists', but the purpose is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided. The description does not mention sibling alternatives such as sportsbet_competition_matches or sportsbet_event_markets, and the 'Outright (futures)' wording only implies the use case rather than stating it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_event_commentaryARead-onlyIdempotent
Live score + text commentary for one or more sport events.
Returns: {events:[{eventId, score, commentary:[{time, text}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIds | Yes | Comma-separated sport event ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value beyond those by disclosing the return format and by explicitly stating that no API key is required, while a refresh token unlocks additional data. This is useful behavioral context beyond what the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, information-dense sentences. It front-loads the primary purpose, then provides the return contract and auth requirements with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is largely complete: it explains what is returned, the shape of that return, and authentication behavior. It does not explain where to source eventIds or mention relevant sibling tools, but neither is essential for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents eventIds as 'Comma-separated sport event ids,' so baseline is 3. The description adds 'one or more' and shows eventId in the return structure, which reinforces the parameter's meaning but does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: it provides 'Live score + text commentary' for sport events. It also gives the return shape, making the tool's purpose unmistakable. However, it does not explicitly distinguish itself from sibling commentary tools like pl_match_commentary or entitysport_match_commentary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no explicit guidance on when to choose it over alternatives. It does mention auth behavior, which is useful context, but it does not say when this tool is preferable to other commentary or event-score tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_event_marketsARead-onlyIdempotent
All markets + selections + live prices for one sport event.
Returns: {markets:[{marketId, name, selections:[{selectionId, name, price:{winPrice, winPriceNum, winPriceDen}}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sport event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context by specifying that prices are live, that the tool works without a key, and that an optional token unlocks more data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, followed by a practical return-shape snippet and an auth note. The return block earns its place because there is no output schema to document the response structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the description is nearly complete: it documents the return structure, notes the live-price behavior, and provides auth requirements. The only minor gap is that 'unlocks more' is vague about what additional data becomes available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and eventId is already described as the required sport event id and URL path component. The description references 'one sport event' but adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all markets, selections, and live prices for one sport event, which is a specific retrieval purpose. It is also distinguishable from sibling tools like sportsbet_event_results or sportsbet_event_status by naming exactly what data it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives such as sportsbet_competition_matches, sportsbet_event_status, or other betting-market tools. The auth note is useful but does not help an agent choose among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_event_resultsARead-onlyIdempotent
Results for a finished sport event (final score + settled markets).
Returns: {event:{eventId, finalScore}, markets:[{marketId, winningSelections:[]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sport event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond these: it specifies the response shape, restricts usage to finished events, and clarifies authentication requirements. This exceeds the minimum bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly packed with three useful pieces of information: purpose, return structure, and authentication behavior. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with no output schema, the description provides enough operational detail including return shape and auth expectations. It could be improved by noting what happens if the event is not finished or by naming related result tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents eventId. The description adds no parameter-level insight beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('finished sport event') and the payload (final score + settled markets). It is clear and distinguishable in intent from live/upcoming event tools, though it does not explicitly name any sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a finished sport event' implies it should be used only after an event has concluded, but there are no explicit when-to-use/when-not-to-use instructions or references to alternatives like sportsbet_event_markets or sportsbet_sport_resulted_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_event_statusARead-onlyIdempotent
Live status flags for a sport event (suspended, in-play, settled).
Returns: {eventId, status, inPlay, suspended}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sport event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, and idempotent. The description adds useful context beyond those hints: it specifies the exact return fields and explains authentication requirements, noting that a Sportsbet refresh token can unlock additional functionality without being required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose first, then return shape, then auth behavior. Every line provides distinct value, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers the essential call context: what it does, what it returns, and how authentication behaves. It does not document detailed field types or all possible status values, but the provided return object and examples are sufficient for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single required parameter, eventId, including its type and that it is part of the URL path. The description adds no additional meaning for this parameter, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning live status flags for a sport event, listing the key statuses (suspended, in-play, settled). It distinguishes the tool from sibling market/result/commentary tools through the explicit focus on status, though it does not use an explicit verb like 'get' or name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied: call this tool when you need the current status flags of a sportsbet event. However, the description does not explicitly state when to prefer this over related event tools, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_graphql_callARead-onlyIdempotent
Call any of Sportsbet's persisted GraphQL operations against www.sportsbet.com.au/apigw/sportsbook/graph by name + variables. Hashes are managed server-side; a PERSISTED_QUERY_NOT_FOUND error means the bundle drifted. Read sportsbet://graphql/operations for the op list + variable signatures.
Returns: (JSON object)
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| variables | No | Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the readOnly/openWorld/idempotent annotations: hashes are managed server-side, PERSISTED_QUERY_NOT_FOUND indicates bundle drift, and the token requirements are spelled out. There is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: operation target, hash/error behavior, return type, and auth. Each sentence carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic GraphQL tool with no output schema, the description covers how to discover valid operations, how to handle a specific error, what the return type is, and what authentication is needed. The remaining detail about individual variable shapes is correctly delegated to the referenced catalogue resource.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by pointing to the catalogue resource for valid operation names, noting that variable requirements depend on the operation, and explaining the error listing alternatives. This goes beyond the raw schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact action and resource: calling Sportsbet's persisted GraphQL operations at a specific endpoint by name and variables. This clearly separates it from domain-specific Sportsbet tools and the similar sibling entain_graphql_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to read sportsbet://graphql/operations for valid operation names and variable signatures, and warns that guessing returns an error with alternatives. Auth behavior is also covered. It doesn't explicitly say 'prefer this only when no dedicated Sportsbet tool exists', but the generic framing makes that clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_league_ladderARead-onlyIdempotent
League ladder / standings for a sport competition.
Returns: {ladder:[{position, teamName, played, won, lost, points}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Sport competition id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world behavior. The description adds a concrete return shape and auth requirements (works without a key; optional token unlocks more), which is useful context beyond the annotations, though 'unlocks more' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately short and front-loaded: purpose, return shape, and auth are each presented in compact labeled sections with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with strong annotations, the description covers purpose, output structure, and auth sufficiently. It could clarify how to discover competitionId or what the token unlocks, but nothing essential is missing for a basic call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is already fully documented in the schema ('Sport competition id. Required — part of the URL path'). The description adds no additional parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('League ladder / standings') and a concrete return shape, making the basic purpose clear. It does not explicitly differentiate from sibling standings/ladder tools, but the name plus description are unambiguous enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance or mention of alternatives. The description implies use when a competition ladder is needed, but it does not explain how this tool relates to the many sibling standings/ladder tools or when another tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_match_previewARead-onlyIdempotent
Editorial match preview (text + video) for one sport event.
Returns: {preview:{title, body, videoUrl}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventDate | Yes | Event date, YYYY-MM-DD. | |
| eventName | Yes | Event / match name. | |
| sportsClass | Yes | Sport class name. | |
| sportsCompetitionName | Yes | Competition name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior. The description adds a concrete return envelope ({preview:{itle, body, videoUrl}) and an auth nuance: no key required, with SPORTSBET_REFRESH_TOKEN unlocking more. That is useful behavioral context, though 'more' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences cover purpose, return shape, and auth, with the central purpose front-loaded. Every sentence contributes information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only preview tool with four clearly described parameters and annotations, the description includes the return shape and auth requirements. It would be slightly more complete if it explained what the optional token unlocks or noted the behavior when no preview exists, but nothing required to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have schema descriptions (100% coverage), so the baseline applies; the description does not restate parameter formats or value semantics. The Returns line hints at what the parameters are used for but adds no detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence specifies an action (preview), resource (one sport event), and content type (editorial text + video). 'Match' clearly separates it from racing-focused siblings like sportsbet_race_preview, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is relevant—when editorial preview content for a match is needed—but it does not state alternatives, exclusions, or when to prefer another sportsbet content tool such as event_commentary or sports_card. This is adequate implied guidance, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_multiple_racecardsARead-onlyIdempotent
Racecards for several races in one call (batch by event ids).
Returns: {racecards:[{event:{}, markets:[]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIds | Yes | Comma-separated racing event ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, and idempotent. The description adds useful behavioral detail beyond that: the response envelope structure and the auth nuance that a key is not required but a SPORTSBET_REFRESH_TOKEN unlocks more. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact lines cover the operation, return shape, and auth behavior. Every sentence earns its place, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a single-parameter, low-complexity tool with no output schema, so the description's inclusion of the return shape and auth requirements is sufficient for basic invocation. It lacks details like maximum batch size or event ID format clarification, but nothing critical is missing for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description references event IDs but adds no deeper parameter semantics. The schema's 'Comma-separated racing event ids' phrasing is slightly ambiguous against the declared array type, and the tool description does not resolve it, but it also does not need to compensate heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a batch racecard retrieval operation: 'Racecards for several races in one call (batch by event ids).' It also states the return shape, which distinguishes it from single-racecard siblings like sportsbet_racecard. An agent can confidently know what this tool does and how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batching use-case is conveyed explicitly ('several races in one call'), so an agent knows it is meant for multiple event IDs. However, it does not name alternatives or state when not to use it, such as when only a single racecard is needed or when richer context is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_page_contentARead-onlyIdempotent
Homepage tab content (sports or racing landing modules).
Returns: {modules:[{type, items:[]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | Yes | Homepage tab: sports or racing. Required — part of the URL path. | |
| loggedIn | No | Return the logged-in variant. | |
| popularsrms | No | Include popular SRM modules. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds useful context beyond those annotations: it works without a key, an optional SPORTSBET_REFRESH_TOKEN unlocks more, and it gives the return module shape. The phrase 'unlocks more' is vague, but for a read-only endpoint the added auth and output context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, well-labeled sections: core purpose, return shape, and auth posture. It is front-loaded and has no filler, so every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full parameter documentation and read-only/idempotent annotations, the description is sufficiently complete for selection and invocation: it names the tab scope, return structure, and auth requirements. It could clarify what 'unlocks more' means or how loggedIn interacts with the token, but these are minor gaps rather than blocking omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are already documented in the input schema with 100% coverage, so the description does not need to restate them. The description adds little about the boolean flags beyond what the schema already provides, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: homepage tab content for sports or racing landing modules, and states the output shape. It lacks an explicit verb like 'Get' or 'Fetch' and does not name sibling tools to differentiate from, but the homepage-tab scope is specific enough to distinguish it from other sportsbet content tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when homepage sports or racing landing modules are needed—and the auth note shows it can be called without a key. However, it gives no explicit guidance about when not to use it or which sibling tools (e.g., sportsbet_cms_page, sportsbet_nav_hierarchy) might be better suited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_popular_promotionsARead-onlyIdempotent
Trending / popular promotions for a promo provider + client.
Returns: {promotions:[{id, title, url}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max promotions to return. | |
| clientId | Yes | Client id for the promo model. Required — part of the URL path. | |
| loggedIn | No | Return logged-in promotions instead of anonymous. | |
| provider | Yes | Promotions provider key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior. The description adds meaningful context beyond annotations by specifying the exact return shape and disclosing auth behavior: it works without a key, and a refresh token expands results. This is useful and does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each serving a distinct purpose: stating the resource, giving the return format, and explaining auth requirements. There is no filler, redundancy, or unnecessary repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only promotions endpoint, the description covers the essential call context: target resource, provider/client scoping, return shape, and auth prerequisites. Valid provider/client values are not enumerated, but the schema already notes they are URL path components, and openWorldHint suggests the value space is open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully documented in the schema, so the baseline is 3. The description only reinforces that provider and client are the scoping pair and adds no extra syntax, defaults, or domain-specific parameter behavior beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource (popular/trending promotions), the scoping context (provider + client), and the return payload shape. It is clear enough to identify what the tool does, though the first sentence is a noun phrase without an explicit verb and it does not explicitly distinguish itself from sibling promotions tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need popular promotions for a specific promo provider and client. It provides the auth prerequisite, but it does not explicitly say when to use this tool instead of sibling promotions endpoints like betr_promotions or pointsbet_promotions, nor does it give any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_price_slipARead-onlyIdempotent
PRICE A BET SLIP — the authoritative, current price for selections you are about to back. Call this IMMEDIATELY before sportsbet_place_bet: placement takes a price you assert, not a quote id, so this is the only way to place at a real number.
Returns: {betBuilds:[{betNo, enhancedOdds:[{outcome, priceDecimal, priceNum, priceDen, legType}], betCombinations:[{betType, betTypeName, betMinStake, betNoOfLines, cashoutAvailable, betEnhancedPrice}], vouchers:[]}]} — VERIFIED live 2026-08-27.
THIS IS THE AUTHORITATIVE PRICE, and it is the call to make immediately before placing. sportsbet_place_bet does NOT take a quote id: it takes a price you assert, so the only way to place at a real price is to read it here first and send THAT number. A price remembered from thirty seconds ago is not a price.
betMinStake comes back per combination and was 0.01 on the verified slip — the smallest possible test bet is a cent, not a dollar.
Prices appear twice and in two forms: priceDecimal on each enhanced odd, and priceNum/priceDen which is what placement wants. Carry the fraction across unchanged rather than re-deriving it from the decimal, which rounds.
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Client channel. `cxp` is what the website sends; leave it. | cxp |
| appToken | Yes | Sportsbet's app key — a short constant the web client sends on every /apigw call. Not a personal credential, but not published either; read it from the browser once. Collected by `sportsdata-mcp connect sportsbet`. | |
| betItems | Yes | The slip: [{"betNo": 1, "legs": [{...}]}]. Leg shape matches sportsbet_place_bet — see its description for the parts/externalId structure. | |
| requestId | No | A fresh UUID per call, for Sportsbet's own tracing. Optional here; send a new one each time if you send one at all. | |
| apiVersion | No | Pricing is served at 2.0.0 (placement is 3.0.0). Understating it silently gets you an older schema. | 2.0.0 |
| customerId | Yes | Your own account number. It is also the `custId` claim inside the access token, so it is not extra authority — the gateway just wants it stated. Collected by `connect`. | |
| includeMBS | No | Include minimum bet size information. | |
| outcomeGroups | No | REQUIRED even when empty — omitting it is refused 'Field is required: outcomeGroups'. The declared default now actually reaches the wire (see registry._value_for); before that fix a `default: []` on a body param was decorative. | |
| returnVouchers | No | Include vouchers. | |
| returnFreebetTokens | No | Include eligible freebet tokens. | |
| returnOutcomeDetails | No | Include the outcome detail; useful for confirming you priced what you meant. | |
| returnCashoutAvailable | No | Whether cash-out is offered on the resulting bet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnly/openWorld/idempotent annotations, the description adds substantial behavioral context: placement has no quote id, prices must be read fresh, the fraction should be carried rather than re-derived, betMinStake was verified at 0.01, and auth works without a key. This goes well beyond what the annotations already communicate and matches them, with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, with the core purpose and critical placement warning at the top. It is longer than minimal, and some points like 'no quote id' and 'authoritative price' are repeated, but nearly every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining the return shape, and it does so with a concrete verified structure, including betBuilds, enhancedOdds, betCombinations, and vouchers. It also covers the minimum stake, price formatting, auth behavior, and the critical relationship to sportsbet_place_bet, making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The main description adds some auth and output semantics, but it does not add much parameter-level meaning beyond what the schema already provides; the schema property descriptions already cover appToken, betItems, outcomeGroups, and apiVersion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'PRICE A BET SLIP — the authoritative, current price for selections you are about to back.' It clearly distinguishes this tool as the pre-placement pricing call and names the related sportsbet_place_bet workflow, so an agent can understand what it does even among many betting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit timing context: 'Call this IMMEDIATELY before sportsbet_place_bet' and explains why, because placement takes an asserted price rather than a quote id. It does not explicitly mention when-not-to-use or name alternatives like sportsbet_sgm_price, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racecardBRead-onlyIdempotent
Racecard for one race: runners, prices, scratchings.
Returns: {event:{eventId, raceNumber}, markets:[{marketId, name, selections:[{name, price:{winPrice, winPriceNum, winPriceDen}}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Racing event id. Required — part of the URL path. | |
| selectionNames | No | Include full selection (runner) names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the description adds useful behavior not in those hints: the exact return shape and the auth model ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more'). No contradiction exists between the description 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a concise return-shape block and auth note. The three sections are each useful and non-redundant, though slightly more structured formatting could improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return shape and auth, which compensates for the absence of an output schema. However, it lacks guidance on when to use this tool over closely related siblings and does not mention any caveats around scratchings or price availability, leaving moderate ambiguity for a racing API.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description contributes little beyond the schema: the return schema helps interpret what selectionNames affects, but the tool description does not add syntax, defaults, or edge-case meaning beyond what the input schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('one race') and its content ('runners, prices, scratchings'), which clearly identifies what the tool returns. The phrase 'one race' differentiates it from multi-race siblings like sportsbet_multiple_racecards and sportsbet_racing_allracing, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a single race but provides no explicit guidance on when to choose this tool over close siblings such as sportsbet_racecard_with_context or sportsbet_multiple_racecards. There are no stated conditions, scenarios, or exclusions beyond the word 'one'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racecard_with_contextARead-onlyIdempotent
Racecard plus surrounding context (meeting, results, related markets) for one race.
Returns: {event:{}, markets:[], meeting:{}, context:{}}
Example: Racecard with context for one race {"eventId": 10513900, "classId": 1}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| classId | Yes | Racing class id (race type/class), required by upstream. | |
| eventId | Yes | Racing event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds operational detail beyond them: the return envelope {event, markets, meeting, context} and an auth nuance — works without a key, with SPORTSBET_REFRESH_TOKEN unlocking more. It does not fully enumerate what context{} contains, but the parenthetical covers the main elements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short segments each with a distinct job: purpose, return shape, example, and auth. The example's leading label — 'Racecard with context for one race' — mildly redundantly restates the first line, and the auth note doesn't say which features the token unlocks. Overall tight and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool, this is nearly complete: the return shape compensates for the missing output schema, the example anchors the required ids, and the auth note clarifies key requirements. It doesn't explain how to obtain a valid eventId/classId or fully detail context contents, but those are minor for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies and the schema already documents both parameters. The example pairs concrete values (eventId 10513900, classId 1) hinting at value domains, but adds no semantic depth about how to source valid ids or what 'class' means. No gap existed for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States precisely what the tool returns — a racecard plus meeting, results, and related markets for a single race. The parenthetical enumerates the context payload, and 'for one race' scopes it against multi-race siblings. The '_with_context' suffix is given concrete meaning instead of being left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement implies the use case (need racecard plus surrounding context), but the description never names alternatives or exclusion conditions. With siblings like sportsbet_racecard, sportsbet_multiple_racecards, and betr_race available, routing between them is left entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_race_previewARead-onlyIdempotent
Editorial race preview (text + video) for one race.
Returns: {preview:{title, body, videoUrl}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| raceType | Yes | Racing code (e.g. Thoroughbred). | |
| eventDate | Yes | Meeting date, YYYY-MM-DD. | |
| trackName | Yes | Track / venue name. | |
| raceNumber | Yes | Race number at the meeting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior, and the description adds valuable context beyond them: it reveals the exact return shape and that the tool works without a key while an optional token 'unlocks more'. This gives an agent useful expectations about authentication and response structure without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly scoped and well organized: purpose first, then return shape, then auth behavior. Every sentence earns its place and there is no filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides the full return contract. Combined with 100% schema parameter coverage and annotations covering safety and idempotency, this is a complete and low-risk tool definition for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters (raceType, eventDate, trackName, raceNumber) already meaningfully described. The tool description adds no additional parameter-level detail such as formats, defaults, or valid values, so it stays at the baseline rather than earning a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as an Editorial race preview for one race and specifies it contains both text and video. It is easy to distinguish conceptually from racecard or odds tools, though it does not explicitly name any sibling or contrast alternative preview tools. The lack of an explicit verb like 'fetch' or 'retrieve' keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives such as sportsbet_racecard, sportsbet_track_report, or tab_racing_race_form. The description says it is for one race, but it never explains when editorial preview content is preferable to data-oriented racecards or when the token-enhanced mode should be relied upon. This is a meaningful gap for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_allracingARead-onlyIdempotent
All race meetings (every code) for one date, grouped by meeting.
Returns: {meetings:[{competitionId, name, raceType, events:[{eventId, raceNumber, advertisedStartTime}]}]}
Example: All racing for a given day {"eventDate": ""}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventDate | Yes | Race date, YYYY-MM-DD. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior, and the description adds value by documenting the response contract, the meeting grouping, and the auth nuance (works without a key; SPORTSBET_REFRESH_TOKEN unlocks more). This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the summary and return shape. The example line is somewhat redundant and uses a placeholder, but the auth information earns its place and there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single required parameter, no output schema, and annotations covering safety, the description supplies the essential return shape, auth note, and date scope. It is complete enough for correct invocation, though 'unlocks more' is vague and alternatives are not noted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains eventDate format and requiredness. The description's example uses a '<today>' placeholder rather than a concrete date and adds no semantic detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (all race meetings across every code for one date) and the grouping behavior, and shows the return shape with meetings and events. This clearly distinguishes it from sibling race-specific tools like sportsbet_racecard or sportsbet_racing_event_meeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope is explicit: one date, all codes, grouped by meeting, reinforced by the example 'All racing for a given day'. It does not name sibling alternatives or state when not to use it, but the context is unambiguous for a date-based all-meetings fetch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_best_betsARead-onlyIdempotent
Editorially-selected best bets across racing.
Returns: {bestBets:[{eventId, selectionName, price:{winPrice}}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, idempotent, and openWorld; the description adds useful behavioral context about authentication, noting it works without a key and that a token unlocks more. The return shape is also disclosed, which complements the lack of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, return shape, then auth. Every line adds useful information with no filler or redundant resstating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, this is mostly complete: the return structure and auth requirements are both covered. It could be more explicit about whether the best bets are current/upcoming or how this compact form differs from the with_events variant, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so there is no parameter ambiguity to resolve. The baseline of 4 applies because there is nothing additional the description needs to explain about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as providing editorially-selected best bets across racing and includes a concrete return shape, making its function reasonably clear. It does not explicitly differentiate itself from the similarly named sportsbet_racing_best_bets_with_events sibling, so it misses some distinction opportunity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to prefer this tool over closely related alternatives such as sportsbet_racing_best_bets_with_events or pointsbet_racing_tips. The only use signal is implicit in the phrase 'best bets across racing,' leaving the agent to infer when it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_best_bets_with_eventsARead-onlyIdempotent
Best bets with their full parent event objects inlined.
Returns: {bestBets:[{event:{eventId, raceNumber}, selectionName, price:{winPrice}}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/openWorld/idempotent behavior, and the description adds meaningful context beyond them: the exact return structure and the authentication behavior ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set'). This gives an agent useful operational knowledge that the annotations alone do not convey. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place: purpose, return shape, and authentication notes. It is front-loaded with the core meaning and contains no filler or repetition of schema/annotation data. This is appropriately sized for a zero-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description provides the return format and auth requirements, which are the main operational details an agent needs. It does not define what 'best bets' means or contrast itself with sportsbet_racing_best_bets, but those gaps are minor given the simplicity of invocation. Overall it is complete enough for safe and correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already communicates this completely. The description appropriately avoids inventing parameter details and instead documents the output shape. With no parameters, the baseline is 4, and the description fully satisfies that expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states the resource ('best bets') and the distinguishing feature ('with their full parent event objects inlined'), which separates it from the sibling tool sportsbet_racing_best_bets. The return-shape snippet makes the purpose concrete. This is a clear, specific statement of what the tool provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is appropriate when you need best bets along with parent event context, but it does not explicitly say when to use this over sportsbet_racing_best_bets or other racing tools. No exclusions or alternative conditions are stated. The guidance is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_challengesARead-onlyIdempotent
All racing challenges / promotions feed.
Returns: {challenges:[{id, name, status}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world behavior. The description adds valuable auth behavior not present in structured fields: it works without a key and the refresh token unlocks more data. It also discloses the response envelope, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines each earn their place: scope, return shape, and auth requirements. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only feed, the description is largely sufficient: it names the resource, shows the response structure, and covers auth. The main gap is not relating it to sibling promotions endpoints, but nothing about actually invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter documentation burden. The description compensates for the missing output schema by specifying the returned fields ({challenges:[{id, name, status}]}), which is helpful for a schema-less response.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a feed of racing challenges/promotions and states the returned shape, so an agent knows what resource it accesses. It does not explicitly differentiate from sibling promotion feeds like sportsbet_popular_promotions or betr_all_promotions, but the scope ('All racing challenges') is reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to select this tool over sibling promotions/challenges endpoints or racing feeds. The description implies it is an unfiltered feed but provides no exclusions, alternatives, or context-based routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_competitionARead-onlyIdempotent
Racing competition (meeting) detail by competition id.
Returns: {competition:{competitionId, name, raceType}, events:[{eventId, raceNumber}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| competitionId | Yes | Racing competition (meeting) id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, and idempotent behavior. The description adds value beyond that by disclosing the exact return shape and authentication behavior: 'works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.' This gives the agent useful operational context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: a one-line purpose, a return shape line, and an auth line. Every sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter lookup with no output schema, but the description compensates by specifying the exact return object shape and auth constraints. An agent has enough information to call it correctly and interpret the result, so the description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains competitionId as an integer, required, and part of the URL path. The description merely repeats 'by competition id' and does not add extra semantic detail such as formats, ranges, or where the id comes from. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('Racing competition (meeting) detail') and the lookup key ('competition id'), and it specifies the return shape: competition fields and an events array. It is specific enough to be understood, but it does not explicitly distinguish itself from sibling tools like sportsbet_racing_event_meeting or sportsbet_racecard, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Siblings such as sportsbet_racecard, sportsbet_racing_event_meeting, and pointsbet_racing_meeting exist, but the description never references them or provides selection criteria. The auth note is operationally useful but is not a usage-vs-alternative guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_event_meetingARead-onlyIdempotent
Meeting context for one racing event (parent meeting + sibling races).
Returns: {meeting:{competitionId, name}, races:[{eventId, raceNumber}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Racing event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful non-obvious behavior: it discloses the exact return shape and clarifies authentication behavior ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set'). This goes beyond the annotations in a meaningful way without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose comes first, followed by return structure and auth note. Every sentence earns its place, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description adequately covers the return structure and auth requirements. It could be more complete with an explicit use case or pointer to related meeting tools, but nothing essential is missing for invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema thoroughly documents eventId as an integer, required, and part of the URL path. The description does not add parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Meeting context for one racing event' and specifies what is returned: the parent meeting plus sibling races. It is specific enough to distinguish this from racecard or market tools, though it lacks an explicit verb like 'fetch' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to use this tool versus alternatives such as sportsbet_racecard, pointsbet_racing_meeting, or entain_racing_meeting. No exclusions, prerequisites, or contextual triggers are given beyond 'Auth: works without a key', which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_futuresARead-onlyIdempotent
Racing futures markets (Cup outrights and other long-running racing markets).
Returns: {futures:[{marketId, name, selections:[{name, price:{winPrice}}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar for additional disclosure is lower. The description adds valuable auth behavior: it works without a key and SPORTSBET_REFRESH_TOKEN unlocks more if set. It does not detail rate limits or what 'more' means, but for a parameterless read-only tool this is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: scope, return shape, then auth. Every sentence adds distinct information, and the return-shape and auth details are high-value for an agent deciding whether and how to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool, the description covers the essential invocation facts: what is returned, the return structure, and auth requirements. It is slightly vague about what the refresh token 'unlocks' and does not mention freshness or market coverage, but the provided output shape compensates for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no argument semantics for the description to clarify. Per the baseline for 0-parameter tools, the description does not need to compensate for schema gaps, and it does not add irrelevant parameter noise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Racing futures markets (Cup outrights and other long-running racing markets)' and shows the return shape, so an agent can tell this is a racing-futures listing tool. It lacks an explicit verb like 'list' or 'fetch', but the meaning is unambiguous and the parenthetical adds useful specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus sibling tools such as pointsbet_racing_futures, tab_racing_futures_meetings, or entain_racing_future_markets. No exclusions or alternative-selection conditions are provided; usage is only implied by the category name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_megabetsARead-onlyIdempotent
Racing Megabets (large multi suggestions across races).
Returns: {megabets:[{id, legs:[{eventId, selectionName}], price:{winPrice}}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, removing the safety-disclosure burden. The description adds genuine value beyond annotations: it documents the exact return shape ({megabets:[{id, legs:[...], price:{winPrice}]}) and the auth behavior ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set'), which is operationally useful context an agent would otherwise not know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight segments — definition, return shape, auth note — with no padding. The core concept is front-loaded first, and every line earns its place without repeating annotations or schema trivia.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter, read-only tool with no output schema, this is essentially complete: it states what the tool returns (including nested field names), confirms it requires no auth key, and notes the enrichment behavior. The inline return shape is essential here since no output schema exists, and it is present. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4, and there is nothing to explain about argument semantics. The schema coverage is vacuously 100%, and the description wisely spends its space on the return structure instead, which is the only input-independent information an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Racing Megabets) and unpacks the concept in parentheses ('large multi suggestions across races'), so the purpose is concretely stated. It is distinguishble from single-race and non-multi racing tools, though it never explicitly contrasts itself with the similarly-scoped sportsbet_racing_multis_events sibling, and the fetching verb is only implied by 'Returns:'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied — an agent can infer it is for large multi-race bet suggestions — but there is no explicit guidance on when to choose it over overlapping siblings like sportsbet_racing_multis_events, sportsbet_racing_best_bets, or sportsbet_racing_popular_srms. No exclusions or alternative routing is provided, so an agent must guess based on the parenthetical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_multis_eventsARead-onlyIdempotent
Events available for racing multis, ordered by start (next-to-jump style feed).
Returns: {events:[{eventId, raceNumber, advertisedStartTime, meetingName}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only and idempotent, and the description adds meaningful context beyond that: it works without a key, a SPORTSBET_REFRESH_TOKEN unlocks more data, and results are ordered as a next-to-jump feed. The vague 'unlocks more' keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose first, then return shape, then auth. Every sentence adds useful information and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description covers the return fields, ordering, and auth requirements well enough to invoke correctly. Minor gaps are the unspecified meaning of 'unlocks more' and the exact time format, but neither blocks a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the input schema already documents this completely. With no parameters to describe, the baseline of 4 is appropriate; the description does not need to add parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('events available for racing multis') and the ordering behavior ('by start, next-to-jump style feed'). The verb is only implicit rather than explicit ('lists' is not stated), and it does not directly differentiate from sibling racing tools, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'racing multis' plus 'next-to-jump style feed' gives enough context for when the tool is appropriate. However, no alternatives are named and there are no when-not-to-use conditions, so the agent must infer distinctions from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_popular_srmsARead-onlyIdempotent
Popular Same Race Multi (SRM) combinations for races / meetings.
Returns: {srms:[{eventId, legs:[{selectionName}], price:{winPrice}}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
Also answers this: entain_graphql_call, pointsbet_racing_srm.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Comma-separated ids at the chosen hierarchyLevel. | |
| sortBy | No | Sort order for returned SRMs. | |
| maxItems | No | Max SRM combinations to return. | |
| popularsrms | No | Restrict to popular SRMs only. | |
| hierarchyLevel | Yes | Level the ids refer to: event, competition or class. | |
| minUniqueCount | No | Minimum distinct legs per SRM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent, and the description adds useful behavioral context: the return payload shape and the auth requirement ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set'). There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with short labeled sections for purpose, return shape, auth, and related tool routing. The 'Also answers this' fragment is a bit ambiguous, but overall every section is brief and the core purpose comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that annotations cover safety and the schema covers all parameters, the description fills the main remaining gaps by specifying the return shape and auth behavior. The ambiguous alias note is a minor weakness, but for a read-only list tool with full schema coverage, this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains all six parameters and their defaults. The description's 'Popular' and 'races / meetings' loosely echo the `popularsrms` and `hierarchyLevel` parameters, but it doesn't add 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('Popular Same Race Multi (SRM) combinations for races / meetings') and a Returns block that clarifies the output shape. The verb is implicit rather than explicit, but the tool's function is still unambiguous. It references overlapping sibling tools, though it doesn't clearly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Popular SRM combinations for races / meetings' phrasing provides clear context for when the tool is relevant. However, the only alternative guidance is the cryptic 'Also answers this: entain_graphql_call, pointsbet_racing_srm,' which doesn't state when to choose this tool over those 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.
sportsbet_racing_resulted_eventsARead-onlyIdempotent
Resulted races (placings + dividends) for a racing competition + class + date.
Returns: {events:[{eventId, raceNumber, results:[{place, selectionName}], dividends:[]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
Also answers this: pointsbet_racing_race, tab_racing_race.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Result date, YYYY-MM-DD. | |
| classId | Yes | Racing class id. | |
| competitionId | Yes | Racing competition (meeting) id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only, idempotent, and open-world, so the description only needs to add non-obvious behavior. It adds auth behavior ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set') and a concrete return shape, which are useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four brief sentences cover core purpose, return shape, auth, and routing with no fluff, and the main behavior is front-loaded. The last sentence is terse and slightly cryptic, which keeps it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read-only tool with full schema coverage, the description supplies enough: params, output shape, and auth. It does not explain how to discover competitionId/classId or what happens on empty results, but these are minor given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are described in the schema at 100% coverage, so the schema already carries the semantic load. The description only echoes 'competition + class + date' without adding type, format, or lookup guidance beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states exactly what the tool returns — resulted races with placings and dividends — scoped by competition, class, and date. It also names pointsbet_racing_race and tab_racing_race, giving an agent a way to distinguish it from closely related racing-race tools without inspecting them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Also answers this: pointsbet_racing_race, tab_racing_race' provides a routing hint to run this tool for equivalent requests from other brands. It lacks a formal when-not-to-use statement, but the resulted-races framing and the alternative mapping give enough context for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_racing_top_jockeysARead-onlyIdempotent
Top jockeys hub (leading jockeys and their rides today).
Returns: {jockeys:[{name, rides:[{eventId, selectionName}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description does not contradict them. It adds value beyond annotations by disclosing the exact return shape ({jockeys:[{name, rides:[{eventId, selectionName}]}]}) and the auth behavior (works without a key; token unlocks more). This compensates for the missing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact, front-loaded sentences: purpose first, then return shape, then auth. Every line earns its place and there is zero filler or repetition of annotation data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool, the description is nearly complete: it states scope, provides a return structure (important since no output schema exists), and clarifies auth requirements. Minor gaps include no example values, no pagination or size limits, and an unspecified meaning of 'more' with the token, but none are critical for a no-arg list call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to clarify beyond what the empty input schema shows. Baseline 4 for a parameterless tool applies; the auth note (SPORTSBET_REFRESH_TOKEN) is the only relevant environmental input and is already disclosed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource — top jockeys and their rides today — and the 'Returns:' line makes the verb explicit. However, it does not explicitly differentiate from sibling tools; it relies on the tool name and domain to distinguish itself from racing tools like sportsbet_racing_best_bets or sportsbet_racecard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'today' scoping and 'hub' phrasing imply it is for current-day leading jockey information, and the auth note gives practical guidance on when it can be called without a key. But there is no explicit when-to-use versus alternatives guidance, no exclusions, and no mention of what 'more' the refresh token unlocks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_results_classesARead-onlyIdempotent
Sport classes that have results available for a date.
Returns: {classes:[{classId, name}]}
Example: Classes with results today {"date": "today"}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Result date, YYYY-MM-DD, or the literal "today". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior, so the description's job is lighter. It adds value by disclosing the return envelope and the auth behavior: 'works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.' The 'unlocks more' phrase is vague but does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose, return shape, example, and auth each occupy one clear line. The most actionable information is front-loaded, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool, the description gives the return format, a usage example, and auth requirements, which is enough for correct invocation. Minor gaps remain around what the token 'unlocks more' exactly provides and whether historical dates behave differently, but these are unlikely to block an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single date parameter at 100% coverage, including the YYYY-MM-DD format and the literal 'today'. The description reinforces this with a concrete example but adds no new constraints or semantic details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'sport classes that have results available for a date' and provides the return shape, so an agent can infer this fetches a date-scoped list of classes. The phrase 'results available' helps distinguish it from a generic sportsbet_sports_classes listing, though it lacks an explicit verb like 'list' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Classes with results today: {"date": "today"}' implies when and how to use the tool. However, the description does not state when to prefer this over related siblings such as sportsbet_results_competitions or sportsbet_sport_resulted_events, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_results_competitionsARead-onlyIdempotent
Competitions with results for a sport class on a date.
Returns: {competitions:[{competitionId, name, events:[{eventId, finalScore}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Result date, YYYY-MM-DD, or the literal "today". | |
| classId | Yes | Sport class id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context: the return payload structure and that authentication is optional but a refresh token unlocks more data. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences cover purpose, return shape, and auth behavior without wasted words. The key information is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the annotations, schema, and description together cover the essential operational details. The return structure compensates for the missing output schema; the only minor ambiguity is what 'unlocks more' expands in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description only paraphrases the parameters ('for a sport class on a date') and adds no extra format, edge-case, or relationship information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource and scope: competitions with results for a sport class on a date, and gives the return shape. It is specific enough to distinguish from siblings like sportsbet_results_classes or sportsbet_event_results, though it lacks an explicit imperative verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies when to use it: when you need competitions and their final scores for a sport class on a given date. However, it does not explicitly name alternatives or exclusion conditions, so the agent must infer usage from the resource description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_safer_gambling_messageARead-onlyIdempotent
Current safer-gambling message block for the site.
Returns: {message:{title, body}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful auth behavior beyond the annotations: it works without a key, and SPORTSBET_REFRESH_TOKEN unlocks additional data. This is relevant operational context that an agent would not otherwise know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose comes first, followed by the return shape and auth behavior. Every line earns its place, and there is no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, idempotent tool, the description is nearly complete: it states the purpose, the exact return shape, and auth requirements. It does not explain what 'unlocks more' means or describe edge cases, but those are minor gaps given the tool's simplicity and the strong annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description correctly adds no parameter-related details because there are none to explain. The return structure of {message:{title, body}} compensates for the lack of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Current safer-gambling message block for the site' paired with 'Returns' makes it clear this is a read-only retrieval of a specific content block. The noun-phrase construction lacks an explicit verb like 'get' or 'retrieve', but the return statement removes ambiguity. It also stands apart from generic siblings like sportsbet_cms_messages by naming the specific message domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool name and description: an agent would call this when it needs the current safer-gambling message. However, there is no explicit statement of when to use this tool versus alternatives, nor any mention of prerequisites beyond the auth note. The auth line provides some context but does not address tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it legs from one event, get the combined price back. The only tool here that prices a combination the book has not already built.
Returns: {price:{quoteId, numerator, denominator}} — VERIFIED live 2026-08-25 against AFL Western Bulldogs v Collingwood: two legs returned 7/5.
THE PRICE IS FRACTIONAL. Decimal = 1 + numerator/denominator, so 7/5 is $2.40. It is NOT the product of the legs — Sportsbet applies a correlation adjustment, which is the entire point of asking.
quoteId is a per-request token with a short life. Treat the price as a quote, not a cached fact: re-request rather than reusing one from minutes ago.
ERRORS COME BACK 400 WITH A CODE: ERR-MP-001 means fewer than two outcomes; ERR-VE means the body failed schema validation (usually an id passed where an externalId was wanted). Legs the book will not combine are refused rather than priced.
Example: Price a two-leg AFL same game multi {"classExternalId": 103, "competitionExternalId": 17131, "eventExternalId": 16374542, "outcomesExternalIds": [{"marketExternalId": 602153262, "outcomeExternalId": 2870628965}, {"marketExternalId": 602153262, "outcomeExternalId": 2870628954}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| classExternalId | Yes | The SPORT's external id (AFL = 103). From sportsbet_nav_hierarchy: the class node's `classExternalId`, NOT its `id`. | |
| eventExternalId | Yes | The match's external id. From sportsbet_competition_matches: the event's `externalId`, NOT its `id`. | |
| outcomesExternalIds | Yes | The legs, at least two: [{marketExternalId, outcomeExternalId}]. BOTH are `externalId` values from sportsbet_event_markets — the market's `externalId` and the selection's `externalId`, never their `id`s. All legs must belong to the SAME event. | |
| competitionExternalId | Yes | The competition's external id (AFL = 17131). From sportsbet_nav_hierarchy: the competition node's `competitionExternalId`, NOT its `id`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: describes the exact return shape, explains why the price is NOT the product of legs due to correlation adjustment, flags quoteId as short-lived and non-cacheable, documents specific 400 error codes and their causes, and notes auth requirements. This gives the agent a strong behavioral model beyond readOnly/openWorld/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose, return format, fractional-price conversion, correlation adjustment, quote freshness, error handling, a concrete example, and auth. It is front-loaded with the core purpose and structured so critical caveats are not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates fully by documenting the return structure, example values, error codes, quote lifecycle, and auth. There are no significant gaps an agent would need to guess to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with detailed 'externalId vs id' guidance. The description adds a complete worked example with real AFL IDs and reinforces the 'at least two legs from the same event' constraint, which adds usable semantic context beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('PRICE A SAME GAME MULTI'), the exact input (legs from one event), and the output (combined price). Explicitly differentiates itself: 'The only tool here that prices a combination the book has not already built.' This clearly distinguishes it from prebuilt multi/slip tools and sibling SGM pricing tools by name/disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use when pricing a user-selected same game multi with at least two legs from one event. It also sets expectations that uncombinable legs are refused rather than priced. However, it does not explicitly name alternatives or state when to use a different tool (e.g., prebuilt SGM lists or price slip tools), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sport_card_legacyARead-onlyIdempotent
Legacy single sport event card (event + primary markets).
Returns: {event:{eventId, name, startTime}, markets:[]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sport event id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds genuine value beyond annotations: auth behavior ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set') and the concrete return envelope. It does not disclose failure modes, pagination, or the shape of market entries, but those gaps are minor given the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact lines, each earning its place: purpose, return shape, and auth. Front-loaded with the core behavior, no filler or redundancy. The structured 'Returns:' and 'Auth:' labels make it scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (one required param, no output schema, no nested objects, annotations present), the description covers the essentials: what it returns, the return envelope, and auth requirements. The gaps — undefined market element shape and what 'Legacy' means operationally — are real but modest given how thin the interface is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the sole parameter eventId is adequately documented as 'Sport event id. Required — part of the URL path.' The description adds no parameter-level detail beyond the schema, so the baseline 3 applies: schema carries the load and the description neither helps nor hurts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource — a legacy single sport event card — with its content (event + primary markets) and an explicit return shape. The 'single' qualifier helps distinguish it from sportsbet_sports_card, though it never names the sibling it differs from, and 'Legacy' signals age without stating what it was replaced by.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. With siblings like sportsbet_sports_card, sportsbet_event_markets, and entain_sport_event_card (which likely serves the same event-card purpose for the Entain family), an agent has no basis to choose this tool over those. The 'Legacy' label implies a newer replacement exists but never names it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sport_competitionARead-onlyIdempotent
Sport competition page: matches, outrights and optional top markets.
Returns: {competition:{competitionId, name}, events:[{eventId, name, startTime, markets:[]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| numMarkets | No | Markets to inline per event. | |
| displayType | No | Upstream display variant. | |
| eventFilter | No | Restrict to matches or outrights. | |
| competitionId | Yes | Sport competition id. Required — part of the URL path. | |
| includeAllEvents | No | Include all events, not just upcoming. | |
| includeTopMarkets | No | Inline highlighted top markets per event. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly, idempotent, and openWorld behavior. The description adds beyond that by including the response structure and, importantly, the authentication behavior: it works without a key, with an optional refresh token unlocking more data. This gives an agent useful operational context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short segments earn their place: one line for purpose, one for return shape, and one for auth. There is no fluff or repetition. It is front-loaded with the most important information first, which helps an agent quickly decide whether to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description is right to include a concise return shape, and the auth note is useful. It does not explicitly describe how eventFilter combinations or includeTopMarkets alter the payload, but the schema descriptions cover those flags. For a simple read-only competition-page tool, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter already has a small meaningful description (eventFilter enum, includeAllEvents, includeTopMarkets, etc.). The prose description only generically mentions 'optional top markets', which maps to includeTopMarkets but adds little semantic value beyond the schema. Baseline 3 is appropriate because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('sport competition page') and states its contents: matches, outrights, and optional top markets. It also gives the return shape, so an agent can distinguish it from a generic sports listing. It doesn't however explicitly contrast it with the close siblings sportsbet_competition_matches and sportsbet_competition_outrights, so full differentiation relies on inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a competition page containing matches and outrights, which is usable guidance. It does not state when to prefer it over more targeted siblings such as sportsbet_competition_matches or sportsbet_competition_outrights, nor does it give exclusions or fallback conditions. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sport_resulted_eventsARead-onlyIdempotent
Resulted (finished) events for a sport competition + class + date.
Returns: {events:[{eventId, name, finalScore}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Result date, YYYY-MM-DD. | |
| classId | Yes | Sport class id. | |
| competitionId | Yes | Sport competition id. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent behavior. The description adds useful context beyond annotations: auth requirements ('works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set') and the exact return shape. This exceeds the baseline set by 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then return shape, then auth. Every sentence provides distinct, useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool, the description covers purpose, required scope, return structure, and auth requirements. With annotations covering safety and idempotency, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description only paraphrases the parameter set ('competition + class + date') without adding new semantic detail, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Resulted (finished) events for a sport competition + class + date.' It clearly distinguishes this tool from sibling tools like sportsbet_upcoming_events and sportsbet_racing_resulted_events by specifying 'sport' and 'resulted.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this for finished events with final scores for a specific sport competition/class/date. It doesn't name alternatives or exclusions, but the scope is explicit enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sports_cardARead-onlyIdempotent
Full sport event card (all markets + selections) or the resulted event if finished.
Returns: {event:{eventId, name, startTime}, markets:[{marketId, name, selections:[{name, price:{winPrice}}]}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Sport event id. Required — part of the URL path. | |
| includeIncidents | No | Inline match incidents (goals, cards). | |
| includeAllMarkets | No | Inline every market for the event. | |
| includeCommentary | No | Inline text commentary. | |
| includeScoreboard | No | Inline the live scoreboard. | |
| includeTopMarkets | No | Inline highlighted top markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds useful behavioral context beyond the schema: the tool works without a key, a refresh token unlocks more data, and finished events return the resulted card rather than live markets. The token behavior is vague ('unlocks more') but is still additional disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sections—purpose, return shape, and auth—are front-loaded and free of filler. The return-shape example earns its place because there is no output schema, and every sentence contributes to calling the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no output schema, including an explicit return shape is valuable and mostly complete. The schema covers parameter meanings and the description covers auth and finished-event behavior. The main gap is lack of guidance on which sibling card/market tools to prefer and what 'unlocks more' actually returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters and the required eventId. The description does not add meaning beyond the schema, aside from implying the default card shape; thus the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a full sport event card with all markets and selections, and notes it returns resulted events when finished. It is distinguishable from sibling tools like sportsbet_event_markets and sportsbet_event_results by the 'full card' scope, though it stops short of using an explicit verb or naming a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Full sport event card' and the 'resulted event if finished' clause imply when to use the tool, but no alternative tools are named and there is no explicit when-to-use versus when-not-to-use guidance. The auth note adds operational context, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_sports_classesARead-onlyIdempotent
Sport classes (sports) with their competitions for a date window.
Returns: {classList:[{classId, className, classDisplayOrder}]}
Example: Sports with events in the next 24 hours {"fromDate": "T10:00:00", "toDate": "<today+1>T10:00:59"}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | Yes | Window end — naive datetime YYYY-MM-DDTHH:MM:SS (a bare date is rejected with HTTP 400). | |
| fromDate | Yes | Window start — naive datetime YYYY-MM-DDTHH:MM:SS (a bare date is rejected with HTTP 400). | |
| includeLiveEvents | No | Include events currently in-play. | |
| excludeNonLiveEvents | No | Return only in-play events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful behavioral context beyond that: it works without a key, SPORTSBET_REFRESH_TOKEN unlocks more if set, and the response format is classList. This is genuinely helpful, though it does not cover rate limits or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, return shape, example, and auth requirements are each given in a short, front-loaded block. There is no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent tool, the description covers the key facts an agent needs: required date window, filter flags are documented in the schema, auth behavior is stated, and the return shape is shown. The only minor gap is a slight mismatch between 'with their competitions' and the classList-only return shape shown, but overall the tool is sufficiently specified for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already explains the date format, required fields, and the two live-event filter booleans. The description adds only an example date window and does not meaningfully expand on parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns sport classes (sports) and their competitions for a date window, and includes the concrete return shape classList with classId, className, and classDisplayOrder. It is reasonably clear and distinguishable from broader Sportsbet navigational tools by its date-window scope, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The date-window framing and the 'next 24 hours' example imply when this tool is useful for time-boxed class lookups. However, there is no explicit guidance about when to prefer this over overlapping sibling tools such as sportsbet_sports_card, sportsbet_nav_hierarchy, or sportsbet_results_classes, and no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_track_reportARead-onlyIdempotent
Track report (going, rail, weather) for a racing meeting on a date.
Returns: {track:{name, going, railPosition, weather}}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| raceType | No | Racing code (e.g. Thoroughbred, Greyhound, Harness). | |
| eventDate | Yes | Meeting date, YYYY-MM-DD. | |
| trackName | No | Track / venue name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description adds genuine operational context beyond that: it works without an API key and that a SPORTSBET_REFRESH_TOKEN may unlock more data. It also states the return shape, which is helpful since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences cover purpose, return shape, and auth with no filler. The purpose is front-loaded, and every sentence adds new information not duplicated by the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read-only tool, the description is complete: it names the required date lookup, lists the return fields (compensating for the missing output schema), and clarifies auth requirements. Nothing necessary for correct invocation seems missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented with types and meanings. The description does not add parameter-level detail or clarify how trackName and raceType relate to the meeting lookup, so it neither harms nor significantly improves on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Track report (going, rail, weather) for a racing meeting on a date' names a specific resource and scopes it to a racing meeting and date. Listing the exact data fields (going, rail, weather) distinguishes it from nearby racing tools like sportsbet_racecard or sportsbet_racing_event_meeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the scope ('for a racing meeting on a date') and what data is returned, so an agent can infer when it applies. However, it never names sibling alternatives or says when not to use it, leaving selection to inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_trending_sgmARead-onlyIdempotent
Trending Same Game Multi (SGM) combinations for one sport event.
Returns: {sgms:[{legs:[{selectionName}], price:{winPrice}}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sport event id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read-only, idempotent operation. The description adds useful behavioral context beyond that: it works without a key and that a refresh token 'unlocks more', and it documents the return payload. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose first, then return shape, then auth. Every sentence carries useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description adequately covers what it does, what input is expected, what the output looks like, and auth requirements. It could be more complete by explaining how to source the event id, but nothing essential is missing for a basic call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the only parameter (`id` as 'Sport event id.') with 100% coverage. The description reinforces that this id refers to one sport event but adds no additional meaning about id format, source, or how to obtain it. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource ('Trending Same Game Multi (SGM) combinations') and its scope ('for one sport event'). It adds a return shape that reinforces what the tool provides. It does not explicitly distinguish itself from siblings like sportsbet_sgm_price, though 'trending' implies a different use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no when-not-to-use notes. The auth note is operationally useful but does not help an agent choose this tool over sportsbet_sgm_price or other SGM pricing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsbet_upcoming_eventsARead-onlyIdempotent
Upcoming sport events across all codes (homepage upcoming feed).
Returns: {events:[{eventId, name, classId, competitionId, startTime}]}
Auth: works without a key; SPORTSBET_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| maxEvents | No | Cap the number of events returned. | |
| includePrimaryMarket | No | Inline each event's primary market + prices. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, and idempotent behavior. The description adds valuable behavioral context beyond that: it works without an API key, states that a refresh token can unlock more data, and provides the exact response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one line for purpose, one line for return format, one line for auth. Every sentence adds useful information and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional parameters and no required inputs, the description covers the key invocation concerns: what it returns, whether auth is required, and that it spans all sport codes. It could be slightly stronger with explicit usage boundaries versus sibling tools, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents both optional parameters, maxEvents and includePrimaryMarket, so the description does not need to repeat them. The description adds no parameter-level meaning beyond what the schema provides, which meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns upcoming sport events across all codes, identified as the homepage upcoming feed. This is specific enough to distinguish it from event-detail or sport-specific tools, though it does not explicitly name any sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'homepage upcoming feed' and 'across all codes' gives useful context about when this tool is appropriate. However, there is no explicit guidance about when to prefer another tool, such as a sport-specific or competition-specific event endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdata_feedbackA
Report whether an answer from this server was useful.
Call this when a tool gave a wrong, empty or misleading answer — especially if the response shape did not match its description, which is the failure mode the maintainers most need to hear about.
Recorded locally. It is only ever transmitted if the operator has explicitly
enabled sharing (SPORTSDATA_TELEMETRY=1 plus a configured endpoint), and note
is sent verbatim, so do not put anything private in it.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | What went wrong, in a sentence. Free text, truncated to 500 characters, and sent VERBATIM if sharing is enabled — do not include anything private. | |
| tool | No | The tool the feedback is about, e.g. `nhl_schedule`. Omit for general feedback. | |
| helpful | Yes | False if the answer was wrong, empty or misleading; True if it was useful. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false (readOnlyHint=false, openWorldHint=false, idempotentHint=false), providing almost no guidance, so the description must carry the burden. It does so well by disclosing that feedback is recorded locally, only transmitted if SPORTSDATA_TELEMETRY=1 plus a configured endpoint, and that `note` is sent verbatim – important privacy context. It doesn't mention the return value or any server-side effects beyond recording, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: the first states the purpose, the second gives usage context, the third covers privacy. It's front-loaded and every sentence earns its place. Slightly verbose in the middle clause, but still efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple feedback tool, the description covers the trigger conditions, the specific failure mode to report, and the privacy/telemetry behavior. An output schema is present (unseen), so return values need not be described. A minor gap is that it doesn't state what happens after recording (e.g., whether feedback is anonymous), but this is not essential for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; each parameter (helpful, tool, note) has a detailed description in the schema itself. The tool description reiterates the privacy caution about `note` being sent verbatim but adds no new meaning beyond the schema. The baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Report whether an answer from this server was useful' – a specific verb and resource. It clearly distinguishes itself from the hundreds of sibling data-retrieval tools by being the only feedback/reporting tool, and it even specifies the exact failure mode (response shape mismatch) that maintainers most need to hear about.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Call this when a tool gave a wrong, empty or misleading answer' and gives a concrete example of when to use it. It doesn't explicitly list when-not-to-use or suggest alternative tools, but the use case is so distinct from the siblings that this is largely unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_mlb_games_by_dateARead-onlyIdempotent
MLB games on a date, with probable pitchers and the line.
Returns: [{GameID, Season, Status, DateTime, AwayTeam, HomeTeam, AwayTeamRuns, HomeTeamRuns, Inning, InningHalf, AwayTeamProbablePitcherID, HomeTeamProbablePitcherID, PointSpread, OverUnder}] — SHAPE FROM VENDOR DOCS. The keyless official mlb provider is deeper for everything except the line and the DFS layer.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A date's MLB games {"date": "2024-07-04"}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations declare readOnlyHint, openWorldHint, and idempotentHint, the description adds valuable behavioral context: the output shape is from vendor docs and NOT verified against a live response, so agents should treat fields as approximate. It also discloses the auth requirement (key in one of several SPORTSDATAIO_* env vars), which goes beyond the annotations and is critical for successful invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficiently conveys essential information: the core purpose, the return shape, a caveat about accuracy, an example, and auth notes. Every sentence earns its place, with no fluff or repetition. The format is scannable and front-loaded with the most important details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is remarkably complete. It provides the full list of expected fields, warns about the unverified shape, gives a working example, and specifies auth requirements. The caveat about inspecting the actual payload further prepares the agent for potential schema drift, making the description sufficient for confident use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single `date` parameter, including format and required status. The description adds an example but no additional semantic meaning beyond what the schema states. Baseline 3 is appropriate since the schema does the heavy lifting and the description does not introduce new parameter nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'MLB games on a date, with probable pitchers and the line.' It explicitly includes the return fields and distinguishes itself from the keyless official `mlb` provider, making the purpose and scope unambiguous. The sibling tools for other sports are implicitly differentiated by naming MLB and date.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance by noting that the keyless official `mlb` provider is 'deeper for everything except the line and the DFS layer,' implying this tool is the choice when line/DFS data is needed. It also gives a concrete example of the required date parameter, which helps the agent understand how to invoke it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nba_dfs_slatesARead-onlyIdempotent
NBA DFS slates and salaries for a date.
Returns: [{SlateID, Operator, OperatorName, OperatorStartTime, DfsSlatePlayers:[{SlatePlayerID, PlayerID, OperatorPlayerName, OperatorPosition, OperatorSalary, FantasyPoints}]}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A date's NBA slates {"date": "2024-01-15"}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint/idempotentHint annotations, the description discloses that the return shape is from vendor docs and unverified, and instructs to inspect the actual payload. It also specifies authentication requirements via the SPORTSDATAIO_*_KEY environment variables, adding valuable context about prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and clear, but the description includes redundant caveats about the unverified vendor shape ('SHAPE FROM VENDOR DOCS' and the subsequent NOTE). At ~130 words, it's verbose for a single-parameter tool, though each substantive section (Returns, Example, Auth) serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed return shape, an example call, and auth instructions, covering most operational needs. It lacks usage guidance and error handling, but for a simple read-only tool with one parameter, it's reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single 'date' parameter with format and requirement. The description reinforces it with a concrete example ('2024-01-15') and mentions 'for a date,' adding mild value beyond the schema. However, since coverage is 100%, the baseline is 3 and the example only slightly elevates it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'NBA DFS slates and salaries for a date,' which clearly specifies the resource and scope. The Returns section confirms it produces a list of slates and player salaries, distinguishing it from the NFL sibling tool by NBA in the name. However, it lacks an explicit verb like 'get' or 'list,' so it's not maximally explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving NBA DFS slates for a given date but offers no explicit when-to-use guidance or alternatives. There is no mention of the sibling sportsdataio_nfl_dfs_slates or any exclusion criteria, leaving the agent to infer applicability from the purpose line. This is an implied usage rather than clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nba_games_by_dateARead-onlyIdempotent
NBA games on a date, with the closing spread and total.
Returns: [{GameID, Season, Status, DateTime, AwayTeam, HomeTeam, AwayTeamScore, HomeTeamScore, PointSpread, OverUnder, Quarters:[…], StadiumID}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A date's NBA games {"date": "2024-01-15"}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD (or 2024-JAN-15 — this API accepts both). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, reducing the burden on the description. The description adds valuable context: the return shape is from vendor docs and unverified, advising the agent to inspect the actual payload, and it explains the auth key requirement. This goes beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labels: purpose, return shape, caveat, example, and auth. Each section earns its place—the return field list is especially useful given the lack of an output schema. It is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, this description covers all essential aspects: what it does, the approximate return object, an example call, authentication requirements, and a warning about unverified data. The caveat about the vendor docs is a significant additional detail that helps an agent avoid misinterpreting the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'date', is fully described in the schema with format and required status, giving 100% coverage. The description's example JSON reinforces the format but does not add new semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and scope: 'NBA games on a date, with the closing spread and total.' The 'Returns:' block confirms it is a retrieval operation with a specific payload. The sport-specific wording distinguishes it from sibling tools like sportsdataio_nhl_games_by_date.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, nor are alternatives mentioned (e.g., nba_scoreboard_today or balldontlie_nba_games). The example shows how to pass the date and the date format note is useful, but usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nfl_dfs_slatesARead-onlyIdempotent
DFS slates and player SALARIES for a week — DraftKings, FanDuel and Yahoo. Not available from the official NFL feeds.
Returns: [{SlateID, Operator:'DraftKings'|'FanDuel'|'Yahoo', OperatorSlateID, OperatorName, OperatorDay, OperatorStartTime, NumberOfGames, IsMultiDaySlate, DfsSlateGames:[…], DfsSlatePlayers:[{SlatePlayerID, PlayerID, OperatorPlayerName, OperatorPosition, OperatorSalary, FantasyPoints, FantasyPointsPerDollar}]}] — SHAPE FROM VENDOR DOCS. FantasyPointsPerDollar is value; salaries are integers in dollars.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week's DFS slates {"season": "2023", "week": 1}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. Required — part of the URL path. | |
| season | Yes | Season, e.g. 2023. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds critical caveats: the return shape is 'from vendor docs' and 'has NOT been verified against a live response,' advising agents to inspect actual payloads. It also clarifies field semantics (FantasyPointsPerDollar is value; salaries are integer dollars) and documents auth requirements via specific env vars.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into purpose, return shape, caveat, example, and auth sections, all relevant. It is somewhat long but each sentence delivers necessary information for a complex tool; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed return shape including nested fields (DfsSlateGames, DfsSlatePlayers) and types, plus a reliability warning and example invocation. Auth requirements are also covered, making the tool fully usable by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both season and week are described as required URL path parts. The description adds a concrete example (season 2023, week 1) but no additional parameter semantics beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns 'DFS slates and player SALARIES for a week' across DraftKings, FanDuel, and Yahoo, and specifically notes it's not available from official NFL feeds. This distinguishes it from sibling tools like sportsdataio_nfl_scores, sportsdataio_nfl_teams, and sportsdataio_nba_dfs_slates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for DFS salary data with 'Not available from the official NFL feeds,' suggesting when to prefer this tool. It provides an example call, but does not explicitly name alternative tools or state when NOT to use this one, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nfl_injuriesARead-onlyIdempotent
NFL injury report for a week.
Returns: [{InjuryID, PlayerID, Name, Position, Team, Status:'Questionable'|'Out'|…, BodyPart, Practice, PracticeDescription, Updated}] — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week's injuries {"season": "2023", "week": 1}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. Required — part of the URL path. | |
| season | Yes | Season. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate these. It adds valuable context by disclosing the return shape (even if unverified), explicitly warning that the shape is approximate and not yet confirmed against a live response, and specifying the auth key requirement. These are behavioral details beyond the structured annotations and genuinely help the agent know what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and not bloated. It opens with a one-sentence purpose, then provides the return shape, a caveat about that shape, a concrete example, and the auth requirement. The information is ordered logically and every sentence earns its place. It could be slightly tighter by moving the auth line earlier, but overall it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with only two parameters and no output schema, the description is fairly complete. It lists the return fields, gives an example, and notes the auth requirements. It does not cover potential errors, pagination, or the exact interpretation of 'week' (e.g., regular season vs playoff weeks), but these are minor gaps given the tool's simplicity and the provided context. The caveat about the unverified shape adds important practical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters ('Week number. Required — part of the URL path.' and 'Season. Required — part of the URL path.'), giving 100% coverage. The description adds an example ({'season': '2023', 'week': 1}) but does not elaborate on format constraints (e.g., whether season is a four-digit year or something else) or edge cases. This matches the baseline of 3 for high schema coverage with minimal additional semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an NFL injury report for a given week, naming the resource (injuries) and the temporal scope. It lists the expected fields, making the purpose concrete. However, it does not explicitly differentiate itself from sibling injury tools like mfl_injuries or mysportsfeeds_injuries, so it misses the last step of disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example call with season and week, and notes the auth key requirement, but it never states when to use this tool versus alternatives. There are multiple other injury endpoints in the sibling list (e.g., mfl_injuries, mysportsfeeds_injuries) and no guidance on how to choose among them. The usage guidance is limited to a single example, with no exclusions or context about preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nfl_projectionsARead-onlyIdempotent
Projected NFL player game statistics for a week.
Returns: [{PlayerID, Name, Team, Position, PassingYards, PassingTouchdowns, RushingYards, ReceivingYards, Receptions, FantasyPoints, FantasyPointsPPR, FantasyPointsDraftKings, FantasyPointsFanDuel}] — SHAPE FROM VENDOR DOCS. Note the per-operator scoring columns: DraftKings and FanDuel score differently, so use the matching one.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week's projections {"season": "2023", "week": 1}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. Required — part of the URL path. | |
| season | Yes | Season. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the bar is lower. The description adds substantial value by disclosing the shape is from vendor docs and unverified, advising to inspect actual payload. It also notes authentication requirements and per-operator scoring differences. This is transparent and goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: a single purpose sentence, a return shape, a note, an example, and auth info. Each sentence earns its place—no fluff. The structure with 'Returns:', 'NOTE:', 'Example:', and 'Auth:' makes it scannable with all critical information front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of an output schema, the description lists the exact return fields, making the payload predictable. It also covers the data reliability caveat, an example call, and authentication. Given the tool's simplicity (2 params, no nested objects), this is a complete and self-contained description that answers likely questions an agent would have.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters 100% but only describes them as 'Required — part of the URL path.' The description's example ({"season": "2023", "week": 1}) adds concrete format and type semantics, clarifying that season is a string like '2023' and week is an integer. This adds value beyond the minimal schema descriptions, though it could have explained the season format more explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Projected NFL player game statistics for a week.' This is specific, identifies the resource (NFL player game statistics) and the scope (projections for a week), and naturally distinguishes it from sibling tools like sportsdataio_nfl_scores or sportsdataio_nfl_teams. The return shape and example further reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use (projections for a week) and an example invocation. It also provides a usage hint about per-operator scoring columns ('DraftKings and FanDuel score differently, so use the matching one'). However, it does not explicitly state when not to use this tool or name alternative tools for other data types (scores, injuries, etc.), so it stops short of full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nfl_scoresARead-onlyIdempotent
NFL scores for one season and week.
Returns: [{GameKey, SeasonType, Season, Week, Date, AwayTeam, HomeTeam, AwayScore, HomeScore, Quarter, TimeRemaining, PointSpread, OverUnder, StadiumDetails}] — SHAPE FROM VENDOR DOCS. SeasonType 1=pre, 2=regular, 3=post.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week's scores {"season": "2023", "week": 1}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. Required — part of the URL path. | |
| season | Yes | Season with an optional type suffix: 2023, 2023PRE, 2023POST. The BARE year is the regular season. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is covered. The description adds valuable behavioral context: the return shape is from vendor docs and unverified, the meaning of SeasonType values, and the need to inspect actual payload. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and concise despite including detailed return shape, caveat, example, and auth info. Each section earns its place, and the information is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool, the description provides everything needed: inputs, output shape, auth, and a caveat about unverified data. It does not explicitly differentiate from alternative NFL score tools, but the overall coverage is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage), but the description adds extra meaning by explaining the season type suffix (e.g., '2023POST') and clarifying that a bare year means regular season. The example also reinforces parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('returns') and resource ('NFL scores for one season and week'), with a specific scope that differentiates it from sibling NFL tools like sportsdataio_nfl_teams. The explicit return shape clarifies the exact data provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to get scores for a specified season and week) via the example, but it does not explicitly contrast with alternatives or mention when not to use it. No exclusion criteria or alternative tool recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nfl_teamsARead-onlyIdempotent
NFL franchises with conference, division, stadium and coach.
Returns: [{Key:'BUF', TeamID, PlayerID, City, Name, Conference, Division, FullName, StadiumDetails:{…}, HeadCoach, OffensiveCoordinator, PrimaryColor}] — SHAPE FROM VENDOR DOCS. Fields are PascalCase throughout this API.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every NFL team
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description adds valuable context: the return shape is unverified from vendor docs and should be treated as approximate, and authentication requires a provider key. This honesty about uncertainty and auth requirements exceeds the baseline 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and information-dense. Every sentence adds value: the summary line, return shape example, verification caveat, usage example, and auth note. No unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description provides a detailed return shape sample and auth requirements. It acknowledges the shape is unverified, which is honest but also means the agent must inspect actual payloads. For a zero-parameter static data tool, this is sufficient and transparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the baseline is 4. The description compensates by documenting the return shape with specific field names and PascalCase convention, adding semantic meaning even though no parameters need explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource ('NFL franchises') and the specific data included (conference, division, stadium, coach). The example 'Every NFL team' reinforces the intent. This distinguishes it from sibling NFL tools like sportsdataio_nfl_scores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving NFL team metadata but does not explicitly state when to use it versus alternative tools or provide exclusions. The 'Example: Every NFL team' gives a use case but no guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdataio_nhl_games_by_dateARead-onlyIdempotent
NHL games on a date, with the line.
Returns: [{GameID, Season, Status, DateTime, AwayTeam, HomeTeam, AwayTeamScore, HomeTeamScore, Period, TimeRemainingMinutes, PointSpread, OverUnder, Periods:[…]}] — SHAPE FROM VENDOR DOCS. The keyless official nhl provider is deeper for play-by-play and box scores.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A date's NHL games {"date": "2024-01-15"}
Auth: needs your own key in SPORTSDATAIO_MLB_KEY or SPORTSDATAIO_NBA_KEY or SPORTSDATAIO_NFL_KEY or SPORTSDATAIO_NHL_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description proactively warns that the return shape is unverified and approximate, which is important behavioral context beyond the readOnlyHint/openWorldHint annotations. It also discloses the auth dependency (env key) and that the shape may not match live responses, adding transparency about potential discrepancies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, return shape, caveat, example, and auth. While longer than minimal, every section earns its place, though the 'SHAPE FROM VENDOR DOCS' line and the following NOTE somewhat redundantly repeat the unverified nature of the shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description covers all essential context: what it returns (with field list), how to call it (example), prerequisites (auth key), and a critical reliability caveat. It also points to an alternative for more detailed data, making the tool usable standalone without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single `date` parameter with format and requirement. The description adds a concrete example value and notes the date is part of the URL path, but this provides marginal additional meaning beyond the schema's 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: returns NHL games for a given date, including betting lines ('with the line'). It identifies the resource (NHL games), the filter (date), and the additional data (point spread/over-under), making it distinguishable from sibling NBA/MLB date-based tools and other NHL providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to the keyless official `nhl` provider for deeper play-by-play and box scores, clearly delineating when to use this tool versus an alternative. It also provides an example call and auth key requirements, giving concrete usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsdata_session_statsARead-onlyIdempotent
How this server has performed for you THIS session: per-tool call counts, error rates, error codes, latency buckets, and how often a tool succeeded but returned nothing.
Useful when a tool seems to be misbehaving — a 100% error rate with code
AUTH_REQUIRED means a missing key, while a high empty count on a working tool
usually means the upstream has no data for what was asked, not that the call is
wrong.
This is read from local counters. Nothing here has been sent anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds meaningful context: data comes from local counters, is session-specific, and 'Nothing here has been sent anywhere,' assuring privacy and non-mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: what it reports, how to interpret signs of misbehavior, and a privacy/scope note. No filler, well-structured, and appropriate length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema present, the description covers all essential information: purpose, usage guidance, and behavioral context. It is fully sufficient for an agent to decide when to use the tool and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the schema is empty (100% coverage). No parameter description is needed, and the baseline for zero-parameter tools applies, so no additional value can be added here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool reports: per-tool call counts, error rates, error codes, latency buckets, and empty-result counts. It explicitly scopes to 'THIS session', which distinguishes it from the many sports-data sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Useful when a tool seems to be misbehaving' and provides concrete interpretation examples (AUTH_REQUIRED means missing key, high empty count means no upstream data). This gives the agent explicit guidance on when to invoke it and how to interpret results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_bookmakersARead-onlyIdempotent
The bookmakers indexed, with the ids used in byBookmaker.
Returns: {success:true, data:[{bookmakerID, name, isLive}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every bookmaker
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: the return shape (with field names), a clear caveat that the shape is from vendor docs and may be unverified, and the authentication requirement (SPORTSGAMEODDS_API_KEY). This goes beyond the annotations and helps the agent understand reliability and setup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence serves a purpose: definition, return shape, reliability caveat, example, and auth. It is front-loaded with the core purpose, then adds essential caveats. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description covers the essential aspects: what it returns, the shape, reliability uncertainty, and auth. The 'indexed' phrasing is slightly ambiguous but the example and shape clarify it. It is appropriately complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description references the output field 'byBookmaker' which gives useful context about how the returned IDs are used, but no parameter explanation is needed. The description does not detract from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (bookmakers) and states that it returns the bookmakers indexed, along with the ids used in byBookmaker. The example 'Every bookmaker' reinforces that this is a list-all operation. However, it lacks an explicit action verb like 'List' or 'Retrieve', which slightly reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of 'ids used in byBookmaker' implies a use case: to obtain bookmaker IDs for use in other tools that require that parameter. This is useful but does not explicitly state when to use this tool versus alternatives or when not to use it. No exclusion 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.
sportsgameodds_eventsARead-onlyIdempotent
Events with their odds attached, including player props. The main tool here.
Returns: {success:true, data:[{eventID, leagueID, sportID, status:{started, completed, displayShort}, teams:{home:{teamID, names}, away:{…}}, odds:{'':{oddID, statID, statEntityID, periodID, betTypeID, sideID, bookOdds, bookSpread, bookOverUnder, byBookmaker:{'':{odds, spread, overUnder, available, lastUpdatedAt}}}}}], nextCursor} — SHAPE FROM VENDOR DOCS. NOTE odds is an OBJECT KEYED BY oddID, not a list, and each entry carries a byBookmaker map: two levels of dictionary before you reach a price.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL events with odds {"leagueID": "NFL", "oddsAvailable": true}
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. | |
| cursor | No | From `nextCursor` of the previous page. | |
| eventID | No | One event. | |
| sportID | No | Sport id. | |
| leagueID | No | League id, e.g. NFL. | |
| bookmakerID | No | Restrict odds to one bookmaker. | |
| startsAfter | No | ISO date — events starting after this. | |
| startsBefore | No | ISO date — events starting before this. | |
| oddsAvailable | No | true = only events that currently have prices. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, detailing the exact return shape, the nested odds object keyed by oddID, and the two-level byBookmaker dictionary. It also warns that the shape is unverified and should be treated as approximate, and explains authentication needs. This adds significant context the annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but each section earns its place: purpose, return shape, caveat, example, and auth. The structure is logical and front-loaded, though the return shape block is dense and could be slightly reorganized for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by specifying the return structure, nested dictionaries, pagination via nextCursor, and the unverified nature of the vendor docs. It also covers authorization and provides a concrete example, making it complete for a complex, read-only odds tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds an example combining leagueID and oddsAvailable, which provides some practical context, but it doesn't add detailed semantics per parameter beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Events with their odds attached, including player props' and calls it 'The main tool here,' which differentiates it from sibling sportsgameodds tools and other odds providers. The verb+resource is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description positions this as the primary events-with-odds tool for the provider and includes an example with leagueID and oddsAvailable to show typical usage. However, it doesn't explicitly mention when to prefer alternative tools or any exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_leaguesARead-onlyIdempotent
Leagues, with the leagueID other tools filter on (NFL, NBA, MLB, NHL, EPL, NCAAF…).
Returns: {success:true, data:[{leagueID:'NFL', sportID:'FOOTBALL', name, enabled}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Football leagues {"sportID": "FOOTBALL"}
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sportID | No | Restrict to one sport. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only/idempotent behavior, and the description adds critical context: the return shape is unverified vendor documentation, likely approximate, and requires inspecting the actual payload. It also discloses the need for a personal API key. This goes beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose, followed by return shape, a caveat, an example, and auth note. Each section earns its place, though it is somewhat long; the vendor-verification caveat is important and justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides an approximate return shape, an example, and auth details, which is sufficient for a simple read-only list tool. It lacks a full enumeration of sportID values or error conditions, but the unverified-shape warning makes the agent well-prepared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the only parameter, sportID, with 'Restrict to one sport.' The description adds a concrete example using 'FOOTBALL', which offers slight extra value but does not enumerate valid values or add meaningful semantic depth beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as leagues with league IDs used by other tools (e.g., NFL, NBA, MLB), and includes the return shape with leagueID/sportID/name/enabled. It distinguishes from sibling sportsgameodds tools by emphasizing that other tools filter on leagueID, but it lacks an explicit verb like 'list' or 'get', relying on the 'Returns:' line for action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'the leagueID other tools filter on' and provides an example with 'sportID': 'FOOTBALL', plus notes auth requirements. It does not explicitly name alternative tools or state when not to use this tool, but the context is clear enough for an agent to know this is the reference for league IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_playersARead-onlyIdempotent
Players, with the playerIDs that appear inside prop oddIDs.
Returns: {success:true, data:[{playerID:'JOSH_ALLEN_1_NFL', teamID, leagueID, firstName, lastName, position}]} — SHAPE FROM VENDOR DOCS. The playerID is the statEntityID half of a prop's oddID, which is how you find every market on one player.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A team's players {"leagueID": "NFL", "teamID": "BUFFALO_BILLS_NFL"}
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| teamID | No | Team id. | |
| leagueID | No | League id. | |
| playerID | No | One player. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent; description adds critical caveats: the return shape is unverified from vendor docs, no key is held, and auth is required via SPORTSGAMEODDS_API_KEY. This goes beyond the schema and annotations, though it doesn't cover rate limits or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and structured: purpose, return shape, verification caveat, example, and auth. Each section adds value, though the JSON return shape block takes up space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description covers the essential return shape, a usage example, data-verification caveat, and auth requirement. It lacks notes on pagination or empty results, but the combination of annotations and description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions are minimal ('Team id.', 'League id.', 'One player.'), but the description adds meaning by explaining playerID's relationship to oddIDs and providing a concrete example with values like 'BUFFALO_BILLS_NFL' and 'NFL'. This helps an agent understand format and usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a tool for player data, linking playerIDs to prop oddIDs, and the return shape confirms it lists player objects. This distinguishes it from sibling sportsgameodds tools like teams or events, though it lacks an explicit verb like 'List' or 'Get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context that playerID is the statEntityID half of a prop's oddID, telling agents when to use this to resolve player info from props. The example with leagueID and teamID shows a concrete call pattern, but no explicit alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_sportsARead-onlyIdempotent
Sports covered, with the sportID other tools filter on.
Returns: {success:true, data:[{sportID:'FOOTBALL', enabled}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Every sport
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the unverified nature of the return shape, advises the agent to inspect the actual payload, and states the auth key requirement. These add valuable context beyond the read-only annotations, showing strong transparency about data reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for purpose, return shape, note, example, and auth. Each section adds necessary value, and the main message is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a simple parameterless lookup tool, the description provides a full picture: it explains the purpose, the return shape (even if approximate), an example, auth requirements, and a reliability caveat. This is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the baseline is 4. The description explains that the output contains sportID values that other tools filter on, which gives meaningful context to the response. It doesn't need to explain parameter details since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the sports covered and that the sportID field is used by other tools for filtering. This distinguishes it from sibling tools like sportsgameodds_leagues or sportsgameodds_events, which have their own specific resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used to discover the sportID values needed for other sportsgameodds tools, and it provides an example. However, it does not explicitly state when not to use it or mention alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_statsARead-onlyIdempotent
The statistics catalogue — the statIDs that form the first segment of every prop oddID.
Returns: {success:true, data:[{statID:'passing_yards', name, leagueID, entityType:'player'|'team'}]} — SHAPE FROM VENDOR DOCS. Read this before constructing prop filters; guessing statIDs is the usual way to get an empty result.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL statistics {"leagueID": "NFL"}
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueID | No | League id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses that the response shape is from vendor docs, unverified against live response, and approximate. It also mentions the auth requirement (SPORTSGAMEODDS_API_KEY). This adds significant behavioral context and manages expectations about data reliability, exceeding 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose, return shape, usage warning, verification caveat, example, and auth note. Each sentence contributes unique information with no redundancy. The format uses clear sections and is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter, no output schema, and rich annotations, the description fully carries the context. It provides the return shape, an example call, a warning about unverified vendor shape, and auth requirements. An agent would be well-equipped to decide when and how to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with the description 'League id.' The description adds an example with 'leagueID: "NFL"' and contextualizes it as 'NFL statistics', which helps the agent understand how to populate the parameter. This extra example goes beyond the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a catalogue of statIDs that form the first segment of prop oddIDs, and returns the shape with statID, name, leagueID, and entityType. This distinguishes it from sibling tools like sportsgameodds_leagues or sportsgameodds_teams, which serve different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Read this before constructing prop filters' and warns that guessing statIDs leads to empty results. This gives a clear when-to-use directive. However, it does not explicitly name alternative tools or conditions where this tool should not be used, so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sportsgameodds_teamsARead-onlyIdempotent
Teams in a league, with the teamIDs used inside event objects.
Returns: {success:true, data:[{teamID, leagueID, names:{long, medium, short}, colors}]} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL teams {"leagueID": "NFL"}
Auth: needs your own key in SPORTSGAMEODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| teamID | No | One team. | |
| leagueID | No | League id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnly/openWorld/idempotent annotations by disclosing that the return shape is from vendor docs and unverified, instructing users to inspect the actual payload. It also clearly states the auth key requirement. This adds valuable behavioral context not present in annotations, though it omits details like pagination or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear shape definition, a prominent caveat about unverified vendor documentation, a concrete example, and an auth note. Each section serves a purpose and the formatting improves readability. It is slightly longer than necessary, but the added detail about uncertainty and authentication is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a detailed return shape and a usage example. It also covers authentication and warns about data reliability. It does not address pagination or error scenarios, but for a simple two-parameter lookup tool with strong annotations, the level of detail is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with basic descriptions ('One team.' and 'League id.'), giving 100% coverage. The description adds a practical example for leagueID and clarifies that teamIDs are those used in events, but it does not explain how the optional teamID parameter behaves (e.g., single vs. multiple teams) or the default when no filter is provided. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as teams in a league and notes that the returned teamIDs are the ones used inside event objects, distinguishing it from sibling tools like sportsgameodds_leagues or sportsgameodds_events. However, it lacks an explicit verb (e.g., 'Get' or 'List'), starting with a noun phrase instead, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage example with leagueID: 'NFL', and explains that teamIDs from this tool are referenced in event objects, implying when this tool is useful. It also states the auth requirement. It does not explicitly mention when not to use it or name alternatives, but the context is clear enough for a basic lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_gamesARead-onlyIdempotent
AFL fixture + results: each game with scores by goals/behinds, venue, and completion state.
Returns: {games:[{id, round, year, date, unixtime, venue, hteam, hteamid, hscore, hgoals, hbehinds, ateam, ateamid, ascore, agoals, abehinds, complete, is_final, winnerteamid, updated}]}
Example: Round 1 of 2026 {"q": "games", "year": 2026, "round": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | games |
| game | No | A single game id. | |
| team | No | Only games involving this team id. | |
| year | No | Season, e.g. 2026. Omit for the current season. | |
| round | No | Round number. Omit for the whole season (~100 KB). | |
| complete | No | 100 = completed games only, 0 = not started. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world behavior. The description adds useful behavioral details: the exact return structure, the note that no authentication is needed, and the data fields included. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line summary, a clear return type snippet, an example, and an authentication note. Every section earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the description includes return fields, an example, and auth requirements, which compensates partially for the lack of an output schema. The schema handles parameter details, so the overall context is adequate, though it does not mention data freshness or size limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all six parameters, so the baseline is 3. The description adds an example with q, year, and round, but it does not add new meaning beyond the schema's already detailed parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns AFL fixture and result data with scores, venue, and completion state. This specific verb+resource combination distinguishes it from sibling tools like squiggle_teams, squiggle_standings, and squiggle_ladder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and shows an example with parameters, making it obvious when to use it. It does not explicitly name alternatives or exclusions, but the scope is evident from the summary and the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_ladderARead-onlyIdempotent
PROJECTED end-of-season ladder per model, with each team's simulated finishing-position distribution (swarms).
Returns: {ladder:[{source, sourceid, year, round, team, teamid, rank, mean_rank, wins, percentage, swarms:[str], updated}]} — swarms is the simulated distribution over finishing positions; rank here is PROJECTED, unlike squiggle_standings
Example: Projected ladder after round 1, 2026 {"q": "ladder", "year": 2026, "round": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | ladder |
| year | No | Season. | |
| round | No | Projection as at this round. Recommended — a season is ~100 KB. | |
| source | No | Only this model's projection (id from squiggle_sources). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and open-world, so no safety contradiction exists. The description adds valuable behavioral context beyond annotations: it explains that 'rank' is projected (not actual), describes the 'swarms' distribution, and notes the data size implication (~100 KB) and that no auth is needed. This enriches the agent's understanding without repeating annotation properties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a structured return format, an example query, and an auth note. Every sentence contributes unique information, and the return payload is clearly formatted with field names, making it scannable and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description includes the full return structure, semantics of key fields, an example invocation, and authentication requirements. It also addresses the practical concern of data size and differentiates from a sibling tool, making the description self-sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all parameters (100% coverage), so the baseline is 3. The description goes further by advising 'q' is fixed ('Leave as-is') and recommending the 'round' parameter based on data size ('Recommended — a season is ~100 KB'), adding practical meaning that aids parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'PROJECTED end-of-season ladder per model', clarifying this returns simulated projections, not actual standings. It explicitly distinguishes itself from squiggle_standings by stating 'rank here is PROJECTED, unlike squiggle_standings' and introduces the unique 'swarms' field, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: it is for projected ladders, directly contrasting with squiggle_standings. It also offers parameter guidance ('round: Projection as at this round. Recommended — a season is ~100 KB'), helping the agent decide on parameter values. However, it does not explicitly state when *not* to use it or name other alternatives beyond squiggle_standings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_sourcesARead-onlyIdempotent
The forecasting models Squiggle tracks — call this first to learn the sourceid values the tip tools filter on.
Returns: {sources:[{id, name, url, icon}]} — id is the source filter on squiggle_tips / squiggle_ladder
Example: Every tracked model {"q": "sources"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | sources |
| year | No | Only models active in this season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the safety profile is known. The description adds valuable behavioral context beyond this: the return structure ({sources:[{id, name, url, icon}]}), the semantic meaning of 'id' as a filter, an example query, and confirmation that no authentication is needed. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense. It front-loads the primary purpose, then provides return format, an example, and auth status. There is no wasted prose—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description is fully complete: it specifies the purpose, the exact return structure, the relationship to sibling tools, an example, and auth requirements. Given the low complexity and rich annotations, no further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear meaning for both parameters: 'q' (leave as-is) and 'year' (season filter). The description adds an example use of 'q' with the fixed value 'sources', reinforcing the schema, but it does not add further semantic detail beyond the schema. Since schema covers all parameters, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing the forecasting models Squiggle tracks and providing sourceid values used by tip tools. It uses a specific verb ('call this first to learn') and directly distinguishes itself from related sibling tools like squiggle_tips and squiggle_ladder by explaining the filtering relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool: 'call this first to learn the sourceid values the tip tools filter on.' This provides clear context for usage and implies an ordering relative to squiggle_tips and squiggle_ladder. It doesn't explicitly list when not to use it, but the guidance is sufficiently clear for a simple lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_standingsARead-onlyIdempotent
The ACTUAL AFL ladder — real wins/losses/percentage, not a projection.
Returns: {standings:[{rank, id, name, played, wins, losses, draws, pts, for, against, percentage, goals_for, goals_against, behinds_for, behinds_against}]}
Example: Current 2026 ladder {"q": "standings", "year": 2026}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | standings |
| year | No | Season. | |
| round | No | Ladder as it stood after this round. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds that no authentication is needed, that the returned data is actual (not projected), and provides the exact return structure. This is useful behavioral context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear purpose statement, a return type listing, an example, and an auth note. Every sentence earns its place, with no redundancy or filler. The front-loaded purpose sentence makes the tool's function immediately obvious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple standings tool, the description provides the return shape, an example, and auth status, making it largely self-sufficient. However, it does not specify behavior when year or round are omitted, nor does it explicitly differentiate from the sibling tool squiggle_ladder, leaving minor but non-critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with clear descriptions for q, year, and round, so the baseline is 3. The description adds a concrete example (q='standings', year=2026) that clarifies typical usage, but it does not explain the round parameter beyond what the schema already states. Thus it meets the baseline without substantial added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'The ACTUAL AFL ladder — real wins/losses/percentage, not a projection,' which unambiguously states the tool returns real AFL standings and distinguishes it from projected ladders. The return structure further confirms the purpose. Though it lacks an explicit verb, the resource and differentiation are clear enough for a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'not a projection' implies this tool should be used when actual standings are needed, but no alternative tool is explicitly named. The example illustrates a typical call but does not provide explicit when-to-use vs. when-not-to-use guidance, leaving the agent to infer the intended usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_teamsARead-onlyIdempotent
AFL clubs with Squiggle's team ids — the id every other Squiggle tool keys off.
Returns: {teams:[{id, name, abbrev, logo, debut, retirement}]} — retirement 9999 means still active
Example: All AFL clubs {"q": "teams"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | teams |
| year | No | Restrict to teams active in this season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral details beyond annotations, such as the return shape, the sentinel value 'retirement 9999 means still active', and the lack of required auth. This enriches the agent's understanding of what the tool actually returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose in the first sentence. Each subsequent piece (return shape, sentinel, example, auth) adds meaningful information without redundancy. It is slightly longer than strictly necessary, but all content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple look-up tool with no output schema, the description is quite complete: it covers purpose, return format, special sentinel value, example usage, and auth requirements. The only minor gap is that it does not elaborate on the year parameter, but the schema handles that. Overall, the tool is well-specified for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. Both parameters (q and year) are fully described in the schema: q is 'Leave as-is' and year restricts to teams active in a season. The description reinforces q usage through an example but does not add additional semantics beyond the schema, so it meets, but does not exceed, the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns AFL clubs with Squiggle's team IDs, and emphasizes that this ID is the key every other Squiggle tool uses. This distinguishes it from many sibling tools that also list AFL teams (e.g., afl_teams_list, afl_clubs_list) by highlighting the Squiggle-specific ID mapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'the id every other Squiggle tool keys off', which signals when to use this tool: when you need Squiggle team IDs to use in other Squiggle tools. It also provides an example call and notes that auth is not needed. However, it does not explicitly name alternative tools or state when not to use it, so it misses the full 'when-not' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
squiggle_tipsARead-onlyIdempotent
What each model tipped for a game: winner, predicted margin, confidence %, and — for played games — whether it was right.
Returns: {tips:[{gameid, round, year, date, source, sourceid, hteam, hteamid, ateam, ateamid, tip, tipteamid, margin, confidence, hconfidence, hmargin, correct, bits, err, updated}]} — confidence is a %, bits is the model's information score, correct is null until played
Example: Every model's tips for round 1, 2026 {"q": "tips", "year": 2026, "round": 1}
Auth: none needed.
Also answers this: apisports_football_predictions, datagolf_pre_tournament, datagolf_pre_tournament_archive.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Leave as-is. | tips |
| game | No | Tips for one game id (every model's view of it). | |
| year | No | Season. | |
| round | No | Round. Strongly recommended — a whole season is ~100 KB. | |
| source | No | Only this model's tips (id from squiggle_sources). | |
| complete | No | 100 = only games already played (so `correct` is meaningful). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds meaningful behavioral context. It details the return schema with all fields explained, including that 'correct is null until played,' that confidence is a percentage, and that bits is an information score. It also states 'Auth: none needed.' These disclosures go beyond the annotations. However, it does not address potential large data size beyond the round recommendation, and the 'Also answers this' line is unexplained, which could mislead. Still, it provides substantial added transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly structured: a one-line purpose, a detailed return schema, an example, an auth note, and a trailing line. The purpose is front-loaded, which is good. The return schema is thorough and worth its length. However, the final 'Also answers this' sentence is vague and seems out of place, adding noise without clear value. Overall it is moderately concise but could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description is the sole source for return semantics, and it covers every field in the tips array, including null behavior for 'correct' and units for confidence and bits. It provides a realistic example and states authentication requirements. It also warns about round size. The only notable gap is the ambiguous 'Also answers this' statement, which could lead an agent to think this tool handles those other tools' queries without explanation. Otherwise, it is quite complete for a read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all six parameters with descriptions, giving a baseline of 3. The description adds a concrete example ({'q': 'tips', 'year': 2026, 'round': 1}) that shows how to combine parameters, and it notes that round is strongly recommended to limit response size. It does not add meaning to parameters like game or source beyond the schema, but the example is useful. This is adequate but not particularly enriching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'What each model tipped for a game: winner, predicted margin, confidence %, and — for played games — whether it was right.' This names the resource (tips) and the exact data returned, and it distinguishes itself from sibling squiggle tools (teams, games, standings) by focusing on predictions. The example query reinforces the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to choose this tool over alternatives. It does not mention squiggle_teams, squiggle_games, or any sibling, and there is no 'use this when...' or 'use that instead when...' statement. The only hints are an example query and a note that round is strongly recommended, but neither helps an agent select this tool vs. others. The closing line 'Also answers this: apisports_football_predictions, datagolf_pre_tournament, datagolf_pre_tournament_archive' is confusing and does not clarify selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_leaguesARead-onlyIdempotent
The game's public/featured leagues for one sport+season+mode — each with name, code, type, competition_id, experience, description and sponsor metadata. Useful to discover competition_ids and the league types on offer.
Returns: array of {id, name, code, type, competition_id, experience, description, sponsor_filename, sponsor_content}
Example: AFL classic leagues {"sport": "afl", "year": 2026}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true. The description adds 'Auth: none needed', notes these are 'public/featured' leagues, and spells out the return shape, going beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: purpose, return shape, example, and auth in a minimal number of sentences. Every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, return fields, example, and auth; combined with rich schema and annotations, it is sufficient for an agent to invoke this tool. Minor omission: does not mention whether the list is exhaustive or if there are any limits, but the openWorldHint covers extensibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with detailed descriptions (e.g., mode, year calendar nuance, sport options), and the description does not add additional parameter semantics beyond the schema. Baseline 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'public/featured leagues for one sport+season+mode' and enumerates the fields returned, which distinguishes it from sibling tools like supercoach_players or supercoach_teams. The phrase 'Useful to discover competition_ids and the league types on offer' further anchors its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('Useful to discover competition_ids and the league types on offer') but does not explicitly discuss alternatives or exclusions. It implies when to use but doesn't compare to other SuperCoach tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_playerARead-onlyIdempotent
A single player's base record by SuperCoach id (id, first/last name, team_id, previous_games/previous_average/previous_total, feed_id). A thin subset of supercoach_players — for the full price/projection/matchup snapshot use supercoach_players with a round.
Returns: {id, first_name, last_name, team_id, previous_games, previous_average, previous_total, feed_id}
Example: AFL player 1 {"sport": "afl", "year": 2026, "id": 1}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SuperCoach player id (from supercoach_players[].id). Required — part of the URL path. | |
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, idempotent, and openWorld. The description adds value by disclosing the exact return shape and the fact that it is a subset, plus the useful note about no auth required. No contradictions, and it does not need to repeat safety traits already conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, return shape, example, and auth note. Every sentence contributes and there is no repetition of schema fields. It is appropriately sized for a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record fetch with four well-documented params and no output schema, the description provides the return shape, an example, a clear differentiation from the richer sibling, and auth expectations. This is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all four parameters with complete descriptions (100% coverage), so the description does not need to add much. It provides an example that shows parameter values, but does not add semantic meaning beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single player's base record by SuperCoach id, enumerates the exact fields returned, and explicitly contrasts itself with the richer supercoach_players endpoint. This specific verb+resource+scope fully distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage directive: use this for a thin base record, and use supercoach_players with a round for full price/projection/matchup data. It also provides a concrete example with sport 'afl', year 2026, and id 1, and notes auth is not needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_playersARead-onlyIdempotent
THE feed — every player's full snapshot for one round: price + price_change, avg/avg3/avg5, the ppts1 projection, owned %, positions, availability, dated news and the next-three-opponents matchup context. LARGE (~1–3 MB; 174–1032 players depending on sport). Pass round (from supercoach_settings.next_round) for a forward snapshot; loop round=1..current_round with embed=player_match_stats to build a per-round score series. The embed set is CLOSED — only positions, player_stats, player_match_stats, notes, odds add data (anything else is ignored).
Returns: array of {id, first_name, last_name, team:{name, abbrev}, team_id, played_status:{status}, injury_suspension_status_text, positions:[{position, position_long}], notes:[{note, created_on}], player_stats:[{price, price_change, total_price_change, avg, avg3, avg5, ppts1, ppts, owned, total_games, total_points, opp:{abbrev}, opph, oppavg, ven:{name}, venavg, opp1, opp2, opp3, total_<sport stats…>}], player_match_stats:[{games, points}]} — USE ppts1 (real projection, ≈avg, present for afl/nrl; falls back to avg when absent, e.g. nba). AVOID ppts (erratic). In mode=draft each player also carries top-level predraft_rank + player_stats.position_ranks. LARGE.
Example: AFL round-16 forward snapshot (price + projection + matchup) {"sport": "afl", "year": 2026, "round": 16, "embed": "positions,player_stats,notes"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| embed | No | Comma-separated embeds (CLOSED set): positions, player_stats (price/proj/ownership/season totals — the main one), player_match_stats (that round's per-game {games, points} — for the score series), notes (dated news), odds (AFL Brownlow odds only). Default 'positions,player_stats,notes'. | positions,player_stats,notes |
| round | No | Round number. REQUIRED in practice: player_stats are scoped to this round. Omitting it does NOT return the whole season. Use supercoach_settings.next_round for the upcoming-round projection, or loop 1..current_round for history. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds substantial behavioral detail: the large payload size (~1–3 MB), the closed embed set (anything else is ignored), the guidance to use ppts1 over ppts (with fallback behavior), and the draft-mode additions. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence adds value: overview, size warning, usage guidance, return shape, field guidance, draft mode, example, and auth. It is well-structured and front-loaded with the most critical information, making it appropriately dense for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and large response, the description is exceptionally complete. It covers size, embed constraints, ppts1/ppts semantics, year edge cases, round requirements, draft mode, and gives a concrete example. The lack of an output schema is fully compensated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all parameters, the description adds significant meaning: round is 'REQUIRED in practice' despite a default, year is not always the calendar year (with fallback instructions), the embed closed set is explicitly listed, and mode=draft adds fields. This goes beyond the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'THE feed' and explicitly states the tool returns 'every player's full snapshot for one round' with a detailed list of fields. It is a specific verb ('feed') + resource ('players') + scope ('one round'), and it distinguishes itself from sibling tools like supercoach_player (single player) by covering all players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage scenarios: passing `round` for a forward snapshot, looping rounds with `embed=player_match_stats` for a historical series, and notes the closed embed set. It does not explicitly name alternative sibling tools or state when not to use this tool, but the context is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_real_fixtureARead-onlyIdempotent
Fixtures for one game+season — each carries kickoff, both teams, venue/location, final scores (team1_score/team2_score + verbose), live match_status/period, AND the head-to-head bookmaker odds (team1_odds/team2_odds + bookmaker title/link). Pass round for one round, or omit it for the whole season (AFL ≈ 207 rows). Paginate with page/page_size.
Returns: array of {id, season, round, kickoff, team1, team2, location, venue, team1_score, team2_score, team1_score_verbose, team2_score_verbose, team1_odds, team2_odds, margin_game, match_status, period, period_status, featured, team1_bookmaker_title, team1_bookmaker_link, …}
Example: AFL round-16 fixtures + scores + odds {"sport": "afl", "year": 2026, "round": 16}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| page | No | 1-based page. | |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| round | No | Round number. Omit for the entire season. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. | |
| page_size | No | Rows per page (default 9998 = effectively all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/openWorld/idempotent annotations, the description adds useful behavioral context: the return shape (array of fixture objects), approximate season size (AFL ~207 rows), pagination behavior, and the fact that no auth is needed. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose statement, usage notes, return field list, example, and auth note. It's a bit longer than minimal, but every section adds value for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a detailed field list and example, covering the main behaviors. It lacks explicit statements about sorting or error cases, but overall it gives enough context for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minor value by noting the AFL season size for pagination and showing an example, but parameter meanings are already fully covered in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns fixtures for a SuperCoach game+season, including kickoff, teams, venue, scores, live status, and head-to-head odds. The example with sport/year/round and the detailed field list distinguish it from sibling fixture tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the round parameter (pass for one round, omit for full season), pagination, and provides an example. It doesn't name alternative tools or give when-not-to-use, but the context makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_settingsARead-onlyIdempotent
Competition state for one game+season: competition.current_round (last round scored), next_round (the one to project), is_lockout / lockout_start / lockout_end, is_closed, num_users, num_leagues. Call this FIRST to learn which round to pass to supercoach_players. Tiny (~15 KB).
Returns: {system, game, content, competition:{current_round, next_round, status, is_lockout, is_partial_lockout, lockout_start, lockout_end, is_closed, num_users, num_leagues}}
Example: AFL current round / next round {"sport": "afl", "year": 2026}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| min | No | min=true returns a slimmer settings blob; false (default) includes the full competition/system/content sections. | |
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and open-world. The description adds useful behavioral context beyond annotations: 'Tiny (~15 KB)', the exact response shape, an example call, and 'Auth: none needed.' It does not mention rate limits or failure modes, but for a small read-only settings endpoint, the added context is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loaded with the core purpose, then moves to usage, return structure, and example. However, there is some redundancy: the 'Returns:' section repeats fields already listed in the opening sentence. Each sentence contributes value, but the duplication slightly lowers efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, read-only, and returns a small structured payload. The description covers the purpose, key fields, usage workflow (call before supercoach_players), expected size, authentication, and provides a concrete example. No output schema exists, but the description explicitly lists the return structure, making the tool fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter descriptions in the input schema already fully explain sport, year, mode, and min. The description adds an example ('{"sport": "afl", "year": 2026}') and a note about round selection, but does not materially enrich the parameter semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Competition state for one game+season' with a specific list of returned fields (current_round, next_round, lockout info, etc.). It distinguishes itself from sibling tools by explicitly saying 'Call this FIRST to learn which round to pass to supercoach_players', making its role in the workflow unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this FIRST to learn which round to pass to supercoach_players.' This provides clear context and a concrete predecessor relationship. It does not mention explicit when-not-to-use or alternatives beyond the single downstream tool, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
supercoach_teamsARead-onlyIdempotent
The club/team catalogue for one game+season (AFL 18, NRL 17, EPL 20, NBA 30, NBL 10, NFL 32, BBL 8) — each with id, name and abbrev. Join team_id from supercoach_players back to here.
Returns: array of {id, name, abbrev, ...}
Example: AFL clubs {"sport": "afl", "year": 2026}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise. | classic |
| year | Yes | Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path. | |
| sport | Yes | Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent. The description goes beyond by stating the return shape ('array of {id, name, abbrev, ...}'), explicit 'Auth: none needed', and an example request. This adds meaningful behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: five short sentences plus a JSON example. Each part serves a purpose—purpose, contents, join hint, return shape, example, auth—with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description provides purpose, return shape, auth, supported sports, and an example. It is complete for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with detailed descriptions for all three parameters (mode, year, sport). The description's example and team counts add marginal context, but the schema already explains the parameters thoroughly, so the description does not significantly compensate or add beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a club/team catalogue for a specific game and season, listing counts per sport and fields (id, name, abbrev). It distinguishes itself from player tools by explicitly noting the join from supercoach_players, and is distinct from generic team list tools by its SuperCoach-specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that this is for fetching SuperCoach team catalogues, with a concrete use case: 'Join team_id from supercoach_players back to here.' It does not explicitly name alternatives or when-not-to-use conditions, but the context is sufficient for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_cms_callARead-onlyIdempotent
Fetch one of TAB's CMS content feeds from cmsapi.tab.com.au by operation name (homepage / offers / promotions / racing). Each ships the standard query defaults (platform, os, jurisdiction, authentication-status); override jurisdiction via query_params if needed. Read tab://cms/operations for the list.
Returns: (JSON object)
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world; the description adds useful behavior beyond that: the upstream host, standard query defaults, jurisdiction override semantics, and authentication requirements/benefits. No contradiction with the annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, organized into purpose, return, and auth sections, and every sentence adds useful information. It avoids redundancy with the schema and front-loads the core behavior before secondary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic CMS feed call with no output schema, the description offers the essential context: what the operation values represent, where to find the authoritative list, how to override jurisdiction, and what authentication unlocks. It could provide more detail about the actual response shape, but the pointer to the catalogue and clear return type make it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds extra meaning by enumerating example operation values and explaining that query_params can override the jurisdiction default. It also clarifies the auth-related behavior of credentials, enriching the parameter context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Fetch'), a precise resource ('TAB's CMS content feeds from cmsapi.tab.com.au'), and the selection mechanism ('by operation name') with concrete examples. It is immediately distinguishable from generic sports-data siblings like tab_sports or other TAB tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: fetching CMS content feeds by named operation, and it points to a catalogue resource to find valid operations. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_competitionARead-onlyIdempotent
Competition page: its matches, bet options and (optionally) top markets.
Returns: {id, name, matches:[{id, name, startTime, _links:{self}}], betOptions, sameGame}
Example: AFL competition page {"sport": "AFL Football", "competition": "AFL"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport name, e.g. "AFL Football". Required — part of the URL path. | |
| competition | Yes | Competition name, e.g. "AFL", "AFL Futures". Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| numTopMarkets | No | Top markets to inline per match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description does not contradict them. It adds useful behavioral context by explaining that authentication is optional, that providing TAB credentials unlocks more data, and by documenting the exact return shape. This goes beyond the structured annotations without being misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose comes first, followed by a precise return shape, a concrete example, and a brief auth note. Every section earns its place and there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does well to state the return fields, provide an example invocation, and clarify auth requirements. It does not detail betOptions/sameGame structures or jurisdiction nuances, but the schema plus annotations cover the essential calling requirements well enough for a read-only endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters, so the baseline is 3. The description adds some conceptual linkage by noting that top markets are optional, aligning with numTopMarkets, and it shows an example for sport and competition. However, it does not add meaningful semantic detail for jurisdiction beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns a competition page with its matches, bet options, and optionally top markets, and it provides a concrete return shape. It clearly focuses on competition-level data, though it does not explicitly distinguish itself from sibling tools such as tab_match or tab_match_markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the phrase 'Competition page' and the listed contents, but there is no explicit guidance about when to prefer this tool over alternatives like tab_match, tab_tournament, or other TAB endpoints. It gives an example and auth context, but not when/when-not or alternative selection advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_featured_eventsARead-onlyIdempotent
Editorially featured events across racing + sports for the homepage carousel.
Returns: {nextToGoRaces:[{raceName, raceNumber, raceStartTime}], prioritySports:[{name, competitionName}], nextToGoMatches:[{name, startTime}]}
Example: Featured events for NSW {"jurisdiction": "NSW"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate those. It adds useful behavioral context by documenting the return shape, showing an example call, and explaining that authentication is optional but may unlock more data. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loaded with the core purpose. The return-shape block, example, and auth note each provide useful information, though the example is slightly ambiguous in formatting and could be more clearly labeled as an input example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does well to spell out the exact return fields. It also covers the single optional parameter, provides an example, and clarifies authentication expectations. Combined with the strong annotations, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the only parameter, jurisdiction, is documented as 'State jurisdiction.' The description adds an example value (NSW) but does not meaningfully expand on the schema's semantic explanation, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: editorially featured events across racing and sports for the homepage carousel. It lacks an explicit verb like 'list' or 'get', but the combination of the resource scope and the 'Returns' clause makes the tool's function clear. It is distinguishable from single-sport or non-featured sibling tools like tab_sports_next_to_go or tab_recommendation_featured.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the homepage carousel' provides clear context for when this tool is appropriate. However, it does not explicitly name alternatives or state when not to use it, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_live_events_summaryARead-onlyIdempotent
Summary of events currently in-play / live across sports.
Returns: {liveMatches:{count, sports:[{name, displayName, count}]}, _links}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and open-world behavior; the description adds that the tool works without a key, that optional credentials may unlock more, and gives a concrete return shape. It does not contradict annotations. The phrase 'unlocks more' is vague, and data freshness or jurisdiction effects are not described, but the added disclosure is still meaningful given the strong annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose first, then Returns, then Auth. There is no filler, and each section provides information needed to select or invoke the tool without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter live-summary tool with no output schema, the description provides the essential return shape, auth behavior, and scope. The main gaps are the exact effect of the jurisdiction parameter and what additional data the auth tokens unlock, but these are minor for a simple aggregate call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single optional jurisdiction parameter with a default value and a description, giving 100% schema description coverage. The description adds no parameter-level detail, so a baseline score of 3 is appropriate because the schema carries the parameter-documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns a summary of events currently in-play or live across sports, and the Returns block confirms it is an aggregate count grouped by sport. It doesn't explicitly distinguish itself from sibling live-event tools like pinnacle_sport_matchups_live or pointsbet_sports_inplay, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Summary of events currently in-play / live' plus the grouped-count return shape implies this is for high-level live-event counts rather than detailed match data. However, it never explicitly says when to prefer this tool over the many sibling live-score/matchup tools, nor does it state exclusions. The auth note is useful but is not usage-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_matchARead-onlyIdempotent
Full match book: all markets + bet options, Same Game Multi, contestants, live state and stats.
Returns: {id, name, startTime, markets:[{id, name, betOption, bettingStatus, closeTime}], sameGame, contestants, inPlay, stats}
Example: One AFL match's full markets {"sport": "AFL Football", "competition": "AFL", "match": "Adelaide v Geelong"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| match | Yes | Match name, e.g. "Adelaide v Geelong". Pass raw spaces. Required — part of the URL path. | |
| sport | Yes | Sport name, e.g. "AFL Football". Required — part of the URL path. | |
| competition | Yes | Competition name, e.g. "AFL". Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context by showing the exact return shape and explaining auth behavior: 'works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.' 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then gives a compact return structure, a concrete example, and an auth note. Every sentence earns its place, and the example is especially useful for an agent constructing inputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by specifying the return fields. It covers required inputs with an example, describes return contents, and discloses auth requirements. Minor gaps remain around error behavior and whether the response can be large, but these are not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a concrete example mapping sport, competition, and match to values, but it does not add meaning beyond the schema, which already explains that the three required parameters are part of the URL path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a comprehensive match lookup: 'Full match book: all markets + bet options, Same Game Multi, contestants, live state and stats.' It is distinct enough from the sibling tab_match_markets because it promises the full match payload rather than only markets, though it never explicitly names the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by showing an example input for a single AFL match and listing the broad returned content, but it gives no explicit guidance on when to choose this tool over alternatives like tab_match_markets or tab_sgm_price. The intended context is clear but no exclusions or comparison are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_match_marketsARead-onlyIdempotent
Just the markets + selections + prices for one match (leaner than the full match object).
Returns: {markets:[{id, name, betOption, bettingStatus, propositions:[{name, returnWin}]}], betOptionPriority}
Example: Markets for one AFL match {"sport": "AFL Football", "competition": "AFL", "match": "Adelaide v Geelong"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| match | Yes | Match name, e.g. "Adelaide v Geelong". Pass raw spaces. Required — part of the URL path. | |
| sport | Yes | Sport name, e.g. "AFL Football". Required — part of the URL path. | |
| competition | Yes | Competition name, e.g. "AFL". Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: auth is optional (works without a key) and returns a concrete shape of the response. This exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose comes first, followed by return shape, an example, and auth notes. Every section provides distinct value with little redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by listing the return structure and giving a sample invocation. It also clarifies auth requirements. Minor omissions like error behavior or what happens when a match is not found are acceptable for a simple read-only market query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the role of sport, competition, match, and jurisdiction. The description supplements this with a concrete AFL example, but the example mostly echoes the schema's existing parameter documentation rather than adding substantially new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource: markets, selections, and prices for one match, and frames it as a leaner alternative to the full match object. This differentiates it from sibling tools like tab_match without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly scopes the tool to a single match and contrasts it with the fuller match object, giving agents a clear decision signal. It does not name a specific alternative tool, but the 'leaner than the full match object' phrase gives enough context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_multi_builderARead-onlyIdempotent
Multi-builder items for one sport (suggested legs / combinations for building multis).
Returns: {id, name, sportName, displayName, ...multi-builder markets for the sport}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport code/name, e.g. "NRL", "AFL". Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds useful auth context: it works without a key, and TAB_CLIENT_ID, TAB_CLIENT_SECRET, or TAB_REFRESH_TOKEN can unlock more. This does not contradict the annotations and provides beyond-schema operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then return shape, then auth. Every sentence earns its place, and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the Returns snippet usefully indicates the shape (id, name, sportName, displayName, plus multi-builder markets) and confirms what the agent will receive. The purpose and auth behavior are covered. A fuller explanation of what 'multi-builder markets' contains would strengthen it, but the parameters are simple and annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so sport and jurisdiction are already described with meaningful detail in the input schema. The description only reinforces the 'one sport' notion and adds no new parameter syntax, format, or allowed-value guidance. A baseline of 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'multi-builder items for one sport' and clarifies they are suggested legs/combinations for building multis. It lacks an explicit verb like 'list' or 'get', but the Returns line makes the operation clear. It is distinguishable from generic match/market tools, though it does not name a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the scope: the tool returns multi-builder items for one sport, so an agent can choose it when needing multi-builder suggestions for a specific sport. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_price_slipARead-onlyIdempotent
PRICE A BET SLIP on your own account and get the decoTokens that tab_place_bet requires. The account-tier twin of tab_sgm_price: same envelope, but only this version issues the tokens that bind a bet to a quoted price.
Returns: {uuid, clientDetails:{accountNumber, customerId, channel, jurisdiction, homeState}, bets:[{type, status, stake, legs:[{decoToken, type, propositionId, odds}], multiplierAvailable, …}]} — VERIFIED live 2026-08-27.
THE decoToken IS THE POINT OF THIS CALL. Each priced leg comes back carrying one, and tab_place_bet will not take a leg without it. That token is what binds the bet to a price TAB actually quoted — so unlike Sportsbet, where the client asserts a number and hopes, here the quote is a thing you hold. Price, then place with the tokens you were given; never with tokens from an older enquiry.
THIS IS THE ACCOUNT-TIER TWIN OF tab_sgm_price. Same service, same envelope, but addressed at /accounts/{accountNumber}/ and authenticated — and only this version issues decoTokens. tab_sgm_price stays the right tool for comparing prices across books; this one is for the moment before placing.
bets[].status is 'ok' on a priced bet, and per-leg errors surface alongside rather than as an HTTP failure — read them before assuming a price.
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| bets | Yes | The slip: [{"type": "FIXED_ODDS", "stake": "1.00", "legs": [{"type": "WIN", "propositionId": 1016, "odds": "2.00"}], "enableToteGuarantee": false, "enableMultiplier": false, "source": "…"}]. `propositionId` comes from tab_match_markets — markets[].propositions[].id as an INTEGER. Stake and odds are STRINGS. | |
| uuid | Yes | A fresh UUID identifying this enquiry. | |
| channel | No | Leave as `web`. | web |
| jurisdiction | Yes | Your state: NSW, VIC, ACT, QLD, SA, NT or TAS. Prices and availability differ by jurisdiction, so this is not cosmetic. | |
| accountNumber | Yes | Your own TAB account number. This only ever prices against YOUR account. Required — part of the URL path. | |
| clientVersion | No | Client version string the site sends; cosmetic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses the critical decoToken binding mechanic, that per-leg errors appear in the response body rather than as HTTP failures, and that auth works without a key while env vars unlock more. It also provides the return shape. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into purpose, return shape, token rationale, sibling comparison, error behavior, and auth. The capitalization and repeated 'twin' phrasing are slightly redundant, but every section contributes operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by giving a concrete return structure including uuid, clientDetails, bets, legs, decoTokens, and odds. It also covers the workflow constraint, per-leg error handling, and auth requirements, making it complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 6 parameters with detailed descriptions, including the exact bets payload, string types for stake/odds, integer propositionId sources, jurisdiction list, and defaults. Tool description therefore doesn't need to repeat parameter semantics; schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'PRICE A BET SLIP on your own account and get the decoTokens that tab_place_bet requires.' It clearly distinguishes itself from tab_sgm_price as the account-tier twin, so an agent can identify what this tool uniquely does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use this tool instead of the sibling: tab_sgm_price is for comparing prices across books, while this one is 'for the moment before placing.' It also instructs the sequence — price with this tool, then place with the returned tokens and never with tokens from an older enquiry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_datesARead-onlyIdempotent
Racing dates that have meetings (today, tomorrow, future), each linking to its meetings.
Returns: {dates:[{meetingDate, dateName, _links:{meetings}}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction: NSW, VIC, QLD, ACT, SA, TAS or NT. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: it works without a key and that setting TAB_CLIENT_ID, TAB_CLIENT_SECRET, or TAB_REFRESH_TOKEN unlocks more. It also discloses the return shape. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact with three clear sections: what the tool returns, the return shape, and auth requirements. Every sentence earns its place and the core purpose is front-loaded. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, no required parameters, and no output schema, the description adequately covers the return structure and auth behavior. It could be more explicit about what the meetings links resolve to or what 'unlocks more' means, but the agent has enough to call and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'jurisdiction' is fully described in the schema with default value and allowed states, achieving 100% schema description coverage. The tool description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (racing dates that have meetings) and the scope (today, tomorrow, future), and clarifies that each date links to its meetings. This distinguishes it from meeting- or race-level tools. However, it uses a noun phrase rather than an explicit verb like 'List', and does not name a sibling to differentiate from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is an entry point for browsing racing dates by stating which dates are included and that each links to its meetings. It doesn't explicitly state when to use this tool instead of siblings like tab_racing_meetings or betr_todays_races, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_futures_meetingsARead-onlyIdempotent
Futures racing meetings (ante-post / long-dated markets like Cup outrights).
Returns: {meetings:[{meetingName, raceType, races:[{raceName, meetingDate, _links}]}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| returnPromo | No | Inline promotions. | |
| jurisdiction | No | State jurisdiction. | NSW |
| returnOffers | No | Inline bonus-bet offers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description discloses the return envelope (`{meetings:[...]}`) and auth behavior (works without a key; TAB_* environment variables unlock more). This adds useful operational context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a definition line, a return-shape line, and an auth line. Each sentence adds distinct information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with zero required parameters and no output schema, this description is self-sufficient: it explains the response structure, notes authentication requirements, and gives enough market context to inform correct invocation. No critical information appears missing for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (`returnPromo`, `jurisdiction`, `returnOffers`) are already covered by the input schema with descriptions, so the baseline applies. The tool description adds no parameter-specific guidance, but the schema already provides adequate meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as futures racing meetings (ante-post / long-dated markets like Cup outrights) and the returned `meetings` array signals a list operation. However, it does not explicitly distinguish itself from closely related siblings such as `tab_racing_futures_race` beyond the word 'meetings' in the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful conceptual context about what futures markets are, but it does not state when to use this tool versus alternatives like `tab_racing_futures_race` or `sportsbet_racing_futures`. Usage timing is implied by the resource type rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_futures_raceARead-onlyIdempotent
Racecard for one FUTURES market: futures URLs put the race NAME (not a number) in the race slot, so the integer-typed tab_racing_race cannot reach them.
Returns: {raceName, raceStartTime, runners:[{runnerNumber, runnerName, fixedOdds:{returnWin, returnPlace, bettingStatus}}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date from the futures listing, YYYY-MM-DD. Required — part of the URL path. | |
| raceName | Yes | Race name from the futures listing, e.g. "Queen Anne Stakes (All In)". Required — part of the URL path. | |
| raceType | Yes | Race code: R/G/H. Required — part of the URL path. | |
| fixedOdds | No | Include fixed-odds prices (futures are fixed-odds only). | |
| jurisdiction | No | State jurisdiction. | NSW |
| venueMnemonic | No | Futures meeting name, e.g. "Racing Futures", "Greyhound Futures". | Racing Futures |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond those: the return shape and the auth behavior ('works without a key; ... unlocks more if set'). This gives the agent a solid understanding of what the call returns and what credentials affect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The return shape and auth note are provided in separate short sections with no wasted words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description compensates well by including the full return shape. It also covers auth and the differentiator from the sibling tool. It could go slightly further by pointing to tab_racing_futures_meetings as the source for obtaining the required date/raceName values, but that is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra meaning by explaining why raceName is a string rather than a numeric ID and why this tool exists separately from tab_racing_race. This helps the agent populate the required parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a 'Racecard for one FUTURES market' and distinguishes it from the sibling tab_racing_race by explaining that futures URLs use the race NAME rather than a number. This makes the tool's purpose and scope immediately identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is needed: when dealing with futures markets where race names are used in the URL and the integer-typed tab_racing_race cannot be used. It does not explicitly list exclusions or alternative conditions for non-futures races, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_jackpotsARead-onlyIdempotent
Current racing jackpot / carryover pools across meetings.
Returns: {jackpots:[{poolType, meeting, amount}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
Also answers this: pointsbet_racing_hourly_quaddie.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it works without a key, environment variables can unlock more data, and the return payload shape is provided. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: main purpose first, then return payload, auth behavior, and an alias note. Every sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by giving the return shape with field names and types. Auth requirements and the optional jurisdiction paramater are covered. It does not enumerate possible poolType values, but that is not critical for a simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single jurisdiction parameter is fully documented in the input schema as 'State jurisdiction,' so schema coverage is 100%. The description adds no extra parameter semantics, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns current racing jackpot and carryover pools across meetings, and includes the exact return shape. It is not a tautology and is distinguishable from siblings by topic, although it does not use an explicit verb like 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context that this tool also answers pointsbet_racing_hourly_quaddie, which hints at an alternative relationship, but it does not explicitly say when to use this tool versus other jackpot or racing pool tools. There is no clear when/ when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_meeting_racesARead-onlyIdempotent
The races for one meeting (by race type + venue code), each linking to its full racecard.
Returns: {races:[{raceNumber, raceName, raceStartTime, raceStatus, hasFixedOdds, _links:{self, form}}]}
Example: Races at the Hawkesbury thoroughbred meeting {"date": "", "raceType": "R", "venueMnemonic": "HAW"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date, YYYY-MM-DD. Required — part of the URL path. | |
| raceType | Yes | Race code: R thoroughbred, G greyhound, H harness. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| venueMnemonic | Yes | Venue code, e.g. HAW (Hawkesbury), from the meeting object. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by specifying the exact return shape and disclosing authentication behavior, including that it works without a key and that additional environment variables unlock more data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose first, then return shape, then a concrete example, then auth notes. Every section earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return structure, an example with realistic parameter values, and authentication guidance, while the schema fully documents all four parameters. It is complete enough for an agent to invoke the tool correctly, though it does not explain edge cases like raceStatus values or pagination, which are minor for this read-only list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents date, raceType, jurisdiction, and venueMnemonic with meaningful descriptions. The tool description adds a concrete example that ties the parameters together, but it does not add substantial new 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the races for one meeting, scoped by race type and venue code, and notes each race links to its full racecard. It does not use an explicit verb like 'retrieve' or 'list', and it does not directly contrast sibling tools, but the scope is specific enough to distinguish it from tab_racing_meetings and tab_racing_race.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the example and the parameter descriptions: an agent should call this when it has a date, raceType, and venueMnemonic for a meeting. However, the description never states when to prefer this over sibling tools such as tab_racing_race or tab_racing_meetings, nor does it give any exclusions or alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_meetingsARead-onlyIdempotent
All race meetings (thoroughbred/greyhound/harness) for a date, each with its races.
Returns: {meetings:[{meetingName, location, raceType, venueMnemonic, trackCondition, races:[{raceNumber, raceName, raceStartTime}], _links:{races}}]}
Example: All meetings for a day {"date": ""}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date, YYYY-MM-DD. Required — part of the URL path. | |
| returnPromo | No | Inline promotions. | |
| jurisdiction | No | State jurisdiction (NSW, VIC, …). | NSW |
| returnOffers | No | Inline bonus-bet offers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context beyond the annotations by disclosing authentication behavior: "works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set." It also documents the response shape, which is especially valuable given no output schema is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears in the first sentence, followed by a concise return-shape block, a single example, and an auth note. Every section earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates well by providing the full return structure, an example invocation, and auth requirements. It is complete enough for an agent to call the tool correctly. A small gap is that it does not clarify how optional parameters like jurisdiction or returnPromo affect the response, but the schema covers their definitions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters and their formats. The description adds only a generic example with a "today" placeholder, which reinforces the date usage but does not add meaningful semantics beyond what the parameter descriptions already provide. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, scoped statement: "All race meetings (thoroughbred/greyhound/harness) for a date, each with its races." This clearly identifies the resource, scope, and included race types, and differentiates it from sibling tools like tab_racing_meeting_races or tab_racing_race by emphasizing the all-meetings-for-a-date granularity. The provided return shape further reinforces the tool's exact purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need the complete set of race meetings for a given date, including their races. It does not explicitly name alternatives or state when not to use it, but the scope is unambiguous enough for an agent to select it appropriately among racing-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_next_to_goARead-onlyIdempotent
Races about to jump across all codes, ordered by start time; each links to its racecard.
Returns: {races:[{raceName, meeting:{venueMnemonic, raceType}, raceStartTime, raceNumber, _links:{self}}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| returnPromo | No | Inline promotions. | |
| jurisdiction | No | State jurisdiction. | NSW |
| returnOffers | No | Inline bonus-bet offers. | |
| includeFixedOdds | No | Inline fixed-odds prices. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds useful behavioral detail by specifying the return shape and noting that no key is required while extra credentials can unlock more data. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose stated first, followed by the return shape and auth behavior. Every line adds actionable information without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple read-only listing tool: it states purpose, ordering, output structure, links to racecards, and authentication expectations. Without an output schema, the inline return shape fills the gap well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific detail beyond the schema, which is acceptable given the complete schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool provides: races about to jump, across all codes, ordered by start time, each with a racecard link. This clearly distinguishes it from sibling tools like tab_racing_meetings or tab_sports_next_to_go.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for imminent races but does not explicitly state when to use this tool versus alternatives or when not to use it. It gives context through 'about to jump' and 'ordered by start time,' but lacks direct routing guidance among the many related racing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_raceARead-onlyIdempotent
Full racecard for one race: runners with fixed + parimutuel odds, form ratings, pools, bet types; results + dividends once run.
Returns: {raceNumber, raceName, raceDistance, raceStartTime, runners:[{runnerNumber, runnerName, fixedOdds, parimutuel, riderDriverName, barrierNumber, last5Starts}], results, pools, betTypes, multiLegApproximates}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date, YYYY-MM-DD. Required — part of the URL path. | |
| raceType | Yes | Race code: R/G/H. Required — part of the URL path. | |
| raceNumber | Yes | Race number at the meeting. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| venueMnemonic | Yes | Venue code, e.g. HAW. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful context beyond annotations by explaining auth behavior (works without a key, more unlocks with credentials) and that results/dividends appear once the race has run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a concise summary, followed by a compact return-shape block and an auth note. Each section earns its place, especially since there is no output schema, though the return-shape block is somewhat detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates well by listing the return fields and runner sub-fields. Required parameters are fully documented in the schema, auth is clarified, and the tool's open/read-only nature is covered by annotations. It is complete enough for an agent to invoke correctly, though it omits explicit differentiation from similar racing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, including required flags and URL-path notes, so the baseline is 3. The description does not add parameter-level details beyond the schema; its extra detail focuses on the return payload rather than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: "Full racecard for one race" with runners, odds, form ratings, pools, bet types, and results/dividends once run. This is a specific verb+resource and distinguishes it as a single-race racecard tool, though it does not explicitly name competing sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "Full racecard for one race" implies the tool's scope and when it would be appropriate, and the return-shape description clarifies what data to expect. However, it does not explicitly state when NOT to use it or mention alternatives such as meeting-level or form-only racing tools from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_race_formARead-onlyIdempotent
Detailed form guide for one race (past performances, ratings, comments per runner).
Returns: {raceNumber, formData:[{runnerNumber, runnerName, pastPerformances:[]}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
Also answers this: betr_race_form, pointsbet_racing_form.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date, YYYY-MM-DD. Required — part of the URL path. | |
| raceType | Yes | Race code: R/G/H. Required — part of the URL path. | |
| raceNumber | Yes | Race number. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| venueMnemonic | Yes | Venue code. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent behavior; the description adds auth behavior ('works without a key... unlocks more if set') and a return shape, which is value beyond the structured fields. It does not mention rate limits or pagination, but those are not central for a single-race form guide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sections—purpose, return shape, auth/alternatives—with the main purpose front-loaded. Every sentence earns its place and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param tool with no output schema, it provides a return skeleton and auth context, which is enough for selection and invocation. Minor gaps are the vague 'unlocks more' note and an undefined pastPerformances inner shape, so it is not perfect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: date, raceType, venueMnemonic, raceNumber, and jurisdiction each have descriptions. The tool description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource: 'Detailed form guide for one race' and enumerates contents (past performances, ratings, comments per runner). It also explicitly maps to sibling tools betr_race_form and pointsbet_racing_form, helping an agent distinguish it from meeting-level or other racing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'one race' scope plus 'Also answers this: betr_race_form, pointsbet_racing_form' gives clear context and alternative tool routing. It lacks explicit when-not-to-use conditions or a fuller distinction from tab_racing_race, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_racing_runner_formARead-onlyIdempotent
DETAILED per-runner form: full past-start history with positions, margins, distances and dates.
Returns: {runnerName, runnerNumber, previousStarts/pastPerformances:[{position, fieldSize?, distance, date, margin, ...}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Meeting date, YYYY-MM-DD. Required — part of the URL path. | |
| raceType | Yes | Race code: R/G/H. Required — part of the URL path. | |
| raceNumber | Yes | Race number. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| runnerNumber | Yes | Saddle/box number. Required — part of the URL path. | |
| venueMnemonic | Yes | Venue code. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and open-world, so the description only needs to add non-obvious behavior. It discloses that no API key is required and that providing TAB credentials unlocks more data, which is useful context beyond annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's purpose, followed by a return-shape sketch and an auth note. Every sentence earns its place, though the 'previousStarts/pastPerformances' slash introduces minor ambiguity and 'DETAILED' is unnecessary emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully provides a return-shape sketch, and it explains auth prerequisites. Required identifiers are covered by the schema, so an agent can call the tool correctly, though the vague 'unlocks more' and lack of sibling routing leave some context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters have schema descriptions, including 'Required — part of the URL path' for the five required identifiers, so the schema carries the parameter documentation burden. The description adds no additional parameter semantics, matching the baseline for 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as a per-runner form with 'full past-start history with positions, margins, distances and dates,' which is concrete and distinguishable from race-level form tools. It lacks an explicit verb like 'get' and does not name sibling alternatives, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'per-runner' and 'full past-start history' wording implies use when detailed historical form for a single runner is needed. However, there is no explicit when-to-use/when-not-to-use guidance and no alternative tools are named, so usage remains implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_recommendation_featuredARead-onlyIdempotent
Featured items for one recommendation category (e.g. Jockey Challenge, Racing Extras). 404s when the category isn't currently featured.
Returns: {id, name, displayName, competitions:[{id, name, hasMarkets, _links}], _links}
Example: Featured Jockey Challenge markets {"category": "Jockey Challenge"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Recommendation category, e.g. "Jockey Challenge", "Racing Extras". Pass raw spaces. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description goes well beyond them by disclosing the 404 behavior when the category is not featured, the exact return shape, and authentication requirements. This gives an agent a strong picture of what will happen at call time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, return shape, example, and auth note. Each section earns its place and the purpose is front-loaded. Slightly more verbose than necessary, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 params, no output schema), the description is complete: it explains the resource, the error condition, the return shape, an example invocation, and auth behavior. An agent has everything needed to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents both parameters, including the requirement to pass raw spaces and that category is part of the URL path. The description adds an example but no additional semantic meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Featured items for one recommendation category' with concrete examples like Jockey Challenge and Racing Extras. It clearly scopes the tool to a single category and mentions a 404 error condition, but it does not explicitly distinguish itself from sibling tools such as tab_featured_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, no conditions or exclusions beyond the 404 behavior, and no mention of related TAB tools that might be more appropriate for broader featured content. The example and auth note provide context but not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it propositions from one match, get the combined price and a validation matrix back. Prices combinations TAB has not pre-built.
Returns: {bets:[{status:'ok', legs:[{odds:{decimal:'15.00'}, propositions:[…], redundantPropositions:[{propositionId, status:'redundant'|'valid'}]}]}]} — VERIFIED live 2026-08-28 against AFL Wst Bulldogs v Collingwood: H2H Bulldogs (1.95) + Naughton first goal (11.00) priced 15.00.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. 1.95 x 11.00 is 21.45; TAB returns 15.00, because it applies a correlation adjustment — which is the whole reason to ask rather than multiply. Here it priced DOWN (a Bulldogs win makes a Bulldogs player scoring first likelier); other combinations price up.
REDUNDANT LEGS ARE COLLAPSED, NOT REFUSED. Pick two propositions that imply one another (both sides of a line, say) and TAB drops one, marks it redundant, and prices what is left — so a two-leg request can come back as a one-leg price. ALWAYS check redundantPropositions before reporting: the odds you got may not be the bet you asked for.
Only markets with sameGame: true in tab_match_markets can be combined (52 of 109 on the verified match).
Example: Price a two-leg AFL same game multi {"jurisdiction": "NSW", "bets": [{"type": "FIXED_ODDS", "legs": [{"type": "SAME_GAME_MULTI", "propositions": [{"type": "WIN", "propositionId": 1016}, {"type": "WIN", "propositionId": 8529}]}]}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| bets | Yes | The bet envelope: [{type: 'FIXED_ODDS', legs: [{type: 'SAME_GAME_MULTI', propositions: [{type: 'WIN', propositionId: 1016}, …]}]}]. `propositionId` comes from tab_match_markets — `markets[].propositions[].id`, as an INTEGER. At least two propositions, all from the SAME match. | |
| channel | No | Leave as `web`. | web |
| jurisdiction | Yes | Your state: NSW, VIC, ACT, QLD, SA, NT or TAS. Prices and market availability differ by jurisdiction, so this is not cosmetic. | |
| returnValidationMatrix | No | Keep true: it returns which propositions actually combine, which is the difference between a refusal you understand and one you do not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnlyHint annotations by disclosing the correlation adjustment — the price is not the product of the legs — and the critical behavior that redundant legs are collapsed rather than refused. It explicitly warns agents to check `redundantPropositions` before reporting, and includes a live-verified example with concrete odds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Longer than average, but every block earns its place: purpose first, return shape, correlation warning, redundant-leg warning, eligibility, concrete example, and auth. Critical caveats are capitalized and scannable, with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description supplies a concrete response shape including `bets`, `status: 'ok'`, `redundantPropositions`, and example decimal odds. Combined with eligibility rules, auth note, and a worked request example, an agent has enough to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all four parameters with strong descriptions, so the baseline is 3. The description adds a concrete request example and the key domain constraint that only markets with `sameGame: true` from `tab_match_markets` can be used, enriching parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific imperative — 'PRICE A SAME GAME MULTI you choose' — and names the resource, output, and scope: propositions from one match, combined price, validation matrix, and combinations TAB has not pre-built. This clearly differentiates it from pre-built price functions and sibling SGM tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit conditions: propositions must be from the same match, at least two propositions, only markets with `sameGame: true` in `tab_match_markets` can be combined, and jurisdiction affects pricing. It does not name sibling tools as alternatives for when-not-to-use, so it misses the top bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_sportARead-onlyIdempotent
One sport by name with its competitions. Also fronts the racing-adjacent pseudo-sports (Jockey Challenge, Racing Extras).
Returns: {id, name, competitions:[{id, name, _links:{self}}]}
Example: AFL Football and its competitions {"sport": "AFL Football"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport name, e.g. "AFL Football", "Rugby League", "Jockey Challenge". Pass raw spaces. Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, idempotent read operation, so the bar is lower. The description adds meaningful behavioral context: it works without a key, credentials optionally unlock more data, and it returns a specific object shape. This goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose, return shape, example, and auth are each given in focused sections. Every sentence earns its place, and the core behavior is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by declaring the return structure, giving an example, and explaining auth requirements. The main missing piece is an explicit pointer to sibling tools like tab_sports for list-style lookups, but the description is otherwise sufficient for a two-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both the sport and jurisdiction parameters. The description reinforces the sport parameter with an AFL Football example but adds little semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one sport by name along with its competitions, which distinguishes it from the plural sibling tab_sports and other sport-specific tools. It also discloses the special handling of racing-adjacent pseudo-sports, so an agent knows the exact resource and scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One sport by name...' and the example imply this tool is for retrieving a single sport's competitions, but it never explicitly names alternatives or states when not to use it. An agent must infer that tab_sports is for listing sports and that competition-specific tools like tab_competition are for other granularity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_sportsARead-onlyIdempotent
All sports offered, each linking to its competitions (HATEOAS root for the sports tree).
Returns: {sports:[{id, name, displayName, _links:{self}}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent behavior, so the safety profile is covered. The description adds useful context beyond annotations: authentication requirements, optional key behavior, and the exact response shape with nested self links.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences each provide distinct value: scope and navigation role, exact return shape, and authentication behavior. There is no filler and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity with no required parameters and no output schema, so stating the return shape and auth requirements is largely sufficient. It could optionally explain how the jurisdiction parameter affects the returned sports list, but that omission is partially compensated by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, jurisdiction, is already documented in the input schema with 100% description coverage. The tool description adds no extra parameter-level nuance, but none is needed because the schema handles it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the HATEOAS root of the sports tree, returning all offered sports with links to competitions. This distinguishes it from leaf-level siblings like tab_sport and other sports-listing tools by emphasizing aggregate/root behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'HATEOAS root for the sports tree' implies it should be used as the entry point for navigating sports to competitions. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_sports_next_to_goARead-onlyIdempotent
Sport events about to close, ordered by close time (next-to-go sports feed).
Returns: {matches:[{name, competition, startTime, _links:{self}}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| next | No | Time window, e.g. "12h". | |
| limit | No | Max events to return. | |
| openOnly | No | Only events open for betting. | |
| futuresOnly | No | Only futures markets. | |
| jurisdiction | No | State jurisdiction. | NSW |
| sortByCloseTime | No | Sort by market close time. | |
| featuredCompetitions | No | Restrict to featured competitions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations by documenting the return shape and the auth behavior: it works without a key and additional credentials unlock more data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose statement, a return shape, and an auth note. Every sentence serves a distinct purpose and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only feed with seven fully documented optional parameters, annotations, and an inline return format, the description is largely complete. It covers purpose, response shape, and auth requirements; the only minor gap is the lack of guidance on how parameters interact or when to set them, but the schema covers their individual meanings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters with defaults and examples. The description does not add any extra meaning to the parameters, but it also does not need to because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a next-to-go sports feed returning sport events about to close, ordered by close time. It names the specific resource and ordering behavior, and the 'sports' phrasing distinguishes it from the similarly named racing feed tab_racing_next_to_go, though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is appropriate when the agent needs imminent sport events sorted by closing time, but it does not state when to prefer this over alternatives or provide exclusion criteria. The auth note is operational context, not usage routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_sports_resultsARead-onlyIdempotent
Recently resulted sport events with final scores / settled markets.
Returns: {sports:[{name, competitions:[{matches:[{name, results}]}]}]}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds useful behavioral context: it works without a key, and setting TAB_CLIENT_ID, TAB_CLIENT_SECRET, or TAB_REFRESH_TOKEN unlocks more data. It also provides the return shape, which is valuable since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose statement, a return-shape summary, and an auth note. Every sentence serves a purpose and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, strong annotations, and no output schema, the description is nearly complete: it covers what the tool returns, that it is read-only, and the auth requirements. It could optionally clarify what 'recently resulted' means in terms of time window and what 'unlocks more' includes, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'jurisdiction' is fully described in the schema as 'State jurisdiction' with a default of NSW, so the schema already carries the semantic weight. The description does not add extra detail about valid jurisdictions or how the parameter affects results, but it does not need to compensate heavily due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource: recently resulted sport events with final scores and settled markets. This makes the tool clearly distinguishable from sibling tools like tab_sports_next_to_go and tab_live_events_summary, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'recently resulted' implies the tool is for fetching final results rather than live or upcoming events, but it does not explicitly state when to use this tool versus alternative result/sport tools, nor does it mention exclusions or preferred alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_tournamentARead-onlyIdempotent
Tournament page nested inside a competition (tennis, golf and other tournament-structured sports): its matches with top markets. Competitions whose page shows matches:[] list their events here.
Returns: {id, name, matches:[{id, name, startTime, markets:[...]}], betOptions}
Example: Wimbledon Mens Singles matches {"sport": "Tennis", "competition": "Wimbledon", "tournament": "Wimbledon Mens Singles"}
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport name, e.g. "Tennis". Required — part of the URL path. | |
| tournament | Yes | Tournament name from the competition page, e.g. "Wimbledon Mens Singles". Pass raw spaces. Required — part of the URL path. | |
| competition | Yes | Competition name, e.g. "Wimbledon". Required — part of the URL path. | |
| jurisdiction | No | State jurisdiction. | NSW |
| numTopMarkets | No | Top markets to inline per match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: auth requirements, that it works without a key, and that additional credentials unlock more data. The return shape is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states what the tool returns first, then gives the return shape, an example, and auth notes. No sentence is wasted and the structure makes key facts easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description provides the essential return structure, a concrete invocation example, auth expectations, and the relationship to competition pages. All required parameters are already documented in the schema, so nothing critical is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds a concrete example mapping sport, competition, and tournament to real values, plus the note about raw spaces in tournament names, but does not substantially extend the schema's parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the resource: a tournament page nested inside a competition, returning matches with top markets. The 'Returns:' line and concrete Wimbledon example make the tool's function unambiguous and distinguish it from competition- or match-level tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool is for tournament-structured sports and is used when a competition page lists its events as a tournament. It does not explicitly name sibling alternatives or state when not to use it, but the nesting relationship provides enough guidance for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_trending_propsBRead-onlyIdempotent
Trending sports propositions / bets across the book.
Returns: [{sportName, competitionName, matchName, matchId, ...}] (top-level array)
Auth: works without a key; TAB_CLIENT_ID or TAB_CLIENT_SECRET or TAB_REFRESH_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | State jurisdiction. | NSW |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered without description help. The description adds genuinely useful behavioral context beyond annotations: the return shape ('top-level array' with a partial field list) and the auth behavior ('works without a key; ... unlocks more if set'). However, it stops short of richer disclosure such as the trending time window, result count, or what specifically 'unlocks more' means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line functional statement, then a Returns line, then an Auth line. Each section earns its place, and the primary purpose is front-loaded. Minor inefficiency — the vague 'unlocks more' clause — costs a point but overall structure is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter, read-only tool this is mostly adequate: the description covers purpose, partial return shape, and auth prerequisites, and annotations cover safety. Gaps remain: there is no output schema and the '...' in the return sample leaves the full field set underspecified, the trending time window is unstated, and the jurisdiction param's accepted values are not elaborated. These are open questions an agent would hit when interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the sole parameter 'jurisdiction' has 'State jurisdiction.' plus a default of 'NSW'), so per baseline the schema carries the load. The description adds nothing about the parameter beyond the schema, and the schema's 'State jurisdiction.' is minimal — it doesn't enumerate valid states or clarify that these are Australian jurisdictions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('sports propositions / bets') and scope ('across the book'), which conveys a book-wide trending view rather than a match-specific one. It is clear enough to distinguish from match-level tools like tab_match_markets or tab_price_slip. However, it doesn't explicitly differentiate itself from sibling trending tools like sportsbet_trending_sgm or tab_recommendation_featured.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: 'trending ... across the book' signals this is a discovery/overview tool, and the optional jurisdiction parameter hints at geographic scoping. But there is no explicit when-to-use or when-not-to-use guidance, and no alternative tool is named for cases where a narrower query (e.g. specific match, race, or SGM) would be apt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theoddsapi_event_oddsARead-onlyIdempotent
Odds for ONE event, including player props and other markets not available on the competition-wide call.
Returns: {id, sport_key, commence_time, home_team, away_team, bookmakers:[{key, title, markets:[{key, outcomes:[{name, price, point, description}]}]}]} — a single object, unlike the competition call's array; description carries the player name on prop markets
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One event's markets {"sport": "soccer_epl", "eventId": "", "regions": ["au"], "markets": ["h2h"]}
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | sport_key. Required — part of the URL path. | |
| eventId | Yes | Event id from theoddsapi_odds or theoddsapi_events. Required — part of the URL path. | |
| markets | No | Includes player-prop markets here, e.g. player_pass_tds. | |
| regions | No | Bookmaker regions. | |
| oddsFormat | No | Price format. One of: decimal, american. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses the return structure, warns that the shape is unverified and approximate, advises inspecting the actual payload, and notes the auth key requirement. This is honest and thorough about reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, return schema, reliability note, example, and auth. It is slightly long but every part adds value—especially the inline return schema and the unverified-payload warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description compensates with an inline return schema, an example, an explicit reliability caveat, and auth requirements. All parameters are covered by the schema. The tool is effectively fully specified for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all five parameters with 100% coverage. The description adds an example call and clarifies the eventId source, but no additional parameter-specific semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Odds for ONE event' and distinguishes it from the 'competition-wide call' (theoddsapi_odds). It specifies the resource (event odds) and scope (single event, including player props), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need single-event odds, player props, or markets not available on the competition-wide call. It contrasts the single-object return with the competition call's array, but does not explicitly state when not to use it or list alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theoddsapi_eventsARead-onlyIdempotent
Upcoming events for a competition WITHOUT odds. Free — costs no quota — so use it to find event ids cheaply.
Returns: [{id, sport_key, sport_title, commence_time, home_team, away_team}] (top-level array, no bookmakers)
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Upcoming EPL fixtures {"sport": "soccer_epl"}
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | sport_key. Required — part of the URL path. | |
| dateFormat | No | Timestamp format. One of: iso, unix. | iso |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent hints, but the description adds valuable behavioral context: the response shape includes no bookmakers, the shape is unverified from vendor docs and should be inspected, auth via THE_ODDS_API_KEY is required, and the call costs no quota. These go beyond the structured annotations and inform the agent of important caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections: purpose, return shape, caveat note, example, and auth. Each sentence earns its place. It is slightly longer due to the unverified-shape warning, but that is necessary context. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list endpoint with 2 params and no output schema, the description is complete. It covers purpose, return shape, example usage, auth requirement, and a critical caveat about unverified data. The annotations handle safety and idempotency, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions (100% coverage), so the baseline is 3. The description adds an example ('{"sport": "soccer_epl"}') and repeats that sport is a sport_key, but does not add new semantics beyond the schema. It doesn't describe valid sport_key values or further explain dateFormat.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States clearly: 'Upcoming events for a competition WITHOUT odds.' This gives a specific verb+resource+scope and differentiates from sibling odds tools (e.g., theoddsapi_odds) by explicitly excluding odds. The example 'Upcoming EPL fixtures' further clarifies the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Free — costs no quota — so use it to find event ids cheaply.' This explains the primary use case and implies when-not-to-use (when odds are needed, since it says WITHOUT odds). It lacks a named alternative but gives clear context and a specific motivation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theoddsapi_historical_oddsARead-onlyIdempotent
Odds as they stood at a past timestamp — the paid-tier time machine for CLV work.
Returns: {timestamp, previous_timestamp, next_timestamp, data:[…same shape as theoddsapi_odds…]} — WRAPPED in a snapshot envelope, unlike the live call. Historical access is a PAID add-on: the free tier returns 401/422 here.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: EPL odds at a past moment {"sport": "soccer_epl", "date": "2024-08-16T12:00:00Z", "regions": ["au"], "markets": ["h2h"]}
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO8601 timestamp to snapshot, e.g. 2024-08-16T12:00:00Z. | |
| sport | Yes | sport_key. Required — part of the URL path. | |
| markets | No | Markets. | |
| regions | No | Bookmaker regions. | |
| oddsFormat | No | Price format. One of: decimal, american. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description adds critical behavioral details: the response is wrapped in a snapshot envelope with timestamp fields, the free tier returns 401/422, and the payload shape is unverified and approximate. This is transparent and manages expectations about reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening purpose, a return-shape section, an important caveat, a concrete example, and an auth note. Every sentence adds value, and it is front-loaded with the core concept. It is appropriately sized for a tool with this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains the return envelope and references the sibling odds shape. It also covers paid-tier restrictions, unverified data caveat, and authentication requirement. The example further anchors the parameter usage, making the tool fully understandable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds a concrete example showing how 'sport', 'date', 'regions', and 'markets' combine, which further clarifies usage. Since the schema fully documents semantics, the example is a modest but real enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool returns 'Odds as they stood at a past timestamp' and positions it as the 'paid-tier time machine for CLV work.' It also distinguishes itself from the sibling live call by noting the 'snapshot envelope, unlike the live call,' so the purpose is specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use it (past-timestamp queries, CLV work) and notes the paid-tier requirement with free-tier error codes. It implies the alternative is the live call (theoddsapi_odds) by contrasting the response shape, though it does not explicitly name other tools or state 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.
theoddsapi_oddsARead-onlyIdempotent
Odds for a competition across many bookmakers. QUOTA COSTS markets × regions per call — keep both narrow.
Returns: [{id, sport_key, sport_title, commence_time, home_team, away_team, bookmakers:[{key, title, last_update, markets:[{key:'h2h', last_update, outcomes:[{name, price, point}]}]}]}] — outcome name is a TEAM NAME, not home/away; point appears on spreads/totals only
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: EPL head-to-head across AU books {"sport": "soccer_epl", "regions": ["au"], "markets": ["h2h"]}
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | sport_key from theoddsapi_sports, e.g. soccer_epl, americanfootball_nfl. Required — part of the URL path. | |
| markets | No | h2h, spreads, totals, outrights. EACH market multiplies the quota cost. | |
| regions | No | Bookmaker regions: us, us2, uk, eu, au. EACH region multiplies the quota cost. | |
| eventIds | No | Restrict to specific event ids. | |
| bookmakers | No | Specific bookmaker keys instead of whole regions (does not reduce quota cost). | |
| dateFormat | No | Timestamp format. One of: iso, unix. | iso |
| oddsFormat | No | Price format. One of: decimal, american. | decimal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the exact return shape, clarifying that outcome `name` is a team name and `point` appears only on spreads/totals, and warning that the shape is from vendor documentation and has NOT been verified against a live response. It also notes quota cost behavior and the need for THE_ODDS_API_KEY, providing rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but each section earns its place: purpose, quota warning, return shape, disclaimer, example, and auth note. The structure is clear with a returns block and note, though it could be slightly more concise by trimming redundant quota cost mentions already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully details the return structure, clarifies tricky fields, provides a runnable example, warns about data reliability, and states authentication requirements. This is complete for a read-only, idempotent odds endpoint and leaves little ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with descriptions for all 7 parameters, including quota cost notes for `markets` and `regions`. The description repeats the quota cost warning and gives an example, but it does not add semantic meaning beyond what the schema already offers, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Odds for a competition across many bookmakers' and provides an example (EPL head-to-head across AU books), which makes its function evident. It does not explicitly differentiate itself from sibling tools like theoddsapi_event_odds, but the resource and scope (many bookmakers) are specific enough to distinguish it from events, scores, and historical odds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful guidance on parameter usage (QUOTA COSTS markets × regions per call — keep both narrow) and an example invocation. However, it does not explicitly state when to use this tool over alternatives such as theoddsapi_event_odds or theoddsapi_scores, so the selection context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theoddsapi_scoresARead-onlyIdempotent
Live and recently-completed scores for a competition.
Returns: [{id, sport_key, commence_time, completed, home_team, away_team, scores:[{name, score}], last_update}] — scores is null until the game starts; score values are STRINGS
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Recent EPL scores {"sport": "soccer_epl", "daysFrom": 1}
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | sport_key. Required — part of the URL path. | |
| daysFrom | No | Include completed games from this many days ago (1-3). Omitting it returns live/upcoming only. | |
| dateFormat | No | Timestamp format. One of: iso, unix. | iso |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description adds critical context: the exact return shape, that scores is null until game start, score values are strings, and a warning that the shape is unverified from vendor docs. It also explicitly mentions auth requirements. This goes well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, return type, note, example, and auth sections. It front-loads the core purpose and each section earns its place, though it is slightly verbose. Still efficient for the complexity involved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully specifies the return shape, data types, null behavior, and provides an example. It also flags the unverified vendor doc shape, which is crucial for agent decision-making. The tool is simple enough that this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for all three parameters. The description's example adds a mild illustration but does not introduce new semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Live and recently-completed scores for a competition', which uses a specific verb and resource. It clearly distinguishes this scores tool from sibling tools like theoddsapi_odds and theoddsapi_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context and a concrete example (EPL scores with sport and daysFrom), but it does not explicitly mention alternatives or when not to use this tool. It implies usage via the example but lacks direct comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
theoddsapi_sportsARead-onlyIdempotent
Every sport/competition with its key. FREE — this call costs no quota. Start here to get the sport_key the other tools need.
Returns: [{key:'americanfootball_nfl', group:'American Football', title, description, active, has_outrights}] (top-level array)
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: In-season competitions
Auth: needs your own key in THE_ODDS_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | true also returns out-of-season competitions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context beyond those: it states the call is FREE with no quota cost, warns that the returned shape is from vendor docs and unverified against a live response, mentions the top-level array structure, and requires the user's own API key. These are meaningful behavioral disclosures that are not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate lines for purpose, return shape, caveat, example, and auth. It is front-loaded with the most important info. However, the 'Example: In-season competitions' line is ambiguous and adds little value, and the description could be tightened without losing content. Overall it is concise and every major clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a simple, single-optional-parameter tool with no output schema, the description provides sufficient context: return shape, auth requirement, quota impact, and a data quality caveat. The lack of an output schema is compensated by the explicit return example. Minor gaps include not clarifying the default filter behavior (in-season only) and the vague example, but these are covered in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single parameter 'all' ('true also returns out-of-season competitions'). The description does not add additional parameter semantics beyond the schema; it only mentions 'Example: In-season competitions,' which is somewhat vague and does not clarify the default behavior or the 'all' flag beyond what the schema already states. Per the rubric, a baseline of 3 is appropriate when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns every sport/competition with its key, and explicitly positions it as the starting point for getting the sport_key needed by other tools. It distinguishes itself from siblings like theoddsapi_odds and theoddsapi_events by emphasizing its role as the discovery entry point. However, it lacks a crisp verb like 'list' or 'get' in the opening statement, relying on 'Start here to get' to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'Start here to get the sport_key the other tools need.' It also mentions that the call costs no quota, which informs usage. It does not explicitly name alternatives or when-not-to-use scenarios, but the 'start here' directive makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_liking_usersARead-onlyIdempotent
Users who liked a given post.
Returns: {data:[{id, username, name}], meta:{result_count}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post id. Required — part of the URL path. | |
| max_results | No | Results per page (1-100). | |
| user_fields | No | User fields (CSV). | username,name,verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior; the description adds valuable context by specifying the return shape ({data:[{id, username, name}], meta:{result_count}}) and the authentication requirement (X_BEARER_TOKEN). This goes beyond annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the purpose, followed by concise return format and auth. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema coverage, the description adequately covers purpose, return structure, and auth. It lacks usage alternatives or pagination behavior details, but these are not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter descriptions, including id being part of the URL path and max_results constraints. The description adds no additional parameter details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Users who liked a given post' and implies the action of retrieving them. It is distinct from sibling tools like twitter_retweeted_by or twitter_quote_tweets, though it lacks an explicit verb like 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention sibling tools or exclusion criteria, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_quote_tweetsARead-onlyIdempotent
Posts quoting a given post.
Returns: {data:[{id, text, author_id, public_metrics}], meta:{result_count, next_token}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Quoted post id. Required — part of the URL path. | |
| max_results | No | Results per page (10-100). | |
| tweet_fields | No | Post fields (CSV). | created_at,author_id,public_metrics |
| pagination_token | No | Pagination token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety profile. The description adds valuable context by specifying the exact return shape ({data:[{id, text, author_id, public_metrics}], meta:{result_count, next_token}}) and stating the authentication requirement (X_BEARER_TOKEN). This goes beyond the structured fields and helps the agent understand pagination and output layout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: a one-line purpose, a clear 'Returns' block with the response schema, and an 'Auth' note. No extraneous words or repetition of schema details. Every sentence earns its place, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list endpoint with no output schema, the description is quite complete: it states the resource, the return structure, and authentication. It also hints at pagination via next_token in the meta. It could have mentioned that results are paginated via the pagination_token parameter, but the schema already documents that. Overall, it provides sufficient context for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for all 4 parameters (id, max_results, tweet_fields, pagination_token), so the schema carries the heavy lifting. The description does not add extra meaning to the parameters beyond the schema, such as format details or inter-parameter dependencies. It does implicitly reference id via 'a given post', but this is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Posts quoting a given post" clearly indicates the tool retrieves posts that quote a specific post, aligning with the tool name and the required 'id' parameter. It distinguishes from sibling tools like twitter_tweets or twitter_search_recent by focusing specifically on quote tweets. However, the phrasing is slightly ambiguous ('posts' as verb vs noun) and doesn't explicitly state 'list' or 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by naming the resource (quoted post) and including parameters like max_results and pagination_token, suggesting a paginated listing operation. However, it does not explicitly state when to prefer this tool over alternatives such as twitter_search_recent or twitter_tweets, nor does it provide exclusions or preconditions beyond the auth note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_retweeted_byARead-onlyIdempotent
Users who reposted a given post.
Returns: {data:[{id, username, name, verified, public_metrics}], meta:{result_count}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post id. Required — part of the URL path. | |
| max_results | No | Results per page (1-100). | |
| user_fields | No | User fields (CSV). | username,name,verified,public_metrics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description does not need to restate safety. It adds value by disclosing the auth requirement (X_BEARER_TOKEN) and the exact return structure, which are not covered by annotations. It does not mention pagination or rate limits, but these are secondary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, using just three lines: a clear purpose statement, the return format, and an auth note. Every sentence contributes meaningful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only Twitter lookup with full schema coverage and strong annotations, the description provides sufficient context: purpose, return shape, and auth. It does not explicitly clarify the retweet vs. quote tweet distinction or pagination, but these are partially addressed by sibling names and the schema. Overall 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for id, max_results, and user_fields. The description adds no additional parameter semantics beyond what is already in the schema, aligning with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's function: returning users who reposted a given post. It distinguishes itself from sibling tools like twitter_liking_users and twitter_quote_tweets by using the specific term 'reposted'. The return format is also provided, adding clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The description does not mention when to choose this over twitter_liking_users or twitter_quote_tweets, nor does it provide exclusions. Usage is implied only through the stated purpose, which offers minimal direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_search_recentARead-onlyIdempotent
Search posts from the last 7 days with X's query operators (e.g. '"Lakers" lang:en -is:retweet').
Returns: {data:[{id, text, created_at, author_id, lang, public_metrics:{retweet_count, reply_count, like_count, impression_count}}], includes:{users:[…]}, meta:{result_count, newest_id, next_token}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query with operators (from:user, lang:en, -is:retweet, #tag, "phrase"). | |
| end_time | No | ISO 8601 upper bound. | |
| since_id | No | Only posts newer than this id. | |
| expansions | No | Related objects to embed (CSV). | author_id |
| next_token | No | Pagination token from meta.next_token. | |
| sort_order | No | Result ordering (default recency). | |
| start_time | No | ISO 8601 lower bound (within the last 7 days). | |
| max_results | No | Results per page (10-100). | |
| user_fields | No | User fields for expanded authors (CSV). | username,name,verified,public_metrics |
| tweet_fields | No | Post fields to include (CSV). | created_at,author_id,public_metrics,lang |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world, so safety is covered. The description adds valuable context beyond annotations: it requires an API key (X_BEARER_TOKEN), limits the search to the last 7 days, and outlines the response structure, which significantly helps an agent anticipate behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: one sentence states the purpose, a second block reveals the return format, and a final line covers authentication. Every sentence adds new information without redundancy, making it easy to scan and apply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 10 parameters and no output schema, the description compensates well by explicitly showing the expected response structure (data, includes, meta), outlining the auth requirement, and giving a query example. This provides sufficient context for an agent to invoke the tool correctly and interpret results, even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 10 parameters. The description provides a helpful example query and confirms the 7-day window, but it does not add semantic detail beyond that; the schema already offers thorough parameter descriptions. Baseline 3 is appropriate because most parameter meaning comes from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action ('Search posts') with a defined scope ('from the last 7 days') and gives a concrete query example. This distinguishes it from sibling Twitter tools that fetch individual tweets, user timelines, or counts, making the tool's unique purpose explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: when searching recent posts with query operators. It does not explicitly name alternative tools or state when not to use it, but the context is strong enough that an agent could infer appropriate usage, especially with the example query and time bound.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_trendsARead-onlyIdempotent
Trending topics for a location by WOEID (1 = worldwide, 23424977 = US, 23424748 = Australia, 23424975 = UK).
Returns: {data:[{trend_name, tweet_count}]}
Example: Worldwide trends {"woeid": 1}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| woeid | Yes | Where-On-Earth id of the location. Required — part of the URL path. | |
| max_trends | No | Max trends to return (1-50, default 20). | |
| trend_fields | No | Trend fields to include (CSV) — tweet_count is omitted unless requested. | trend_name,tweet_count |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the annotations: expected return shape ('{data:[{trend_name, tweet_count}]}'), a concrete usage example, and the authentication requirement ('needs your own key in X_BEARER_TOKEN'). It does not contradict the readOnlyHint, openWorldHint, or idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-structured: one line for purpose, one for return format, one compact example, and one for auth. Every sentence earns its place with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explicitly listing the return shape. It covers purpose, parameter semantics via examples, and the critical authentication detail. The concise example makes the tool easy to invoke correctly, and the annotations already cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with descriptions, so the baseline is 3. The description enhances this by providing real WOEID examples (1, 23424977, etc.) and a full example invocation, helping an agent understand what values are meaningful even though the schema also explains them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'Trending topics for a location by WOEID', with concrete examples (1, US, Australia, UK). This distinguishes it from sibling Twitter tools like twitter_search_recent or twitter_tweet_counts, which focus on search or counts rather than trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use (location-based trending topics), provides a minimally working example, and lists common WOEIDs. It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweetARead-onlyIdempotent
One post by id.
Returns: {data:{id, text, created_at, author_id, public_metrics}, includes:{users:[…]}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Post id. Required — part of the URL path. | |
| expansions | No | Related objects (CSV). | author_id |
| user_fields | No | User fields (CSV). | username,name,verified |
| tweet_fields | No | Post fields (CSV). | created_at,author_id,public_metrics,lang |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral context: the exact return shape ({data: {...}, includes: {users}}) and the auth requirement (X_BEARER_TOKEN). This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short sentences covering purpose, return shape, and auth. No irrelevant detail, front-loaded with the key purpose statement. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-post lookup, the description is complete given the rich annotations, fully described schema, and explicit return shape. It lacks some edge-case context (e.g., error handling, rate limits), but these are not critical since the schema and annotations cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description does not add additional parameter semantics beyond the schema, but the return shape hint (includes users) indirectly relates to the expansions parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One post by id' which clearly identifies the tool as retrieving a single post by its ID. It lacks an explicit verb but is specific enough to distinguish from plural/list tools like twitter_tweets. The 'by id' scoping is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this when you need a single post by ID. However, there is no explicit comparison to alternatives such as twitter_tweets or twitter_search_recent, nor any mention of when not to use it. The helpful auth note is about prerequisites, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_countsARead-onlyIdempotent
Post volume over time for a query (last 7 days) — the cheap way to gauge buzz without reading posts.
Returns: {data:[{start, end, tweet_count}], meta:{total_tweet_count}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Same operator syntax as search. | |
| end_time | No | ISO 8601 upper bound. | |
| start_time | No | ISO 8601 lower bound. | |
| granularity | No | Bucket size. One of: minute, hour, day. | hour |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, openWorldHint), the description adds the critical 'last 7 days' time constraint, the exact return format, and the X_BEARER_TOKEN authentication requirement. This provides substantial behavioral context not present in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: three sentences covering purpose, return format, and authentication. It is front-loaded with the core purpose first and every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 params and no output schema, the description provides the return structure, auth needs, time scope, and use-case guidance. Combined with the read-only/idempotent annotations, this is a complete and self-sufficient description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all 4 parameters with 100% coverage. The description adds value by specifying the default time range ('last 7 days') and confirming the query operator syntax as 'same as search,' which helps clarify the query parameter beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'Post volume over time for a query' with a specific scope ('last 7 days') and distinguishes from reading posts by calling it 'the cheap way to gauge buzz without reading posts.' The verb 'Returns' and the explicit output structure make the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it ('cheap way to gauge buzz') and contrasts it with reading posts, but does not explicitly name alternative tools or state when not to use it. It gives clear context for volume-over-time queries versus actual post retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweetsARead-onlyIdempotent
Batch post lookup by ids (up to 100) with engagement metrics.
Returns: {data:[{id, text, created_at, author_id, public_metrics}], includes:{users:[…]}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Post id(s), up to 100. | |
| expansions | No | Related objects (CSV). | author_id |
| user_fields | No | User fields (CSV). | username,name,verified |
| tweet_fields | No | Post fields (CSV). | created_at,author_id,public_metrics,lang |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description aligns with those by calling it a 'lookup'. The description adds genuinely useful behavioral context beyond the annotations: the 100-ID limit, the auth requirement (X_BEARER_TOKEN), and the return object shape. This is valuable supplemental information 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one purpose sentence, a one-line return shape, and a one-line auth note. It is front-loaded and every sentence carries meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the schema covers all parameters and there is no output schema, the description compensates with a clear return structure and auth requirement. It does not mention rate limits or error handling, but for a simple batch lookup with strong annotation coverage, the provided context is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 4 parameters, so the description does not need to repeat parameter docs. It adds the 'up to 100' limit and engagement metrics mention, but those are also present in the schema (ids description and tweet_fields default). No additional meaning is provided beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource ('Batch post lookup by ids') and includes key scope ('up to 100') and a differentiator ('with engagement metrics'). It clearly distinguishes this batch endpoint from the singular 'twitter_tweet' sibling by emphasizing batch behavior and metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Batch post lookup by ids' clearly signals this is the tool to use when fetching multiple posts by their IDs. It does not explicitly name alternatives or exclusions, but the batch-ids scope is clear from context, and the sibling tool list shows a singular variant that would serve single-post needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_usageARead-onlyIdempotent
This project's post-read usage against its monthly cap — check before burning quota.
Returns: {data:{cap_reset_day, project_cap, project_usage, daily_project_usage}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days of daily usage to include (1-90, default 7). | |
| usage_fields | No | Usage fields to include (CSV: cap_reset_day, daily_project_usage, daily_client_app_usage, project_cap, project_id, project_usage). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds meaningful context beyond that, including the required auth header (X_BEARER_TOKEN) and the exact return shape, and frames the tool as a pre-flight quota check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a purpose/action line, a return shape line, and an auth line. Every sentence carries useful information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's explicit return shape is essential and provided. Auth requirements and usage context are also included. Minor edge cases like behavior when the cap is exceeded are not discussed, but complexity is low and annotations cover safety aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (days, usage_fields) already have descriptions, so the description doesn't need to repeat them. The Returns line gives useful field-level context, but no additional parameter-specific semantics are needed beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the project's post-read usage against its monthly cap, and the imperative 'check before burning quota' reinforces the tool's purpose. This is distinct from sibling Twitter data tools like twitter_tweets or twitter_search_recent, which fetch content rather than usage metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Check before burning quota' provides direct guidance on when to use the tool: before consuming API quota. It does not explicitly name alternatives or exclusions, but the tool's purpose naturally separates it from data-fetching siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_userARead-onlyIdempotent
One account by numeric user id.
Returns: {data:{id, username, name, description, public_metrics}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric user id. Required — part of the URL path. | |
| user_fields | No | User fields (CSV). | created_at,description,public_metrics,verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld. Description adds the auth requirement and the exact return structure, both useful behavioral details not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences deliver purpose, return shape, and auth context with no filler. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
As a simple single-account getter with no output schema, the description compensates with a concrete return shape and auth caveat. It lacks detail on how user_fields affects the response, but the schema already covers that parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions. The description adds little beyond reiterating the numeric id and showing return fields that include public_metrics, which indirectly hints at user_fields usage but does not add new parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'One account by numeric user id', a specific verb/resource/scope. It distinguishes this from sibling tools like twitter_user_by_username and twitter_users, making the intended target clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when you have a numeric user id, and states the authentication requirement. It does not explicitly name alternatives (e.g., username lookup), but the sibling context and tool name provide sufficient situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_by_usernameARead-onlyIdempotent
One account's public profile by @handle (without the @).
Returns: {data:{id, username, name, description, verified, public_metrics:{followers_count, following_count, tweet_count}}}
Example: The NBA's official account {"username": "NBA"}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Handle without the @ (e.g. NBA, AFL, wojespn). Required — part of the URL path. | |
| user_fields | No | User fields (CSV). | created_at,description,public_metrics,verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar for transparency is lower. The description adds valuable context by specifying the exact return structure (fields and nested public_metrics), providing an example, and noting the auth requirement (X_BEARER_TOKEN). It does not mention error conditions or rate limits, but for a simple read-only lookup with good annotations, this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. It includes the return shape, an example, and auth note in just a few lines with no filler. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with 2 params and no output schema, the description is fairly complete: it explains the input format, return fields, and auth. However, it does not clarify how this tool differs from sibling Twitter tools (e.g., whether 'twitter_user' uses an ID, or 'twitter_users_by_usernames' handles multiple accounts), which could lead to agent confusion in a large tool list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions in the schema. The description's 'without the @' and example are already covered by the schema's param description ('Handle without the @ (e.g. NBA, AFL, wojespn)'). The description adds no new meaning for the parameters, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'One account's public profile by @handle'. It clearly indicates this tool fetches a single user's profile. However, it does not explicitly distinguish itself from sibling tools like 'twitter_user' (likely by ID) or 'twitter_users_by_usernames' (plural), so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a @handle for a single account, but provides no explicit when-to-use vs alternatives, no exclusions, and no mention of when to prefer 'twitter_users_by_usernames' for multiple accounts or 'twitter_user' for ID-based lookups. It gives a usage example and auth note, but no strategic guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_mentionsARead-onlyIdempotent
Recent posts mentioning an account.
Returns: {data:[{id, text, created_at, author_id, public_metrics}], meta:{result_count}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric user id. Required — part of the URL path. | |
| since_id | No | Only posts newer than this id. | |
| max_results | No | Results per page (5-100). | |
| tweet_fields | No | Post fields (CSV). | created_at,author_id,public_metrics |
| pagination_token | No | Pagination token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds the auth requirement (X_BEARER_TOKEN) and the exact return structure, which are valuable behavioral details. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one line for purpose, one for return format, one for auth. Every sentence adds value and it is front-loaded with the core purpose. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description provides the return structure and auth condition, making it self-contained. It could be more complete by explicitly mentioning pagination or contrast with user tweets, but for a retrieval tool this is quite comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: all five parameters have clear descriptions (e.g., 'Numeric user id. Required — part of the URL path.'). The description's 'mentioning an account' adds slight context for the id parameter, but the schema already carries the parameter semantics, resulting in the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Recent posts mentioning an account' uses a specific verb+resource and clearly states the return type. It distinguishes from sibling tools like twitter_user_tweets (posts by the user) and twitter_search_recent (general search). The inclusion of the return format reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need posts that mention a specific account. It provides context (recent posts, mentions) but does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_usersARead-onlyIdempotent
Batch account lookup by numeric ids (up to 100).
Returns: {data:[{id, username, name, public_metrics}]}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Numeric user id(s), up to 100. | |
| user_fields | No | User fields (CSV). | username,name,public_metrics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds valuable context: the batch limit of 100, the return format, and the required X_BEARER_TOKEN auth. This goes beyond annotations and helps the agent understand operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose, followed by return format and auth details. Every line provides necessary information without fluff, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description explicitly states the return format and auth requirements, which is good. It covers purpose, limit, and operational details. However, it doesn't mention behavior for invalid or missing IDs, which is a minor gap for a batch lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters (ids and user_fields), so the schema already provides the necessary semantics. The tool description re-states the 100-id limit but does not add new parameter details beyond the schema, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a batch account lookup by numeric ids with a limit of 100. It specifically names the resource (accounts), the operation (lookup), and the scope (by numeric ids), which distinguishes it from sibling tools like twitter_users_by_usernames.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for numeric ID lookups but does not explicitly mention when to use this tool over alternatives like twitter_user_by_username or twitter_users_by_usernames. It provides a constraint (up to 100 ids) but lacks comparative guidance, so usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_users_by_usernamesARead-onlyIdempotent
Batch profile lookup by handles (up to 100).
Returns: {data:[{id, username, name, public_metrics}]}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| usernames | Yes | Handle(s) without the @, up to 100. | |
| user_fields | No | User fields (CSV). | created_at,description,public_metrics,verified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, signaling a safe read operation. The description adds useful context: batch size limit (up to 100), return shape, and authentication requirement (X_BEARER_TOKEN). It doesn't detail pagination or error behavior, but for a lookup tool with strong annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three crisp sentences: what it does, what it returns, and auth requirement. No filler. Front-loaded with the core action. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 2 params, no output schema, and good annotations. The description covers purpose, return shape, and auth. It lacks mention of error cases or rate limits, but for a read-only batch lookup, the provided info is largely sufficient. A small gap is not specifying the format of the returned data (e.g., 'data' field) more explicitly, but it's enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described in the schema. The description does not add parameter details beyond the schema, but the schema's own descriptions are clear (handle without @, up to 100; user fields as CSV). The description's return fields hint at what user_fields might include (name, username, public_metrics) but not extensively. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool does a batch profile lookup by handles with a max of 100. It specifies the resource (Twitter users) and the verb (lookup), and provides the return shape. Among siblings like twitter_user_by_username and twitter_search_recent, this is distinct as a batch handle lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you have handles and need batch profiles, use this. It doesn't explicitly mention when to use alternatives like twitter_user_by_username for single lookup, but the batch limit and return fields give clear context. No exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_tweetsARead-onlyIdempotent
An account's recent posts (club announcements, insider news). Resolve the id with twitter_user_by_username first.
Returns: {data:[{id, text, created_at, public_metrics}], meta:{result_count, newest_id, next_token}}
Auth: needs your own key in X_BEARER_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric user id. Required — part of the URL path. | |
| exclude | No | CSV of retweets and/or replies to drop. | |
| end_time | No | ISO 8601 upper bound. | |
| since_id | No | Only posts newer than this id. | |
| start_time | No | ISO 8601 lower bound. | |
| max_results | No | Results per page (5-100). | |
| tweet_fields | No | Post fields (CSV). | created_at,public_metrics,lang |
| pagination_token | No | Pagination token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar for additional transparency is lower. The description adds value by specifying auth requirements ('needs your own key in X_BEARER_TOKEN') and the exact return shape, including data fields and meta. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short sentences covering purpose, dependency, return format, and auth. Every sentence carries useful information, and no wasted words. The return example and auth note are clearly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read-only tool with no output schema, the description provides the essential return structure, auth prerequisite, and a clear dependency flow. It does not mention rate limits or pagination behavior beyond the next_token field, but the schema covers parameter details, making this reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter details beyond hinting that the id must be resolved first, which the schema already indicates as 'Numeric user id.' With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states it returns 'An account's recent posts' with specific examples (club announcements, insider news). It uses a clear verb (get/list) and resource (account's recent posts), and the note to 'Resolve the id with twitter_user_by_username first' distinguishes it from other Twitter tools that might accept usernames or tweet IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite ('Resolve the id with twitter_user_by_username first') which implies a usage flow. However, it does not explicitly contrast with sibling tools (e.g., twitter_tweets, twitter_search_recent) or say when NOT to use this tool. The context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_athleteARead-onlyIdempotent
One fighter with FULL career statistics and current ranking attached. The main athlete tool.
Returns: {data:[{attributes:{title, nickname, age, dob, octagon_debut, stats_height, stats_weight, stats_reach_arm, stats_reach_leg, strengths, origin:{country_code}, residence, fightmetric_id, short_description}}], included:[{type:'athlete_stat--athlete_stat', attributes:{…see ufc_athlete_stats for the full field list…}}, {type:'athlete_ranking--athlete_ranking', attributes:{weight_class_rank, weight_class_rank_previous, is_interim}}]} — heights, weights and reaches are INCHES/POUNDS as decimal strings. The statistics live in included, NOT on the athlete.
Example: A champion with stats and ranking {"title": "Ilia Topuria"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page. | |
| title | Yes | Exact fighter name, e.g. 'Ilia Topuria' (from ufc_search_athletes). | |
| include | No | Leave as-is. WITHOUT `athlete_stat` there are NO statistics in the response at all. | athlete_stat,athlete_ranking,stats_weight_class,fighting_style,gym,athlete_status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/idempotent annotations already present, the description adds substantial behavioral context: statistics are in `included` rather than on the athlete, heights/weights/reaches are inches/pounds as decimal strings, and no auth is needed. The example response makes the return shape concrete, and nothing contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses a structured return example, unit clarification, auth note, and a reference to a sibling tool. Every sentence earns its place, and the JSON example improves clarity without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, but the description compensates by detailing the full response shape, where statistics and rankings live, the units, and an example. It also covers auth and points to ufc_athlete_stats for the full field list, making invocation unambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for parameters is 100%, so the baseline is 3. The description's example duplicates the schema's `title` example and does not introduce additional parameter semantics beyond what the schema already documents, such as the `include` warning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly specifies the tool returns one fighter with full career statistics and current ranking attached. Calling it "The main athlete tool" and explicitly noting that statistics live in `included` distinguishes it from sibling tools like ufc_athlete_stats and ufc_rankings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs that `title` must be an exact fighter name "from ufc_search_athletes", establishing a clear prerequisite and workflow. It also references ufc_athlete_stats for the full field list, providing an alternative, though it does not explicitly state exclusions or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_athlete_statsARead-onlyIdempotent
League-wide FightMetric statistics, sortable — the all-time leaderboards. For ONE fighter's stats use ufc_athlete instead; this collection cannot be filtered.
Returns: {data:[{attributes:{drupal_internal__fightmetric_id, career_fights, career_wins, career_losses, career_draws, career_no_contest, win_ko, win_sub, win_dec, first_rd_fin, title_def, win_streak, former_champion, avg_fight_time (SECONDS), total_bonuses, total_performance_night, total_fight_night, sig_strikes_landed, sig_strikes_attempted, sig_strikes_accuracy, stand_str_land, stand_str_att, clinch_str_land, clinch_str_att, ground_str_land, ground_str_att, head_str_land, head_str_att, body_str_land, body_str_att, leg_str_land, leg_str_att, takedowns_landed, takedowns_attempted, takedown_acuracy, takedown_defense, takedown_average, submission_average, knockdown_average, sig_str_land_min, sig_str_abs_min, sig_str_def}}]} — NOTE takedown_acuracy is spelled that way UPSTREAM (one 'c'); percentages and per-minute rates are STRINGS; avg_fight_time is seconds; the *_average fields are per-15-minutes, which is the standard MMA convention.
WARNING: this collection CANNOT be filtered — filter[fightmetric_id] returns 0 rows rather than an error, even for an id present on page 1 (verified). To get one fighter, call ufc_athlete, which resolves the same record through include and DOES work. Sorting works fine, which is what makes this the leaderboard tool.
Example: All-time significant-strike leaders {"sort": "-sig_strikes_landed", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field, '-' descends. This is how you build a leaderboard: '-sig_strikes_landed', '-takedowns_landed', '-career_wins', '-win_ko', '-title_def'. VERIFIED to sort correctly. | -sig_strikes_landed |
| limit | No | Rows per page (max 50). | |
| offset | No | Rows to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds crucial behavioral facts: the filter parameter returns 0 rows instead of an error (verified), sorting is confirmed to work, and data quirks are documented (e.g., the `takedown_acuracy` misspelling, percentages/rates as strings, `avg_fight_time` in seconds, and per-15-minute averaging convention). This goes far beyond the annotations and prevents misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured into distinct segments: purpose/alternative, return payload, caveats, example, and auth. The inline return schema is dense but necessary since there is no output schema. Each sentence serves a purpose, and key warnings are front-loaded. It is not as short as the ideal TDQS 4.3 example, but the density is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the absence of an output schema, the description is remarkably complete. It specifies the full return structure with all attribute names, explains non-obvious unit conversions and string formatting, documents the filter failure mode, names the working alternative, and provides an example call. The auth requirement is also stated. This is more than sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description, so the baseline is 3. The description adds value beyond the schema by providing a concrete example (`{"sort": "-sig_strikes_landed", "limit": 10}`), listing verified sort fields, and explaining that `sort` is how you build a leaderboard. This practical invocation guidance helps the agent select and construct parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with "League-wide FightMetric statistics, sortable — the all-time leaderboards," which clearly identifies the resource as league-wide all-time stats. It lacks an explicit retrieval verb like "list" or "get," but the Returns block and the guidance to use ufc_athlete for a single fighter make the tool's purpose unambiguous. It also distinguishes from the sibling ufc_athlete by scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when not to use this tool: "this collection cannot be filtered" and directs users to ufc_athlete for single-fighter stats, even noting that ufc_athlete resolves the same record through `include` and "DOES work." It also clarifies that sorting works, which is the intended leaderboard use case, and provides a concrete example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_event_cardARead-onlyIdempotent
One event WITH its full fight card attached. Use this rather than ufc_events when you want the bouts.
Returns: {data:[{attributes:{title, fight_card_time_main, event_card_location}, relationships:{fights:{data:[{type:'node--fight', id}]}}}], included:[{type:'node--fight', id, attributes:{title:'Fighter A vs Fighter B'}, relationships:{red_corner, blue_corner, fight_final_winner}}, {type:'node--athlete', …}]} — the CARD IS IN included, matched to data[0].relationships.fights.data[].id. Nothing useful is inline.
Example: A numbered event's full card {"title": "UFC 330"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page. | |
| title | Yes | Exact event title, e.g. 'UFC 330'. | |
| include | No | Leave as-is to get the bouts with both fighters resolved. | fights,fights.red_corner,fights.blue_corner,venue |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, open-world, idempotent behavior. The description adds valuable context beyond that: the response shape, that the fight card is in `included` and matched via `data[0].relationships.fights.data[].id`, and that 'nothing useful is inline'. It also notes no auth is needed. This goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than necessary due to the detailed return structure example, but every piece is informative and logically organized: purpose, usage, return format, example, auth. There is minor redundancy with the schema (e.g., include description repeated), but overall it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description provides a detailed breakdown of the return payload, including the critical note that fights live in `included`. It covers parameters, example, and auth, making it complete for an agent to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value with a concrete example ({"title": "UFC 330"}) and clarifies the include parameter's default behavior ('Leave as-is to get the bouts with both fighters resolved'), which reinforces the schema description but adds practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'One event WITH its full fight card attached' which clearly defines the scope, and it explicitly differentiates from sibling tool ufc_events by saying 'Use this rather than ufc_events when you want the bouts.' This is a specific, resource-focused purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly names the alternative tool (ufc_events) and the condition for choosing this one ('when you want the bouts'). Also provides an example invocation with title, clarifying the main intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_eventsARead-onlyIdempotent
UFC events — past and upcoming — with per-segment card times, venue and location.
Returns: {data:[{type:'node--event', id, attributes:{title:'UFC 330', number:330, subtitle, main_fight_name, fight_card_time_early, fight_card_time_prelims, fight_card_time_main, event_card_location:'Xfinity Mobile Arena, Philadelphia United States', main_card_time_localized, fightmetric_id, path:{alias:'/event/ufc-330'}}, relationships:{fights, venue, event_status, title_fight}}], links:{next, self}} — the three card times are the early prelims, prelims and main card, each with a timezone offset.
Example: The most recent events {"sort": "-fight_card_time_main", "limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Field to sort by; '-' prefix descends. '-fight_card_time_main' is newest-first by main-card time, which is what you almost always want. | -fight_card_time_main |
| limit | No | Rows per page (max 50). | |
| title | No | Exact event title, e.g. 'UFC 330'. For a partial match use ufc_search. | |
| offset | No | Rows to skip, for paging. | |
| include | No | Related resources to attach, e.g. 'fights,venue'. They arrive in a SEPARATE top-level `included` array, not inline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: 'Auth: none needed', the full response structure, and that the three card times each include a timezone offset. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but front-loads the core purpose in the first sentence. The return example and example call are both useful and earn their place. The structure is logical: summary, return shape, usage example, auth note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a detailed return structure example. It explains the meaning of the three card times and timezone offsets. It does not mention pagination behavior beyond the links.next/self in the example, but the schema covers param details and annotations cover the read-only safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 5 parameters are already described in the schema. The description's example call illustrates sort and limit usage but does not add meaning beyond the schema. It does clarify response fields like fight_card_time_early/prelims/main, but that is response semantics, not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'UFC events — past and upcoming — with per-segment card times, venue and location.' This is a specific verb+resource with clear scope, and the plural 'events' distinguishes it from the singular 'ufc_event_card' sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example usage ('The most recent events' with sort and limit) which implies when to use it, but it does not explicitly state when not to use it or mention alternatives. No exclusionary guidance or sibling tool comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_fightsARead-onlyIdempotent
Individual bouts — both corners and the winner — back to UFC 1.
Returns: {data:[{attributes:{title:'Royce Gracie vs Ken Shamrock', created, changed}, relationships:{red_corner:{data:{type:'node--athlete', id}}, blue_corner:{…}, fight_final_winner:{…}, fight_status}}], included:[…athletes…]} — fight_final_winner is null for an upcoming or drawn bout, so do not infer a loser from its absence.
Example: Recent bouts with fighters resolved {"limit": 10}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field; '-' descends. | -changed |
| limit | No | Rows per page (max 50). | |
| title | No | Exact bout title, e.g. 'Royce Gracie vs Ken Shamrock'. | |
| offset | No | Rows to skip. | |
| include | No | Resolve the fighters rather than returning bare ids. | red_corner,blue_corner,fight_final_winner |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description adds valuable behavioral details: the exact response shape, that fight_final_winner is null for upcoming/drawn bouts, and that no authentication is needed. The null-winner caveat is especially helpful for avoiding incorrect inferences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line purpose, a concise return example, a critical caveat, a usage example, and an auth note. Every sentence earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by showing a representative response structure, explaining the null winner edge case, providing a query example, and stating auth requirements. This is comprehensive for a list/fetch tool with five optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are fully described in the schema, so the baseline is 3. The description adds an example call ({"limit": 10}) and clarifies that the default include resolves both corners and the winner, providing practical context beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Individual bouts — both corners and the winner — back to UFC 1', which clearly states the resource (UFC bouts) and the scope (all historical fights). This distinguishes it from sibling tools like ufc_events and ufc_event_card, which handle event-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's domain is clearly implied: it is for individual fight bouts rather than events or athletes. However, it does not explicitly name alternative tools or state when not to use this tool. The example 'Recent bouts with fighters resolved' gives a concrete use case, but no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_jsonapi_indexARead-onlyIdempotent
The JSON:API resource index — all 291 resource types ufc.com exposes, for discovering surfaces this spec does not wrap yet.
Returns: {jsonapi:{version}, links:{'node--event':{href}, 'node--athlete':{href}, 'athlete_stat--athlete_stat':{href}, …291 entries…}} — each key is a resource type and its href is the collection URL. Useful when you need something this provider does not expose; most of the 291 are CMS plumbing (paragraphs, media, config) rather than sport data.
Example: Every exposed resource type
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent behavior, and the description adds valuable context: the exact return structure (map of resource types to collection URLs), the count of 291 entries, the fact that auth is not needed, and a heuristic that most entries are non-sport CMS data. This goes meaningfully 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not bloated: purpose, return structure, use case, auth, and a caveat are all covered in four concise lines plus a compact example. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description fully covers what the tool returns, the structure of the response, when to use it, and authentication. It even warns about the mix of CMS plumbing vs. sport data. No notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which sets the baseline at 4. The description focuses on the response shape instead of parameters, which is appropriate since there is nothing to explain about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the JSON:API resource index for all 291 resource types ufc.com exposes, with the specific purpose of discovering surfaces not wrapped by the spec. It distinguishes itself from sibling UFC tools (events, athletes, rankings) by being the comprehensive index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it: 'useful when you need something this provider does not expose,' and warns that most resources are CMS plumbing rather than sport data. It could name alternative UFC tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_rankingsARead-onlyIdempotent
Divisional rankings, including pound-for-pound, with each fighter's previous position.
Returns: [{attributes:{fightmetric_id, weight_class_rank, weight_class_rank_previous, meta_weight_class_rank, meta_weight_class_rank_previous, is_interim, category}}] — category distinguishes the division (0 appears to be pound-for-pound); compare weight_class_rank with weight_class_rank_previous for movement. Resolve fightmetric_id to a name via ufc_search_athletes.
WARNING: like the other custom-entity collections here, this one CANNOT be filtered — filter[fightmetric_id] returns 0 rows rather than an error (verified). Page the whole set (~200 rows) and match client-side; for one fighter's current ranking, ufc_athlete resolves it through include.
Example: Rankings from the top {"limit": 50}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field; 'weight_class_rank' ascends from the champion. | weight_class_rank |
| limit | No | Rows per page (max 50) — a full division is ~16 rows. | |
| offset | No | Rows to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral quirks beyond the annotations: the unfilterable nature verified by the tool creator, the ~200-row set requiring pagination, and the meaning of fields like category and previous rank movement. This goes well beyond readOnlyHint/idempotentHint/openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into compact sections: summary, Returns, WARNING, Example, Auth. Every sentence adds value and there is no redundancy with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing return fields and their semantics, explaining category and rank movement, and describing the resolution path to names. It also covers limitations, alternatives, pagination, and auth status, making it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter docs for sort, limit, and offset. The description adds an example ({"limit": 50}) and implies paging behavior, but does not materially expand on the schema's already clear parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Divisional rankings, including pound-for-pound, with each fighter's previous position', giving a specific verb+resource. It distinguishes itself from related tools like ufc_athlete and ufc_search_athletes by referencing them as alternatives for different needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly warns that the collection CANNOT be filtered, noting that `filter[fightmetric_id]` returns 0 rows rather than an error, and instructs to page the whole set and match client-side. It names ufc_athlete as the alternative for a single fighter's current ranking, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_round_recordsARead-onlyIdempotent
The single-round record book: most significant strikes, total strikes, takedowns and submission attempts in one round, ranked.
Returns: [{attributes:{fightmetric_id, rank, round, statname, value (a STRING), combined}}] — combined: true means BOTH fighters' totals in that round; false is one fighter's. Mixing the two produces a nonsense leaderboard, so filter on it if you care. Resolve fightmetric_id to a name via ufc_search_athletes.
WARNING: filter[round] and filter[statname] return 0 rows rather than an error (verified) — filter the rows yourself. statname is one of: Significant Strikes Landed/Attempted, Total Strikes Landed/Attempted, Takedowns Landed/Attempted, Submission Attempts; round is 1-5.
Example: The round record book {"limit": 50}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field; 'rank' ascends from the record holder. Sorting works; filtering does not — see the note in Returns. | rank |
| limit | No | Rows per page (max 50). Ask for a full page and narrow by `round`/`statname` yourself — the collection cannot be filtered server-side. | |
| offset | No | Rows to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral context: the return shape with `combined` flag semantics, the warning that `filter[round]` and `filter[statname]` return 0 rows instead of errors, the fact that `value` is a string, and that no auth is needed. This goes far 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise for the amount of information it conveys. It is well-structured with Returns, Warning, Example, and Auth sections. The warning and example are directly useful. A slight deduction for some verbosity, but every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by fully explaining the return structure, the meaning of `combined`, the statname enumeration, round range, and the filter limitation. It includes an example and auth info, making it complete 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for sort, limit, and offset, giving a baseline of 3. The description adds meaningful semantics by warning that filtering params don't work server-side, advising to request a full page and narrow manually, and explaining that sorting works. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'The single-round record book' with specific stats (significant strikes, total strikes, takedowns, submission attempts) and explicitly says it is ranked. This is a specific verb+resource that distinguishes it from sibling tools like ufc_fights or ufc_athlete_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (to retrieve single-round records) and gives practical guidance on filtering, combined totals, and resolving IDs via ufc_search_athletes. It doesn't explicitly exclude alternative tools, but the purpose is distinct enough that the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ufc_search_athletesARead-onlyIdempotent
Find fighters by partial name. Start here — every other athlete tool needs an exact title or an id.
Returns: {data:[{type:'node--athlete', id:'', attributes:{title:'Israel Adesanya', nickname, fightmetric_id, path:{alias:'/athlete/israel-adesanya'}}}]} — keep BOTH the uuid id (for JSON:API lookups) and fightmetric_id (for joining to stats and round records).
Example: Search by surname {"name": "Adesanya"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Part of the fighter's name, e.g. 'Adesanya'. | |
| limit | No | Rows per page. | |
| operator | No | Match mode. CONTAINS is the useful default. | CONTAINS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds context beyond annotations: no auth needed, the exact response shape, and the instruction to keep both the uuid and fightmetric_id for downstream lookups. This is useful behavioral disclosure, though it omits potential edge cases or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with clear sections: purpose, return format, example, and auth. Every sentence adds value, including the return schema guidance and example, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return structure and advises on how to use the returned IDs. It covers auth, provides an example, and disambiguates from sibling tools. For a read-only search tool, this is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds a concrete example (searching by surname 'Adesanya') and reinforces the operator default ('CONTAINS is the useful default'), which goes beyond the schema's generic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb and resource ('Find fighters by partial name') and explicitly differentiates from sibling tools by stating 'Start here — every other athlete tool needs an exact title or an id.' This gives the agent an unambiguous understanding of the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'when to use' guidance via 'Start here' and explains the alternative (other athlete tools require exact title or id). The example search and auth note further clarify practical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_kambi_callARead-onlyIdempotent
Fetch a Unibet/Kambi sportsbook resource by operation name (market AU). The lang/market/channel_id defaults are carried, so the caller supplies only the variable path/query params (eventId, sport, groupId). Read unibet://sport/operations for the operation list.
Returns: (JSON object)
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| path_params | No | Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs. | |
| query_params | No | Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavior beyond those: auth works without a key, UNIBET_ACCESS_TOKEN unlocks more, and an operation catalogue resource exists. It does not contradict the annotations and enriches the safety profile with concrete auth and discovery behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and organized into short useful sections: operation lookup, return type, and auth. Every sentence contributes practical guidance, and there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic passthrough tool, the description covers the essential context: how to discover valid operations, what defaults are handled, what the caller supplies, the return type, and auth requirements. The absence of an output schema is partially mitigated by the operation catalogue pointer and the generic 'JSON object' return statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning with concrete examples of variable params (eventId, sport, groupId) and explains that lang/market/channel_id defaults are already carried, helping the agent understand which params actually need to be supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Fetch a Unibet/Kambi sportsbook resource by operation name (market AU).' The generic nature is conveyed by 'by operation name', which distinguishes it from specialized sibling tools, though it does not explicitly name any sibling or contrasting behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: defaults are carried, the caller only supplies variable path/query params, and the operation list should be read from 'unibet://sport/operations'. It lacks explicit 'when not to use' guidance or named alternatives, but the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_kambi_live_statsARead-onlyIdempotent
Live in-event statistics (scores, match summary) for one Kambi event.
Returns: {eventId, summary:{...live stats}}
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Locale. | en_AU |
| market | No | Market. | AU |
| eventId | Yes | Kambi event id (from a listView / betoffer call). Required — part of the URL path. | |
| channel_id | No | Kambi channel id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only and idempotent. The description adds useful behavioral context beyond annotations: it documents the return shape ({eventId, summary}) and auth behavior (works without a key, optional token unlocks more). This meaningfully helps an agent predict the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, a return snippet, and an auth note. No wasted words, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only stats tool with no output schema, the description provides enough orientation: what it returns, auth expectations, and that it targets a single event. It could be more explicit about the contents of the summary object, but the tool's scope is low-complexity and the annotations cover safety semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including defaults and the required eventId. The description does not add much parameter-level meaning beyond the schema, but it does clarify that the tool operates on 'one Kambi event,' matching the eventId parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning live in-event statistics (scores, match summary) for a single Kambi event. It is specific about the resource and scope, distinguishing it from sibling tools like unibet_kambi_odds_ladder, though it lacks an explicit action verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need live stats for one Kambi event. However, it does not explicitly state when to prefer this over alternatives such as unibet_kambi_call or unibet_kambi_odds_ladder, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_kambi_odds_ladderARead-onlyIdempotent
Kambi odds-ladder reference (the decimal-odds increments the book uses).
Returns: [{name, steps:[{odds, converted}]}] (top-level array — fractional + decimal ladders)
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent behavior. The description adds meaningful context by showing the return shape, noting that the top-level array contains fractional and decimal ladders, and clarifying auth behavior (works without a key; UNIBET_ACCESS_TOKEN unlocks more).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with the core purpose stated first, followed by return format and auth details. Every sentence provides useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description sufficiently explains what is returned, including the array structure and the presence of fractional and decimal ladders. It could add example values or clarify the 'converted' field, but the essentials are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter documentation burden. The description does not need to add parameter semantics, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a Kambi odds-ladder reference and specifies the decimal-odds increments the book uses. It is distinct from siblings like unibet_kambi_live_stats and unibet_kambi_call, though it does not explicitly differentiate itself by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The description implies use when odds-ladder information is needed, but it does not state exclusions or mention sibling tools that might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_racing_callARead-onlyIdempotent
Call any of Unibet's persisted racing GraphQL operations against
rsa.unibet.com.au/api/v1/graphql by name + variables. The sha256 hash lives
server-side; a PERSISTED_QUERY_NOT_FOUND error means the bundle drifted. Race
identifiers are eventKeys like "202606040200.T.AUS.hawkesbury.1"
(date.raceType.country.track.raceNumber). Read unibet://racing/operations for
the op list + variable signatures.
Returns: (JSON object)
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives. | |
| variables | No | Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: server-side sha256 persistence, the PERSISTED_QUERY_NOT_FOUND failure mode, eventKey identifier format, and auth behavior. These details meaningfully help an agent anticipate outcomes even though readOnlyHint and idempotentHint already cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, front-loading the core action before covering errors, identifiers, resource discovery, returns, and auth. The 'Returns: (JSON object)' line is minimal but low-cost; the overall structure is well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the open-ended, any-operation nature of the tool and no output schema, the description is remarkably complete: it names the endpoint, explains how to discover operations, defines identifier format, covers auth, and warns about drift errors. An agent has what it needs to use this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema. The description adds useful complementary meaning by explaining eventKey structure and directing the agent to the catalogue for operation-specific variable signatures.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Call any of Unibet's persisted racing GraphQL operations' against a named endpoint. It distinguishes itself from sibling GraphQL-call tools like unibet_kambi_call by scoping to racing and persisted operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to persisted racing GraphQL operations and tells the agent to read unibet://racing/operations for the op list and variable signatures. It lacks explicit when-not-to-use guidance or named alternatives, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_sgm_priceARead-onlyIdempotent
PRICE A SAME GAME MULTI you choose — give it two or more outcome ids from one Unibet/Kambi event and get the correlation-adjusted Bet Builder price, plus the list of outcomes eligible to join it. Prices combinations Unibet has not pre-built (for those, see unibet_kambi_call operation='event_prepack').
Returns: {eventId, selectedOutcomeIds:[…], selectedOdds:{decimal: 3400, american, fractional}, combinableOutcomeIds:[…]} — VERIFIED live 2026-08-27 against AFL Western Bulldogs v Collingwood (event 1028856020), unauthenticated.
ODDS ARE IN THOUSANDTHS. decimal: 3400 MEANS 3.40, not 3400. Kambi does this everywhere — the odds and line on every outcome in the betoffer feed are scaled the same way (1920 = 1.92, line 1500 = +1.5) — and a price reported 1000x too large is the loudest wrong answer available. Divide by 1000.
THE PRICE IS NOT THE PRODUCT OF THE LEGS. Bulldogs head-to-head (1.92) with Over 170.5 (1.88) prices 3.40, against a naive 3.6096.
1001.0 IS A CEILING, NOT A PRICE. Long multis stop moving at decimal: 1001000 — six, eight, ten, twelve and fourteen legs all returned exactly that on the verified event while the naive product kept climbing. Treat 1001.0 as capped, never as a quote and never as an edge.
selectedOutcomeIds IS THE ECHO, AND IT IS WHY THIS IS THE SAFE ONE. Unibet is the only book of the five that says exactly what it priced. Duplicate ids are deduplicated SILENTLY, so compare this list against what you sent before reporting anything.
A SINGLE LEG RETURNS NO PRICE AT ALL — selectedOdds is simply ABSENT rather than an error, and the same happens when duplicates collapse to one leg. A missing key here means not priced, not zero.
combinableOutcomeIds IS ELIGIBILITY, NOT COMPATIBILITY. It lists what can EVER appear in a bet builder on this event — 940 of the event's 1137 outcomes on the verified fixture — and does NOT drop what clashes with your current picks: both the opposite head-to-head side and the line the head-to-head already implies stayed listed, and both then failed with a 400. Its real use is separating a leg that is INELIGIBLE from one that merely CONFLICTS, which the error message does not do.
REFUSALS ARE REAL HTTP STATUS CODES WITH A TYPED BODY — the only book of the five that uses them properly, so no error signal is needed here. Four seen live, and they mean different things: 400 'Combination is not supported by the selected strategy' for legs that clash or imply one another; 400 'Invalid outcomes' with an invalidOutcomes list naming ids that are not BET-BUILDER ELIGIBLE (an ordinary outcome from the betoffer feed can be rejected this way — check it against combinableOutcomeIds first); 409 'Impossible outcome selection', with invalidOutcomes EMPTY, when the combination cannot happen at all (Bulldogs to win with Collingwood by 1-39); and 400 'Unknown event'. The empty list on the 409 is not a bug to route around — the impossibility is in the COMBINATION, so no single id is at fault.
The upstream body also repeats the event's ENTIRE bet-offer book — 626 offers, 647 KB of a 610 KB response — which unibet_kambi_call(operation='event_betoffer') already returns. It is projected away here.
Example: Price Bulldogs to win with over 170.5 points {"eventId": 1028856020, "outcomeIds": "4306981996,4309057043"}
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Locale. Leave as the default. | en_AU |
| market | No | Market. Leave as AU — Bet Builder availability and pricing are per market. | AU |
| eventId | Yes | Kambi event id, e.g. 1028856020 — from unibet_kambi_call(operation="sport_matches") or any Kambi event feed. Required — part of the URL path. | |
| channel_id | No | Kambi channel. Leave as 1 (web). | 1 |
| outcomeIds | Yes | The legs, as outcome ids joined by COMMAS in one string: "4306981996,4309057043". Ids come from unibet_kambi_call(operation="event_betoffer") — `betOffers[].outcomes[].id` — and all must belong to THIS event. Give two or more: a single id returns the combinable list with NO price. Order does not matter and is not preserved in the echo. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world hints, but the description adds substantial behavioral detail beyond them: odds are in thousandths, prices cap at 1001.0, selectedOdds can be absent rather than zero, duplicate IDs are silently deduplicated, and refusal status codes have distinct meanings. It also clearly explains that combinableOutcomeIds signals eligibility, not compatibility, which would be very hard to discover safely otherwise. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with purpose and return shape, then organized into clearly labeled behavioral warnings with an example near the end. It is long, but nearly every section addresses a distinct trap that would otherwise lead to a wrong value or misunderstanding. A slight deduction for verbosity and some redundancy around scaling and eligibility; otherwise it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values and failure modes. It covers selectedOdds formats, selectedOutcomeIds as an echo, combinableOutcomeIds semantics, missing-key behavior, four different HTTP refusal cases, auth requirements, and the upstream body projection. This is complete enough for an agent to call the tool correctly and interpret results confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters with detailed descriptions including default values, comma-joined outcomeIds, single-leg no-price behavior, and ID provenance. The description adds value with a concrete worked example, the silent-deduplication warning, and emphasis that all outcome IDs must belong to one event. Most of the extra value is behavioral rather than purely parameter syntax, so a 4 is appropriate rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the action (price), the object (a same-game multi built from two or more outcome IDs in one Unibet/Kambi event), and the key scope: it prices combinations Unibet has not pre-built. It also distinguishes itself from unibet_kambi_call operation='event_prepack', which covers pre-built combos. This is clear, specific, and differentiates from sibling SGM tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it: for user-chosen combos that Unibet has not pre-built, and directs the agent to unibet_kambi_call operation='event_prepack' for the alternative. It also states the core precondition — two or more outcome IDs from one event — and warns that a single leg produces no price, which is critical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unibet_validate_couponARead-onlyIdempotent
VALIDATE AND RE-PRICE a bet slip before placing it — the pre-placement go/no-go. Send the exact Kambi coupon you intend to place; it returns the current price and rejects an impossible or clashing combination, the same check Unibet's betslip fires. Anonymous (no login). Call IMMEDIATELY before unibet_place_bet and only place if this comes back clean.
Returns: VERIFIED live 2026-08-27: {status: "SUCCESS", validSession: , rewardInfo:{validRewards, validGroupRewards, implicitGroupRewards}}.
THE ANSWER IS status, and on a good coupon it is the STRING "SUCCESS" — not a number, not an absence. A rejection uses the same envelope with a different status and a message.
IT DOES NOT ECHO A PRICE. There are no couponRows in the reply, so this call CANNOT be used to re-price a bet — an earlier version of the betting plane tried to read couponRows[].odds back from here and would have refused every placement. Use unibet_sgm_price (anonymous, returns selectedOdds.decimal in thousandths) to check drift, and use THIS call for the go/no-go.
validSession reports whether the bearer is still good — the cheapest way to tell a dead token from a bad coupon.
rewardInfo.validGroupRewards[] lists promotions that would apply, e.g. a PROFIT_BOOST with boostPercentage/maxStake/maxExtraWinnings. Ignore it for pricing: the boost changes the payout, not the odds struck.
Rate limits are published in headers: x-ratelimit-remaining and x-ratelimit-reset (seconds).
Auth: works without a key; UNIBET_ACCESS_TOKEN unlocks more if set.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The Kambi coupon. VERIFIED live 2026-08-27: {"couponRows":[{"index":0,"odds":3300,"group":{"operation":"AND","groups":[{"operation":"AND","outcomeIds":[4306981997]},{"operation":"AND","outcomeIds":[4309036845]}]},"type":"BET_BUILDER"}],"bets":[{"couponRowIndexes":[0],"eachWay":false}],"isUserLoggedIn":true}. NOTE what validate does NOT carry: no `stake` on the bet, and none of allowOddsChange/requestId/channel — those belong to the placement only. `odds` is thousandths (3300 = 3.30). | |
| lang | No | Locale. Leave as the default. | en_AU |
| market | No | Market. Leave as AU. | AU |
| channel_id | No | Kambi channel. Leave as 1 (web). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint annotations by disclosing anonymous operation, optional token auth, rate-limit headers, response envelope, the 'SUCCESS' string requirement, validSession as a token-health signal, and the absence of couponRows/price in the reply. This is exceptionally transparent for a tool without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the critical action and each paragraph earn its place: response format, success check, no-price warning, validSession meaning, rewardInfo, rate limits, and auth. The internal contradiction around 'RE-PRICE' costs it a perfect score on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by specifying the return envelope, how to interpret status/validSession/rewardInfo, what is missing from the response, and how this call fits into the wider bet-placement workflow. Nothing essential is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already provides a fully worked body example, odds-thousandths clarification, and notes about what validate does not carry. The main description adds only the 'send the exact coupon' guidance and go/no-go framing, which is modest additional value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the pre-placement validate/go-no-go check for a Kambi coupon and distinguishes it from pricing via unibet_sgm_price. However, the opening phrase 'VALIDATE AND RE-PRICE' is contradicted later by 'IT DOES NOT ECHO A PRICE,' so the primary purpose statement is not fully clean.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call immediately before unibet_place_bet and to place only if the response is clean. It also names unibet_sgm_price as the correct tool for checking price drift, and clearly states this tool cannot be used for re-pricing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_playerARead-onlyIdempotent
A single WTA player by id — {id, firstName, lastName, fullName, countryCode, dateOfBirth, metadata}. playerId comes from wta_players / wta_rankings.
Returns: {id, firstName, lastName, fullName, countryCode, dateOfBirth, metadata}
Example: Aryna Sabalenka {"playerId": 320760}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | WTA player id (from wta_players[].id or wta_rankings[].player.id). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds useful behavior beyond those: the exact return fields, a concrete example, and the auth requirement. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but repeats the field list twice ('{id, ...}' and 'Returns: {id, ...}') which is redundant. The example and auth note are useful, but the duplication could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-player lookup with one parameter and no output schema, the description provides sufficient information: return shape, source of the ID, an example, and auth requirements. It does not discuss error cases, but that is not critical for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a detailed description of playerId including source and path requirement. The description repeats the source but adds a concrete example value, providing minor extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool retrieves a single WTA player by ID and lists the exact fields returned. It distinguishes itself from sibling tools like wta_players (plural) by noting the ID comes from those lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on where the playerId comes from (wta_players/wta_rankings) and confirms no authentication is needed. It implies this is the right tool when you already have a player ID, though it does not explicitly state 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.
wta_player_matchesARead-onlyIdempotent
One player's match history — {player, matches:[{TournamentName, TournamentLevel, Surface, StartDate, city, Country, PrizeWon, entry_rank_1/2, entry_type_1/2, …}]}. The per-tournament results/log for a player.
Returns: {player:{…}, matches:[{TournamentName, TournamentLevel, TournamentType, Surface, StartDate, city, Country, DrawSizes, PrizeMoney, PrizeWon, entry_rank_1, entry_rank_2, entry_type_1, entry_type_2}]}
Example: Sabalenka's recent matches {"playerId": 320760}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | WTA player id (from wta_players[].id). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Auth: none needed,' a concrete example call, and the exact return structure, which are useful behavioral details beyond the annotation metadata without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, but it is redundant: the first line presents the return structure, then the 'Returns:' section repeats it with additional fields. The example and auth note are useful, but the redundancy makes it less concise than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides the return structure, an example, and auth requirements, covering the essential information. It does not mention ordering, pagination, or not-found behavior, but for a simple single-param read-only tool with strong annotations, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for playerId, including its source (wta_players[].id) and URL path relevance. The description's example ({"playerId": 320760}) adds a concrete illustration but does not introduce new semantic meaning beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'One player's match history' and 'The per-tournament results/log for a player,' specifying both the resource and scope. It distinguishes this tool from siblings like wta_player (likely profile) and wta_tournament_matches (tournament-centric) by focusing on a single player's matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a player's match history, which gives context for when to use it, but it does not explicitly mention alternatives or exclusions. No guidance on when not to use it versus wta_player or other related tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_playersARead-onlyIdempotent
The WTA player catalogue — {pageInfo, content:[{id, firstName, lastName, fullName, countryCode, dateOfBirth}]}. Search by name (e.g. 'Swiatek' → Iga Swiatek) or page through all. The player id feeds wta_player / wta_player_matches.
Returns: {pageInfo:{numPages, totalElements}, content:[{id, firstName, lastName, fullName, countryCode, dateOfBirth, metadata}]}
Example: Find Iga Swiatek {"name": "Swiatek"}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by player name (e.g. 'Swiatek', 'Sabalenka'). | |
| page | No | 0-based page index. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safe-read nature is established. The description adds meaningful behavioral context: the exact return structure, the ability to search by name with an example, the pagination parameters implicitly covered, and the note that no authentication is required. This goes beyond what annotations alone provide, making the tool's runtime behavior more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear intro, return structure, example, and auth note. It front-loads the main purpose and avoids fluff. There is minor redundancy in showing the return structure twice (once inside the intro and once in the dedicated 'Returns' line), but this repetition serves both an illustrative and a formal purpose, so it is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return shape including pageInfo and content fields. It covers the search-by-name behavior, an example invocation, and how the result connects to downstream tools. The tool is relatively simple (3 optional parameters, no nested objects), and the description provides enough detail for an agent to invoke it correctly. External factors like error handling are not mentioned but are not essential for this catalogue tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (name, page, pageSize), so the baseline is 3. The description adds a concrete example for the name parameter ('Swiatek' → Iga Swiatek) and mentions paging through all, but does not add significant detail about page or pageSize beyond what the schema already states. Thus it offers marginal added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the WTA player catalogue and explains its two main operations: searching by name and paging through all players. It distinguishes itself from sibling tools like wta_player and wta_player_matches by noting that the player id feeds those tools. While the primary action verb ('list' or 'search') is implicit, the description's scope and resource are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage context: use this tool to search for a player by name or to page through the full catalogue, and the resulting player id can be passed to wta_player or wta_player_matches. It includes an example request and explicitly states no auth is needed. It does not explicitly mention when not to use it or compare with other listing tools, but the id-feeding guidance is a strong usage pointer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_rankingsARead-onlyIdempotent
The WTA rankings — each row is {player:{id, fullName, countryCode, dateOfBirth}, ranking, points, tournamentsPlayed, movement, rankedAt}. Returns a bare ARRAY (not the {pageInfo,content} envelope). REQUIRES type + metric, which must agree: rankSingles+singles or rankDoubles+doubles. Page with page/pageSize (e.g. pageSize=100 for the top 100).
Returns: array of {player:{id, firstName, lastName, fullName, countryCode, dateOfBirth}, ranking, points, tournamentsPlayed, movement, rankedAt}
Example: Top 100 WTA singles rankings {"type": "rankSingles", "metric": "singles", "pageSize": 100}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 0-based page index. | |
| type | Yes | Ranking type — rankSingles or rankDoubles. Must match `metric`. | |
| metric | Yes | Ranking metric — singles or doubles. Must match `type` (rankSingles↔singles, rankDoubles↔doubles). | |
| pageSize | No | Rows per page (e.g. 100 = top 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds useful behavioral details about the response being a bare array and that no authentication is needed. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, usage, example, and auth. However, the return row structure is repeated (once in the first sentence and again in the 'Returns:' line), adding slight redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 4 parameters and no output schema, the description covers the return format, required parameter agreement, pagination, example, and auth. It is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds value by explicitly stating the required type/metric agreement and providing a sample JSON request for the top 100 singles, reinforcing the schema's enum constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this tool as returning WTA rankings with a specific row structure. It distinguishes itself from sibling tools like wta_players by focusing on ranking data and explicitly noting the return format (bare array vs envelope). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool: it requires type and metric that must agree, and it gives a concrete example for fetching the top 100 singles. However, it does not explicitly state when to use this versus alternative ranking tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_tournamentARead-onlyIdempotent
One tournament edition by tournamentGroup id + year (e.g. group 901 = Australian Open, /901/2025). Full metadata: dates, surface, draw sizes, prize money, level, status, winners. ids from wta_tournaments (content[].tournamentGroup.id + .year).
Returns: {tournamentGroup:{id, name, level}, year, title, startDate, endDate, surface, inOutdoor, city, country, singlesDrawSize, doublesDrawSize, prizeMoney, level, status, winners}
Example: Australian Open 2025 {"groupId": 901, "year": 2025}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Edition year (e.g. 2025). Required — part of the URL path. | |
| groupId | Yes | tournamentGroup id (e.g. 901 = Australian Open) — from wta_tournaments. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover safety and idempotency. The description adds that no auth is needed ('Auth: none needed') and explicitly lists the return structure, providing useful behavioral context beyond the annotations. It doesn't discuss error handling, but that's not a major gap given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise definition, a clear 'Returns' block, a practical example, and an auth note. It avoids repeating schema content and every sentence adds value. It's front-loaded with the core purpose, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup, the description covers all essential aspects: request construction (including ID source and URL pattern), response fields, and authentication requirements. With no output schema, the explicit field list compensates adequately. The example further grounds the usage. This is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters with clear explanations. The description goes further by linking groupId to a real example (901 = Australian Open), showing the combined #/901/2025# path, and specifying that IDs originate from wta_tournaments. This adds meaningful usage context on top of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns one tournament edition identified by tournamentGroup id and year. It distinguishes itself from sibling tools like wta_tournaments by focusing on a single edition, and it provides a concrete example (groupId 901, year 2025) that leaves no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual guidance: IDs come from wta_tournaments, implying a two-step flow. It also explains the URL path pattern. However, it doesn't explicitly state when to use this tool over related siblings like wta_tournament_matches, but the context is sufficient for an agent to infer the right scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_tournament_matchesARead-onlyIdempotent
All matches/results for one tournament edition (group id + year) — e.g. AO 2025 returns ~302 matches with court, draw level/type, entrant types, match state and ids. Use for draws + results.
Returns: {tournament:{…}, matches:[{MatchID, EventID, EventYear, CourtID, DateSeq, DrawLevelType, DrawMatchType, EntryTypeA, EntryTypeB, GrandSlam, MatchState, LastUpdated}]}
Example: Australian Open 2025 results {"groupId": 901, "year": 2025}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Edition year (e.g. 2025). Required — part of the URL path. | |
| groupId | Yes | tournamentGroup id — from wta_tournaments. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: 'Auth: none needed,' the approximate result size (~302 matches), and the field structure of the return payload. This gives the agent a good sense of what the response contains without needing to invoke the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured: a clear opening line, a return field list, an example, and an auth note. Every section adds useful information. It is front-loaded with the core purpose, and the example is concise. Slightly verbose due to the full return field list, but that is justified given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters and no output schema, the description provides a comprehensive picture: purpose, return fields, example, and auth requirements. It covers the essential context an agent needs to decide to use the tool and interpret results. It does not address pagination or filtering, but the tool appears to return all matches at once, and the openWorldHint annotation mitigates concerns about data completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (groupId and year) with 100% coverage. The description adds an example mapping (groupId 901, year 2025) and clarifies that groupId comes from wta_tournaments, but this is marginal value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns all matches/results for a specific tournament edition identified by group id and year. It differentiates itself from sibling tools like wta_tournament (single tournament info) and wta_player_matches (matches for a player) by explicitly scoping to one tournament edition. The example (AO 2025) further reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use for draws + results.' This tells the agent when to select this tool. It does not mention when not to use it or name alternatives, but the example and the tool name itself make the context clear, which is sufficient for a clear but not fully exhaustive guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_tournament_playersARead-onlyIdempotent
The entry list / draw for one tournament edition — {events:[{eventTypeCode, eventPlayers:[{players:[{id, firstName, lastName}], seed, entryType, eliminated, winner, runnerUp}]}]}. One event per discipline (eventTypeCode LS = Ladies Singles, LD = Ladies Doubles). Carries seeding, entry type, and final results (winner/runnerUp/eliminated). E.g. AO 2025 singles = 128 entrants.
Returns: {events:[{description, eventTypeCode, eventPlayers:[{players:[{id, firstName, lastName, countryCode}], seed, entryType, eliminated, winner, runnerUp}]}]}
Example: Australian Open 2025 entry list + seeds {"groupId": 901, "year": 2025}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Edition year (e.g. 2025). Required — part of the URL path. | |
| groupId | Yes | tournamentGroup id (e.g. 901 = Australian Open) — from wta_tournaments. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds useful behavioral context beyond annotations: 'Auth: none needed', the per-discipline event structure, and that final results (winner/runnerUp/eliminated) are included. It also clarifies that one event per discipline exists (LS, LD). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise but has some redundancy: the return structure is presented twice (once in the opening and again under 'Returns:'). It efficiently includes event type code definitions, an example, and auth note. The structure is front-loaded with the core purpose, and no unnecessary fluff is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two well-documented parameters and no output schema, the description is complete. It provides the full JSON return shape, explains event types, gives a concrete example call, and notes auth requirements. This is sufficient for an agent to select and invoke the tool correctly in most contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both groupId and year already clearly documented including their roles and sources. The tool description adds an example call and reiterates that parameters are required part of the URL path, but it does not provide substantially new semantics beyond what the schema already offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose as retrieving 'the entry list / draw for one tournament edition' and provides a detailed return structure including players, seeds, entry types, and final results. It distinguishes itself from sibling tools like wta_tournament_matches by focusing on the player entry list rather than match outcomes, aided by the explicit example of Australian Open 2025.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context of what the tool does and includes an example request, implying when to use it (when needing tournament entry lists/seeds). However, it does not explicitly mention alternatives or when not to use this tool, so the usage guidance relies on inference rather than explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wta_tournamentsARead-onlyIdempotent
The WTA tournament calendar — {pageInfo, content:[{tournamentGroup:{id, name, level}, year, title, startDate, endDate, surface, inOutdoor, city, country, singlesDrawSize, doublesDrawSize, prizeMoney, level, status, winners}]}. Take a row's tournamentGroup.id + year for wta_tournament / wta_tournament_matches. Page through with page/pageSize (the list spans all years).
Returns: {pageInfo:{numPages, totalElements}, content:[{tournamentGroup:{id, name, level}, year, title, startDate, endDate, surface, inOutdoor, city, country, singlesDrawSize, doublesDrawSize, prizeMoney, prizeMoneyCurrency, level, status, winners, liveScoringId}]}
Example: Browse tournaments {"pageSize": 50}
Auth: none needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 0-based page index. | |
| pageSize | No | Rows per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description discloses pagination behavior (list spans all years), the full response structure, and the cross-tool navigation pattern. This adds significant behavioral context that is not available from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear introduction, a response shape, usage guidance, an example, and auth info. However, the field list is repeated almost identically in the opening sentence and the 'Returns:' section, which is mildly redundant but not detrimental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully covers return values, pagination, and how to use results with related tools. It also addresses auth and provides an example, making it complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already defines page and pageSize with descriptions and defaults (100% coverage). The description adds value by explaining pagination semantics ('the list spans all years') and providing an explicit example with pageSize: 50, which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'The WTA tournament calendar' and enumerates the exact fields returned. It also distinguishes itself from sibling tools by explicitly stating that a row's tournamentGroup.id + year should be used for wta_tournament / wta_tournament_matches, making its role as a list/calendar distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Page through with page/pageSize (the list spans all years)' and explains how to use the output to access related tools ('Take a row's tournamentGroup.id + year for wta_tournament / wta_tournament_matches'). It also notes that no auth is needed, setting expectations for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_gameARead-onlyIdempotent
Game metadata for a sport-season: season year, whether it is over, and the game_key other calls need.
Returns: {fantasy_content:{game:[{game_key, game_id, name, code, type:'full', url, season, is_registration_over, is_game_over, is_offseason}]}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Current NFL season {"gameKey": "nfl"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| gameKey | Yes | 'nfl', 'nba', 'mlb', 'nhl' for the current season, or a numeric id like '449'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, which cover the safety profile. The description adds valuable context: it explicitly warns that the return shape is from vendor docs and has NOT been verified against a live response, and instructs to inspect actual payloads. It also discloses authentication requirements (YAHOO_CLIENT_ID etc.), which is beyond what annotations provide. This is strong behavioral transparency given the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first line defines the purpose, followed by the return shape, then example, then auth note. The shape note and auth note are useful and earn their place. Slight verbosity in the dream shape note, but overall tight and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple (metadata lookup) and has a clear input schema, annotations, and no output schema. The description explains the return shape (as a note pending verification), provides an example, and discloses auth requirements. Given the tool's simplicity and existing structured fields, the description is comprehensive enough. The only gap is not explaining pagination or multiple game responses, but that's minor for a metadata-only call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both format and gameKey are described in the schema). The description adds meaning to gameKey by listing acceptable values ('nfl', 'nba', 'mlb', 'nhl', or numeric id like '449') and noting it's part of the URL path. The description also shows a JSON example with 'gameKey'. Since the schema already covers parameters well, the description's additional usage details push it slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Game metadata for a sport-season' and lists the specific fields returned (season year, whether it is over, and the game_key). It explicitly mentions 'the game_key other calls need', which distinguishes it from sibling tools like yahoo_my_games or yahoo_league that serve different purposes. The description also includes an example and return shape, making it highly clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example usage ('Current NFL season' with 'gameKey': 'nfl') and notes that the game_key is needed by other calls, implying this is a prerequisite step. However, it doesn't explicitly state when NOT to use this tool or suggest alternatives (siblings like yahoo_my_games might be used for user-specific data). Still, the context is reasonably clear for the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_game_roster_positionsARead-onlyIdempotent
The roster positions a game defines (QB, RB, FLEX, BN, IR…) — needed to build a valid lineup write.
Returns: {fantasy_content:{game:[{game_key}, {roster_positions:[{roster_position:{position:'QB', position_type:'O', is_starting_position}}]}]}} — SHAPE FROM VENDOR DOCS. is_starting_position distinguishes a starting slot from BN/IR, which is exactly what a lineup optimiser needs.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL roster positions {"gameKey": "nfl"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| gameKey | Yes | Game key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, which are partly redundant with the description's read-only framing. The description adds valuable context: the response shape is from vendor docs and NOT verified against live responses—an important caveat. It also explains how to interpret the shape, which supplements the annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It starts with the core purpose, then gives the response shape, then a caveat, then an example. All sentences add value. The example could be clearer (it shows a request-like object without clarifying it's an example), but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple (2 params, no nested objects), and the description covers purpose, usage, auth, response shape, and unverified status. The output schema is absent, but the description provides the return shape explicitly, compensating. The caveat about unverified shape is particularly valuable for an agent. Missing: no info on error cases, but that's beyond expectation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (format and gameKey both have descriptions), so the baseline is 3. The description adds semantics for gameKey via the NFL example and explains how the response is used, which goes beyond the schema. It doesn't add much on format, but that is trivial. The response shape explanation adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'The roster positions a game defines (QB, RB, FLEX, BN, IR…)'. It specifies the resource (roster positions) and the purpose (needed to build a valid lineup write). It also distinguishes this from sibling tools like yahoo_game or yahoo_team_roster by focusing on the game-level roster positions, not team rosters or game metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when building a valid lineup write, and provides an example call for NFL. It doesn't explicitly state when not to use it or alternatives, but the context is fairly clear: this tool is for retrieving game-level position definitions. The auth note clarifies prerequisites. Could be improved with explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_game_stat_categoriesARead-onlyIdempotent
Every stat category a game scores, with its id — the lookup that makes scoring settings and player stats readable.
Returns: {fantasy_content:{game:[{game_key}, {stat_categories:{stats:[{stat:{stat_id, name:'Passing Yards', display_name:'Pass Yds', sort_order, position_types}}]}}]}} — SHAPE FROM VENDOR DOCS. Player stats and league scoring both refer to bare stat_ids; without this they are unreadable numbers.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL stat categories {"gameKey": "nfl"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| gameKey | Yes | Game key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceeds the readOnlyHint/idempotentHint annotations by disclosing the approximate return shape (with example structure), explicitly warning that the shape is unverified against a live response, and noting the auth requirements. This level of honesty about data quality and the caveat to 'inspect the actual payload' is exceptional transparency. No contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite its length, every sentence earns its place: returns shape, unverified-data warning, a concrete example, and auth requirements. Clear sections (Returns, NOTE, Example, Auth) make it scannable. It conveys a substantial amount of valuable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool with no output schema, the description is thorough: it explains the return value, provides the nested shape, flags uncertainty, gives an example, and documents auth — covering all reasonable issues an agent would need to use it. The description fully compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the gameKey and format params, providing a baseline of 3. The description adds value through a concrete example ("Example: NFL stat categories {\"gameKey\": \"nfl\"}") and clarifies the format param by noting it should be left as 'json.' The description enriches the required param's meaning by connecting it to the resource path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb-resource pairing: it returns every stat category and its id for a game, serving as 'the lookup that makes scoring settings and player stats readable.' It effectively differentiates itself from siblings by explaining its role as the decoding key for bare stat_ids, which no other tool description claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool — pointing out that 'Player stats and league scoring both refer to bare stat_ids' so this lookup is necessary to interpret them. However, it doesn't explicitly name alternatives or give 'use when/when not to use' guidance relative to sibling tools, though the practical use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_leagueARead-onlyIdempotent
League metadata: name, size, scoring type, current week, and the season's week range.
Returns: {fantasy_content:{league:[{league_key, league_id, name, url, num_teams, scoring_type:'head'|'point'|'roto', league_type, current_week, start_week, end_week, start_date, end_date, is_finished}]}} — SHAPE FROM VENDOR DOCS. current_week drives every week-scoped call below.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One league {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key, e.g. '449.l.12345' (from yahoo_my_leagues). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent behavior, and the description adds valuable caveats: the return shape is from vendor docs and unverified, auth requires a key in specific environment variables, and the note to inspect actual payloads. This is beyond what annotations provide and is critical for an agent to avoid relying on unverified field names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose, then provides return shape, a critical caveat, an example, and auth requirements. Each sentence serves a distinct purpose without redundancy. The formatting uses line breaks for readability, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description fully details the expected return shape, including specific field names and type hints. It also covers verification status, auth prerequisites, and a usage example. It is complete enough for an agent to invoke the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters (format and leagueKey) with 100% coverage, so the baseline is 3. The description adds a concrete example ('449.l.12345'), explains that leagueKey comes from yahoo_my_leagues, and implies its role as part of the URL path, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'League metadata: name, size, scoring type, current week, and the season's week range.' This is specific and distinguishes it from sibling tools like yahoo_league_settings or yahoo_league_standings, which focus on other aspects. The mention that 'current_week drives every week-scoped call below' further clarifies its role as a foundational metadata lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating that 'current_week drives every week-scoped call below,' which signals that this tool should be used first to obtain the current week. It also provides an example and notes the leagueKey comes from yahoo_my_leagues, giving workflow context. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_draftARead-onlyIdempotent
Draft results — every pick in order with round, team and player.
Returns: {fantasy_content:{league:[{league_key}, {draft_results:{'0':{draft_result:{pick, round, team_key, player_key}}, count}}]}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Draft results {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and idempotentHint, so the description does not need to restate safety. It adds valuable context: the return shape is unverified vendor documentation, actual payloads should be inspected, and auth requires the user's own YAHOO_CLIENT_ID, YAHOO_CLIENT_SECRET, or YAHOO_REFRESH_TOKEN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fully lead with a one-sentence summary, followed by a clear but somewhat verbose response shape, an explicit unverified caveat, an example, and an auth note. Each element has a purpose, and the shape is useful because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the vendor-documented response shape, an example call, and an honest caveat that the shape should be treated as approximate. That is adequate for a simple read-only endpoint and avoids over-claiming on unverified details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents leagueKey as required and part of the URL path, and format as 'json'. The description only reinforces leagueKey through the example `{"leagueKey": "449.l.12345"}` and adds no new syntactic or behavioral detail about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line, "Draft results — every pick in order with round, team and player," clearly identifies the resource and the exact data returned. It distinguishes this tool from other yahoo_league_* tools even though it lacks an explicit verb like 'get' or 'fetch.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for fetching Yahoo league draft results, but it never states when to prefer it over other yahoo league tools or whether it applies only to particular league types. It mentions an example and auth, but gives no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_playersARead-onlyIdempotent
The player pool filtered by availability — free agents, waivers, or all. The add/drop shortlist.
Returns: {fantasy_content:{league:[{league_key}, {players:{'0':{player:[[{player_key}, {player_id}, {name:{full, first, last}}, {editorial_team_abbr}, {display_position}, {eligible_positions}, {status:'IR'|'O'|'Q'}, {percent_owned}]]}, count}}]}} — SHAPE FROM VENDOR DOCS. HARD-CAPPED AT 25 PER PAGE: walk start to see more, and expect several calls for a full pool.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Available players {"leagueKey": "449.l.12345", "status": "A"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Page size (max 25). | |
| start | No | Pagination offset — Yahoo returns 25 at a time. | |
| format | No | Leave as json. | json |
| status | No | A available, FA free agents, W on waivers, T taken (rostered), K keepers. | A |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/openWorld/idempotent behavior; the description adds valuable operational context: a hard 25-per-page cap with pagination via 'start', an explicit auth requirement, and a prominent caveat that the documented response shape is unverified and should be inspected at runtime. This goes beyond the structured metadata without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a punchy phrase, and the response-shape block, caveat, example, and auth note are each purposeful. While the return shape is lengthy, it compensates for the lack of an output schema and is clearly separated into labeled sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema fully documents parameters and annotations cover safety traits, the description supplies the remaining essential context: pagination behavior, auth setup, an approximate return shape, and an explicit warning about unverified vendor documentation. This is complete enough for an agent to invoke the tool correctly and inspect the payload sensibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage, including enums, defaults, and per-parameter descriptions, so the description does not need to repeat those details. The description's example and pagination note add usage context but not new parameter-level meaning beyond the schema's existing explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('player pool') and the distinguishing scope: availability filtering (free agents/waivers/all) for add/drop decisions. This separates it from sibling tools like yahoo_team_roster and yahoo_player_stats by emphasizing league-wide availability rather than roster or individual player stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use it — as the 'add/drop shortlist' for fantasy availability — making the intended use obvious. However, it does not explicitly name alternatives or state when not to use this tool, so it stops slightly short of the top criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_scoreboardARead-onlyIdempotent
One week's matchups with both teams' points — live during a week, final after.
Returns: {fantasy_content:{league:[{league_key}, {scoreboard:{'0':{matchups:{'0':{matchup:{week, status, is_playoffs, teams:{'0':{team:[…, {team_points:{total}}, {team_projected_points:{total}}]}, count:2}}}, count}}, week}}]}} — SHAPE FROM VENDOR DOCS. Note team_projected_points alongside actual, which is what an in-week win-probability read needs.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A week's matchups {"leagueKey": "449.l.12345", "week": 1}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number (from yahoo_league's current_week / start_week / end_week). Required — part of the URL path. | |
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint/idempotentHint annotations, the description discloses the response shape is unverified from vendor docs, advises inspecting the actual payload, explains projected points are included, and states auth requirements. This is substantial behavioral context with no contradiction of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides a structured return shape, caveat, example, and auth note. It is somewhat long due to the inline JSON shape, but each block serves a purpose; minor redundancy in the vendor-docs caution keeps it from being maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies a detailed return shape, explicitly flags that the shape is unverified, provides a usage example, and tells the agent how auth is configured. It is unusually complete for an API wrapper, especially given the provider-specific complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with leagueKey and week already described as required URL path parts. The description adds only a concrete example and does not significantly extend parameter meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'One week's matchups with both teams' points — live during a week, final after.' This clearly identifies the tool as a weekly fantasy scoreboard and distinguishes it from standings or roster tools. The name 'yahoo_league_scoreboard' is directly reinforced rather than merely restated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for one week's matchups, with live/final points, and notes that projected points are what 'an in-week win-probability read needs.' It does not explicitly name sibling alternatives or state when not to use it, so it stops short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_settingsARead-onlyIdempotent
The rules: roster slots, scoring weights, waiver type, trade deadline, playoff structure. Read this before proposing anything.
Returns: {fantasy_content:{league:[{league_key}, {settings:[{draft_type, scoring_type, uses_playoff, playoff_start_week, uses_faab, waiver_type:'FR'|'CO', waiver_rule, trade_end_date, trade_ratify_type, roster_positions:[{roster_position:{position, count}}], stat_categories:{stats:[…]}, stat_modifiers:{stats:[{stat:{stat_id, value}}]}}]}]}} — SHAPE FROM VENDOR DOCS. uses_faab decides whether waivers are budget bids or priority order — an agent must know which before claiming.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: League rules {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses auth requirements, explicitly warns that the response shape is unverified vendor documentation, and advises inspecting the live payload before relying on field names. This is genuinely useful behavioral context that helps the agent avoid overconfidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: directive, return shape, caveat, example, and auth each occupy a clear section. The return shape block is long but justified because there is no output schema; no sentence feels wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by providing a detailed return shape, a reliability caveat, an example, and auth notes. It does not cover error cases or explicitly compare with sibling yahoo league tools, but those are non-essential for a read-only settings tool with strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The example `{"leagueKey": "449.l.12345"}` reinforces the expected format but does not add meaning beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a league-settings reader by enumerating the content: roster slots, scoring weights, waiver type, trade deadline, and playoff structure. It would be stronger with an explicit verb like 'retrieve' or 'get,' and it does not directly contrast with sibling league tools, but the scope is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Read this before proposing anything' is an explicit usage cue, and the paragraph about `uses_faab` adds a concrete decision-relevant context: an agent must know waiver behavior before claiming. It does not name alternative tools or provide when-not-to-use guidance, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_standingsARead-onlyIdempotent
Standings with each team's record, points for/against and playoff seed.
Returns: {fantasy_content:{league:[{league_key}, {standings:[{teams:{'0':{team:[[{team_key}, …], {team_standings:{rank, outcome_totals:{wins, losses, ties, percentage}, points_for, points_against, streak}}]}, count}}]}]}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: League standings {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/idempotentHint, so the description rightly focuses on additive value: a detailed (if unverified) return payload shape, an explicit caveat that the shape is from vendor docs and should be inspected at runtime, the auth requirement referencing specific env vars, and a usage example. This is genuinely useful behavioral context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with a one-sentence purpose, followed by the return shape, caveat, and example. While the JSON blob is long, it is clearly valuable given the absence of an output schema, and the unverified-shape warning is important. It is organized and justifiably sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only standings query with no output schema, the description provides an approximate return structure, a prominent verification warning, example input, and authentication details. The only gap is a lack of explicit error/edge-case notes (e.g., invalid league key behavior), but for this complexity level it is quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with reasonable descriptions for both params (format: 'Leave as json.'; leagueKey: 'League key. Required — part of the URL path.'), putting this at baseline 3. The free-text description adds a concrete example value but doesn't meaningfully elaborate param semantics beyond the schema, which already carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence, 'Standings with each team's record, points for/against and playoff seed,' specifies the resource (standings) and its contents with an implied 'get/return' verb. It distinguishes itself from siblings like yahoo_league_settings or yahoo_league_teams by enumerating exact fields, though it stops short of naming alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the description and the included example call ({"leagueKey": "449.l.12345"}) and auth env-var guidance, but there is no explicit when-to-use vs. alternative tool (e.g., no mention of yahoo_league_teams for rosters). The auth note hints at prerequisites but not when this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_teamsARead-onlyIdempotent
Every team in the league with its manager — how you map team_key to a person.
Returns: {fantasy_content:{league:[{league_key}, {teams:{'0':{team:[[{team_key}, {team_id}, {name}, {url}, {team_logos}, {waiver_priority}, {faab_balance}, {number_of_moves}, {number_of_trades}, {managers:[{manager:{nickname, guid, is_commissioner}}]}]]}, count}}]}} — SHAPE FROM VENDOR DOCS. faab_balance and waiver_priority are what a waiver strategy is built on.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Teams in a league {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as read-only and idempotent. The description adds important context by warning that the return shape is from vendor documentation and has not been verified against a live response, and it explains the authentication requirement via YAHOO_CLIENT_ID, YAHOO_CLIENT_SECRET, or YAHOO_REFRESH_TOKEN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with purpose, return shape, caveat, example, and auth. It is somewhat dense due to the inline nested JSON shape, and the 'SHAPE FROM VENDOR DOCS' note is repeated in the following paragraph, but every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a detailed approximate return payload, highlights operationally important fields, warns about reliability, gives an example invocation, and states the auth requirement. This is sufficient for an AI agent to invoke the tool reasonably and set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents both parameters, so the baseline is 3. The description adds a concrete example leagueKey value ('449.l.12345'), reinforcing the league-key format beyond the schema's 'part of the URL path' explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Every team in the league with its manager' and clarifies the core use case: 'how you map team_key to a person.' It names the resource and the returned scope, distinguishing it from sibling tools like yahoo_team or yahoo_league_standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool — when you need a league-wide team-to-manager mapping — and gives an example input. However, it does not explicitly describe when not to use it or mention alternative tools such as yahoo_team, yahoo_my_teams, or yahoo_league_standings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_league_transactionsARead-onlyIdempotent
Adds, drops, waiver claims and trades across the league — who is doing what.
Returns: {fantasy_content:{league:[{league_key}, {transactions:{'0':{transaction:[{transaction_key, transaction_id, type:'add'|'drop'|'add/drop'|'trade'|'commish', status:'successful'|'pending', timestamp, faab_bid}, {players:{…}}]}, count}}]}} — SHAPE FROM VENDOR DOCS. faab_bid on successful claims is the market price of a player in your league — the single most useful input for bidding.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: League transactions {"leagueKey": "449.l.12345"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate readOnly, openWorld, and idempotent, and the description does not contradict them. It adds a caveat that the return shape is from vendor docs and may be unverified, which is helpful transparency. However, it does not elaborate on other behavioral aspects like error handling or data freshness beyond that, so it provides only moderate added value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for the summary, return shape, example, and auth note. It contains necessary details without being excessively verbose. The inclusion of the return shape and example is useful, though the return shape description is somewhat lengthy and could be trimmed, but overall it is concise enough for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the core functionality, expected output shape, an example request, and authentication requirements. It also includes a caution about the unverified vendor documentation. Given the tool's simplicity (two parameters) and that annotations cover read-only/idempotent nature, the description is fairly complete. It lacks details on error scenarios, but that is minor given the clarity of the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (format and leagueKey), and the tool description does not add further meaning beyond what is already in the schema. The parameters are straightforward, and the description's mention of leagueKey in the example reinforces its role, but it does not provide additional semantic depth that the schema lacks. Since schema coverage is 100%, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Adds, drops, waiver claims and trades across the league — who is doing what.' This unambiguously indicates it retrieves league transaction data, and it is distinguishable from other Yahoo tools which focus on different aspects (e.g., standings, teams, players). It could be more explicit by using 'Get' or 'Fetch', but the meaning is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives, but it is implicitly clear that it is for transactions. There are no obvious sibling tools for transactions, so the usage context is implied by the name and description. However, it lacks explicit guidance on use cases or when not to use it, so it falls short of a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_my_gamesARead-onlyIdempotent
Which fantasy games the authenticated user plays. START HERE — everything else needs a game_key from this.
Returns: {fantasy_content:{users:{'0':{user:[{guid}, {games:{'0':{game:[{game_key:'449', game_id, name:'Football', code:'nfl', season:'2025', is_over}]}, count}}]}, count}}} — SHAPE FROM VENDOR DOCS. Note users and games are OBJECTS keyed '0','1',… with a count sibling, and user is a two-element ARRAY of [meta, {games}].
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: The user's games
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json; Yahoo serves XML otherwise. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints, so the safety profile is covered. The description adds valuable context: authentication requirements (YAHOO_CLIENT_ID, YAHOO_CLIENT_SECRET, or YAHOO_REFRESH_TOKEN) and an explicitly flagged caveat that the response shape is unverified vendor documentation and should be inspected before relying on field names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and usage guidance, followed by a detailed return shape and caveat. The 'Example: The user's games' line adds little value and could be removed, but overall the content is dense and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-required-parameter read tool with no output schema, the description is unusually complete: it explains the return shape, warns that the shape is unverified, specifies the auth need, and places the tool in the overall workflow. This is sufficient for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single format parameter already documented as 'Leave as json; Yahoo serves XML otherwise.' The description adds no additional parameter-level meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the fantasy games the authenticated user plays, using a specific verb-like framing ('Which fantasy games... plays'). It also distinguishes itself from siblings by explicitly marking itself as the starting point that provides the game_key needed by other Yahoo tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong contextual guidance: 'START HERE — everything else needs a game_key from this.' This clearly tells the agent when to use it first in a Yahoo fantasy workflow, though it does not name specific sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_my_leaguesARead-onlyIdempotent
The authenticated user's leagues for one or more games — where you get league_key.
Returns: {fantasy_content:{users:{'0':{user:[{guid}, {games:{'0':{game:[{game_key}, {leagues:{'0':{league:[{league_key:'449.l.12345', league_id, name, num_teams, scoring_type, current_week, start_week, end_week, is_finished}]}, count}}]}}}}]}}} — SHAPE FROM VENDOR DOCS. league_key is what every league tool below needs.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: NFL leagues {"gameKeys": "nfl"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| gameKeys | Yes | Comma-separated game keys, e.g. 'nfl' or 'nfl,nba'. Bare codes mean the CURRENT season. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint, openWorldHint, and idempotentHint annotations already indicate this is a safe, non-mutating lookup. The description meaningfully adds that it requires Yahoo authentication, that the response shape is from vendor documentation and is unverified, and that the payload shape should be inspected before relying on field names. This is strong added behavioral context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long, but the length is justified because there is no output schema and the nested return shape is needed. It is front-loaded with the core purpose, followed by structured sections: return shape, caveat, example, and auth. The vendor-documentation caveat is especially valuable and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description supplies a detailed, caveated return-shape blueprint and an example call. It also covers authentication, the approximate nature of the payload, and the downstream use of league_key. This gives an agent enough context to call the tool, understand the response, and recognize when further verification is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters at 100% and explains gameKeys formatting, requiredness, and that bare codes mean the current season. The description adds a small example and clarifies the output is scoped to the authenticated user's leagues, but it does not materially enrich parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the endpoint for an authenticated user's leagues across one or more games, and emphasizes that it is the source of league_key. It distinguishes the tool by positioning league_key as the prerequisite for downstream league tools, which helps separate it from sibling tools like yahoo_my_games or yahoo_my_teams. A slight deduction because the opening is a noun phrase rather than an explicit verb ('retrieves', 'lists'), though the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that league_key is what every league tool below needs, giving a clear workflow signal: call this first to obtain league keys. It also explains that gameKeys drives which games are included and provides a concrete NFL example. It does not explicitly discuss when to avoid this tool or name alternatives, but the downstream-hint is useful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_my_teamsARead-onlyIdempotent
The authenticated user's own fantasy teams — where you get team_key, which every write needs.
Returns: {fantasy_content:{users:{'0':{user:[{guid}, {games:{'0':{game:[{game_key}, {teams:{'0':{team:[[{team_key:'449.l.12345.t.3'}, {team_id}, {name}, …]]}, count}}]}}}}]}}} — SHAPE FROM VENDOR DOCS. NOTE the team is a NESTED array-of-arrays of single-key objects, which is the most awkward shape in this API.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: The user's NFL teams {"gameKeys": "nfl"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| gameKeys | Yes | Comma-separated game keys, e.g. 'nfl'. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint, openWorldHint, and idempotentHint, which already indicate a safe read operation. The description adds critical context: return shape is unverified from vendor docs and may be approximate, plus notes the awkward nested structure. It also mentions auth requirements. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and structured: it starts with purpose and key value (team_key), includes return shape, notes unverified shape, gives example, and auth info. Some redundancy but each part adds value. Not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides return shape (unverified), example, auth note, and warns about nested structure. No output schema exists, so this compensates well. It could mention potential errors or limits, but given the tool's simplicity and good annotation coverage, it's fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with 100% coverage: gameKeys is described as required comma-separated, format is 'Leave as json.' The description adds an example ('gameKeys': 'nfl') which helps but doesn't significantly exceed schema. Schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides the authenticated user's own fantasy teams, and highlights that it returns team_key needed for writes. This is clear and distinguishes it from sibling tools like yahoo_my_games and yahoo_my_leagues, though it doesn't explicitly name a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: it's for getting the user's teams and especially useful for obtaining team_key before writes. It does not explicitly state when not to use it, but the example and focus on team_key guide usage. It lacks explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_player_ownershipARead-onlyIdempotent
Ownership and roster status for players in a league — percent owned and whether they are rostered, on waivers or free.
Returns: {fantasy_content:{league:[{league_key}, {players:{'0':{player:[[{player_key}, {name}], {ownership:{ownership_type:'team'|'waivers'|'freeagents', owner_team_key, waiver_date}}, {percent_owned:{value}}]}, count}}]}} — SHAPE FROM VENDOR DOCS. ownership_type is the difference between 'add them now' and 'you must outbid someone'.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Is this player available? {"leagueKey": "449.l.12345", "playerKeys": "449.p.31883"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| leagueKey | Yes | League key — ownership is league-specific. Required — part of the URL path. | |
| playerKeys | Yes | Comma-separated player keys. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate those. It adds valuable transparency by warning that the return shape is unverified, that the provider key is not held, and that the payload should be inspected before relying on field names. It also discloses auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections: summary, return shape, caveat, example, and auth. Every section earns its place, especially the unverified-shape warning and example. The dense return-shape block is necessary because there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by providing the vendor-documented return shape, a caveat about its reliability, a usage example, and auth instructions. It is complete enough for a simple read-only lookup, though it does not cover error cases or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described in the input schema. The description adds a concrete example with realistic leagueKey and playerKeys values, but it does not add substantive semantic meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's resource: ownership and roster status for league players, including percent owned and whether they are rostered, on waivers, or free. It is specific enough to distinguish from sibling tools like yahoo_player_stats or yahoo_team_roster, though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example 'Is this player available?' implies the primary use case, and the explanation of ownership_type ('add them now' vs 'you must outbid someone') provides practical context. However, there is no explicit when-to-use versus alternatives or any exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_player_statsARead-onlyIdempotent
One or more players' stats for a season or week.
Returns: {fantasy_content:{players:{'0':{player:[[{player_key}, {name}, {editorial_team_abbr}, {display_position}], {player_stats:{coverage_type, season, stats:[{stat:{stat_id, value}}]}}, {player_points:{total}}]}, count}}} — SHAPE FROM VENDOR DOCS. Batching keys is how you stay inside the rate limit.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A player's season {"playerKeys": "449.p.31883", "type": "season"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Aggregation window. One of: season, week, date, lastweek, lastmonth, average_season. | season |
| format | No | Leave as json. | json |
| playerKeys | Yes | Comma-separated player keys, e.g. '449.p.31883'. Batch several in one call. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent. The description goes well beyond that by providing an approximate return shape, a rate-limiting batching hint, auth requirements, and a caveat that the shape is unverified—valuable context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, return shape, example, and auth note. It's detailed but each part contributes useful information. It could be slightly trimmed (the return shape is verbose), but overall it's efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description provides an approximate response shape, a usage example, auth requirements, and batching advice. It addresses all key aspects an agent needs to invoke the tool correctly, making it highly complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a concrete example of playerKeys and type, and emphasizes batching, which helps an agent format the request correctly. This is a modest but useful improvement over the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns stats for one or more players for a season or week, which is specific and distinguishes it from team/league-level tools. The example and batching note reinforce its exact purpose, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (player stats) and includes a batching tip for rate limits. However, it doesn't explicitly mention alternatives or when not to use it, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_teamARead-onlyIdempotent
One team's metadata: name, manager, waiver priority, FAAB balance, moves used.
Returns: {fantasy_content:{team:[[{team_key}, {team_id}, {name}, {waiver_priority}, {faab_balance}, {number_of_moves}, {number_of_trades}, {roster_adds:{coverage_type, value}}, {managers:[…]}]]}} — SHAPE FROM VENDOR DOCS. roster_adds is how many moves have been used against any weekly cap.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: One team {"teamKey": "449.l.12345.t.3"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| teamKey | Yes | Team key, e.g. '449.l.12345.t.3' (from yahoo_my_teams or yahoo_league_teams). Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds important behavioral context: it requires explicit authentication keys (noting the environment variables) and warns that the response shape is based on vendor documentation and has not been verified against a live response, advising users to inspect the actual payload. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (general description, return shape, notes, example, auth). It is not overly verbose, though it includes a detailed return shape that could be considered lengthy, but it's necessary given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description provides the expected return shape, notes the uncertainty (vendor docs vs. verified), includes an example, and covers authentication. It lacks detailed explanations of each field's meaning, but that's acceptable given the scope. Overall, it offers sufficient context for a developer to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (format and teamKey). The description adds an example of teamKey's format, reinforcing the schema's description. Since schema coverage is 100%, the baseline is 3, but the example adds a bit more clarity, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns metadata for a single team, listing the specific fields (name, manager, waiver priority, etc.). This distinguishes it from other yahoo_team_* tools (like roster or stats) by focusing on metadata, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus other team-related tools (e.g., yahoo_team_roster, yahoo_team_stats). It only describes what it returns without contextualizing its use case or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_team_matchupsARead-onlyIdempotent
A team's whole season of matchups — opponents, results and weekly scores.
Returns: {fantasy_content:{team:[[{team_key}, …], {matchups:{'0':{matchup:{week, week_start, week_end, status, is_playoffs, winner_team_key, teams:{…}}}, count}}]}} — SHAPE FROM VENDOR DOCS.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: A team's season {"teamKey": "449.l.12345.t.3"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Leave as json. | json |
| teamKey | Yes | Team key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable context by warning that the return shape is unverified from vendor docs and by noting the authentication requirement via YAHOO_CLIENT_ID, YAHOO_CLIENT_SECRET, or YAHOO_REFRESH_TOKEN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose line, return shape, caveat, example, and auth note. It is longer than average, but the unverified-shape warning and authentication details earn their place. The purpose is front-loaded, and the caveat is important.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by providing a vendor-documented return shape, even with an explicit caveat that it is approximate. It also includes an example and auth instructions, making the tool sufficiently understood for a simple one-parameter call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds a concrete example teamKey format ('449.l.12345.t.3') beyond the schema, which helps an agent construct valid calls. The format parameter is also documented as 'Leave as json.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a team's full season of matchups, including opponents, results, and weekly scores. It implicitly distinguishes itself from sibling tools like yahoo_team_roster and yahoo_team_stats by focusing on matchups, but it lacks an explicit verb like 'retrieves' or 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this when you need a team's season-wide matchup schedule and results. However, it does not explicitly state when to prefer this over alternatives such as yahoo_team_stats or yahoo_league_scoreboard, and provides no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_team_rosterARead-onlyIdempotent
A team's roster for a week — who is started, benched, and in which slot. The read that precedes every lineup write.
Returns: {fantasy_content:{team:[[{team_key}, …], {roster:{'0':{players:{'0':{player:[[{player_key}, {name}, {eligible_positions:[{position}]}, {status}], {selected_position:[{coverage_type:'week'}, {position:'QB'|'BN'|'IR'}]}]}, count}}, coverage_type, week, is_editable}}]}} — SHAPE FROM VENDOR DOCS. selected_position.position is the CURRENT slot and eligible_positions the legal ones; is_editable false means the week is locked and a write will fail.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: This week's roster {"teamKey": "449.l.12345.t.3", "week": 1}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| week | Yes | Week number. Past weeks are historical; the current week is what a lineup write changes. Required — part of the URL path. | |
| format | No | Leave as json. | json |
| teamKey | Yes | Team key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description adds valuable behavioral context. It warns that the return shape is from vendor docs and unverified, discloses auth requirements (YAHOO_CLIENT_ID, etc.), and explains that is_editable false leads to write failures for future writes. This transparency about limitations and semantics goes well beyond the structured fields, aiding the agent in setting expectations correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured with clear labels ('Returns:', 'NOTE:', 'Example:', 'Auth:'). Each section serves a distinct purpose: core definition, return shape, caveat about unverified data, illustrative example, and authentication notes. While lengthy, the organization prevents it from feeling wasteful, and the front-loaded first sentence immediately conveys the tool's purpose. A slight deduction for the verbosity of the return shape, which could overwhelm some agents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description takes full responsibility for explaining the return shape, providing a detailed breakdown of the response structure. It covers auth, usage example, and a critical caveat about the unverified shape. This is a complex API (Yahoo fantasy), and the description thoroughly equips the agent to parse and use the response, including edge cases like is_editable locks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is a 3. The description adds value through a concrete example ({"teamKey": "449.l.12345.t.3", "week": 1}) and clarifies the meaning of 'week' in the context of lineup changes ('the current week is what a lineup write changes'). This goes beyond the schema's minimal field descriptions, though that added insight is modest given the schema already covers the essentials.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'A team's roster for a week — who is started, benched, and in which slot.' It distinguishes itself from siblings like yahoo_team and yahoo_team_stats by focusing on lineup/bench/slot details, and the phrase 'read that precedes every lineup write' further clarifies its niche. This is unambiguous and specific, going beyond a generic restatement of the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'The read that precedes every lineup write' and explains that is_editable false means the week is locked, implying when the tool is relevant. However, it does not explicitly name alternatives or state 'use this instead of X' for edge cases like team info or stats. Since the sibling list includes similar Yahoo tools, the lack of explicit alternatives keeps it slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yahoo_team_statsARead-onlyIdempotent
A team's aggregated stats for a season or a week.
Returns: {fantasy_content:{team:[[{team_key}, …], {team_stats:{coverage_type, season, stats:[{stat:{stat_id, value}}]}}, {team_points:{total}}]}} — SHAPE FROM VENDOR DOCS. stat_id resolves via yahoo_game_stat_categories.
NOTE: this shape is from the vendor's documentation and has NOT been verified against a live response (we hold no key for this provider). Treat it as approximate — inspect the actual payload before relying on a field name.
Example: Season totals {"teamKey": "449.l.12345.t.3", "type": "season"}
Auth: needs your own key in YAHOO_CLIENT_ID or YAHOO_CLIENT_SECRET or YAHOO_REFRESH_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Aggregation window. One of: season, week, date, lastweek, lastmonth. | season |
| format | No | Leave as json. | json |
| teamKey | Yes | Team key. Required — part of the URL path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, and open-world behavior, and the description adds valuable context: the returned shape comes from vendor docs and is unverified, authentication with a Yahoo key is required, and stat_id resolves via yahoo_game_stat_categories. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short purpose statement, return shape, caveat, example, and auth note. Each section serves a clear function, and the most important caveat about unverified vendor shape is prominently highlighted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the embedded return-shape definition and stat_id cross-reference are essential and mostly sufficient. The auth requirement, example call, and caveat about payload reliability make this a fairly complete description for a small 3-parameter stats fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage, so a baseline of 3 is appropriate. The description's example ('{"teamKey": "449.l.12345.t.3", "type": "season"}') adds a realistic key format, but it does not explain the broader enum values such as 'date', 'lastweek', or 'lastmonth'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies that the tool provides a team's aggregated stats and includes a detailed return shape, which differentiates it from roster/matchup/player-stat tools. It lacks an explicit active verb like 'fetch' or 'list' and only mentions season/week even though the schema also supports date, lastweek, and lastmonth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'team's aggregated stats for a season or a week' gives contextual reason to use it, but it does not explicitly say when to use it over alternatives or name any excluding cases. There is no direct comparison to sibling tools such as yahoo_team_roster, yahoo_team_matchups, or yahoo_player_stats.
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.
8 tool updates
v0.32.0- Added
betr_sgm_price - Added
entain_sgm_price - Added
fanduel_sgp_price - Added
sportsbet_bet_history - Added
sportsbet_price_slip - Added
tab_price_slip - Added
unibet_sgm_price - Added
unibet_validate_coupon
18 tool updates
v0.30.0- Added
mfl_free_agents - Added
mfl_injuries - Added
mfl_league - Added
mfl_league_standings - Added
mfl_live_scoring - Added
mfl_my_leagues - Added
mfl_nfl_schedule - Added
mfl_pending_trades - Added
mfl_player_scores - Added
mfl_players - Added
mfl_projected_scores - Added
mfl_rosters - Added
mfl_schedule - Added
mfl_transactions - Added
pointsbet_sgm_price - Added
sleeper_players - Added
sportsbet_sgm_price - Added
tab_sgm_price
20 tool updates
v0.27.0- Added
yahoo_game - Added
yahoo_game_roster_positions - Added
yahoo_game_stat_categories - Added
yahoo_league - Added
yahoo_league_draft - Added
yahoo_league_players - Added
yahoo_league_scoreboard - Added
yahoo_league_settings - Added
yahoo_league_standings - Added
yahoo_league_teams - Added
yahoo_league_transactions - Added
yahoo_my_games - Added
yahoo_my_leagues - Added
yahoo_my_teams - Added
yahoo_player_ownership - Added
yahoo_player_stats - Added
yahoo_team - Added
yahoo_team_matchups - Added
yahoo_team_roster - Added
yahoo_team_stats
25 tool updates
v0.26.0- Added
fpl_classic_league - Added
fpl_dream_team - Added
fpl_event_status - Added
fpl_fixtures - Added
fpl_game_rules - Added
fpl_gameweeks - Added
fpl_h2h_league - Added
fpl_live_gameweek - Added
fpl_manager - Added
fpl_manager_history - Added
fpl_manager_picks - Added
fpl_my_team - Added
fpl_player_detail - Added
fpl_players - Added
fpl_set_piece_notes - Added
fpl_teams - Added
ufc_athlete - Added
ufc_athlete_stats - Added
ufc_event_card - Added
ufc_events - Added
ufc_fights - Added
ufc_jsonapi_index - Added
ufc_rankings - Added
ufc_round_records - Added
ufc_search_athletes
698 tool updates
v0.24.0- Changed
afl_broadcast_channels2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_broadcast_event_get1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Broadcast event id. Required — part of the URL path."
- Changed
afl_broadcast_events5 fields changed- added
Input schema / properties / compseason / descriptionAdded value: +"Competition-season id (from afl_compseasons_list)." - added
Input schema / properties / fromDate / descriptionAdded value: +"ISO 8601 lower bound, e.g. 2026-05-25T07:00:00Z" - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / round / descriptionAdded value: +"Round number within the competition season." - added
Input schema / properties / toDate / descriptionAdded value: +"ISO 8601 upper bound"
- Changed
afl_broadcast_match_events3 fields changed- added
Input schema / properties / compseason / descriptionAdded value: +"Competition-season id (from afl_compseasons_list)." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / round / descriptionAdded value: +"Round number within the competition season."
- Changed
afl_broadcast_region_get1 field changed- added
Input schema / properties / regionId / descriptionAdded value: +"Broadcast region id (from the broadcasting region list). Required — part of the URL path."
- Changed
afl_broadcast_regions2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_broadcasters_list1 field changed- added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_cfs_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
afl_club_get1 field changed- added
Input schema / properties / clubId / descriptionAdded value: +"Club id (from afl_clubs_list). Required — part of the URL path."
- Changed
afl_clubs_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_competition_compseasons2 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Competition id (from afl_competitions_list). Required — part of the URL path." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_competition_get1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Competition id (e.g. 1 = AFL) Required — part of the URL path."
- Changed
afl_competitions_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Page index (0-based)" - added
Input schema / properties / pageSize / descriptionAdded value: +"Items per page (≤50)"
- Changed
afl_compseason_get1 field changed- added
Input schema / properties / compSeasonId / descriptionAdded value: +"Comp season id (e.g. 85 = 2026 AFL) Required — part of the URL path."
- Changed
afl_compseasons_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_content_photo_get1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Content item id. Required — part of the URL path."
- Changed
afl_content_photo_list5 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return." - added
Input schema / properties / offset / descriptionAdded value: +"Rows to skip — this CMS surface pages with offset/limit, not page/pageSize." - added
Input schema / properties / referenceExpression / descriptionAdded value: +"Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity." - added
Input schema / properties / tagExpression / descriptionAdded value: +"Pulse tag filter expression, e.g. 'AFL_MATCH:1234'." - added
Input schema / properties / tagNames / descriptionAdded value: +"Tag names to match (comma-separated)."
- Changed
afl_content_promo_get2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Content item id. Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return."
- Changed
afl_content_promo_list3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return." - added
Input schema / properties / referenceExpression / descriptionAdded value: +"Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity." - added
Input schema / properties / tagNames / descriptionAdded value: +"e.g. lineups-sponsor"
- Changed
afl_content_text_get1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Content item id. Required — part of the URL path."
- Changed
afl_content_text_list9 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return." - added
Input schema / properties / offset / descriptionAdded value: +"Rows to skip — this CMS surface pages with offset/limit, not page/pageSize." - added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / referenceExpression / descriptionAdded value: +"Boolean ref expr, e.g. (AFL_COMPETITION:1) or (AFL_COMPETITION:3)" - added
Input schema / properties / references / descriptionAdded value: +"TYPE:id shorthand CSV, e.g. AFL_MATCH:8130" - added
Input schema / properties / sort / descriptionAdded value: +"Sort direction." - added
Input schema / properties / tagExpression / descriptionAdded value: +"Tag expr, e.g. (\"News\")" - added
Input schema / properties / tagNames / descriptionAdded value: +"Tag labels CSV"
- Changed
afl_content_video_get1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Content item id. Required — part of the URL path."
- Changed
afl_content_video_list6 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return." - added
Input schema / properties / offset / descriptionAdded value: +"Rows to skip — this CMS surface pages with offset/limit, not page/pageSize." - added
Input schema / properties / referenceExpression / descriptionAdded value: +"Pulse reference filter, e.g. 'AFL_CLUB:Carlton' — restricts content to a linked entity." - added
Input schema / properties / references / descriptionAdded value: +"e.g. AFL_MATCH:8130" - added
Input schema / properties / tagExpression / descriptionAdded value: +"Pulse tag filter expression, e.g. 'AFL_MATCH:1234'." - added
Input schema / properties / tagNames / descriptionAdded value: +"e.g. ProgramCategory:Match Replays"
- Changed
afl_keyserver_url_signing1 field changed- added
Input schema / properties / url / descriptionAdded value: +"The unsigned HLS .m3u8 URL to sign."
- Changed
afl_ladders_get1 field changed- added
Input schema / properties / compSeasonId / descriptionAdded value: +"Competition-season id (from afl_compseasons_list) — a season WITHIN a competition, not a calendar year. Required — part of the URL path."
- Changed
afl_live_audio3 fields changed- added
Input schema / properties / compseason / descriptionAdded value: +"Competition-season id (from afl_compseasons_list)." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / round / descriptionAdded value: +"Round number within the competition season."
- Changed
afl_live_video3 fields changed- added
Input schema / properties / compseason / descriptionAdded value: +"Competition-season id (from afl_compseasons_list)." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / round / descriptionAdded value: +"Round number within the competition season."
- Changed
afl_match_get1 field changed- added
Input schema / properties / matchId / descriptionAdded value: +"Match id (NOT providerId) Required — part of the URL path."
- Changed
afl_matches_list11 fields changed- added
Input schema / properties / compSeasonId / descriptionAdded value: +"Comp season id" - added
Input schema / properties / competitionId / descriptionAdded value: +"Competition id(s), comma-list ok" - added
Input schema / properties / endDate / descriptionAdded value: +"Upper bound YYYY-MM-DD" - added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Up to 300" - added
Input schema / properties / roundNumber / descriptionAdded value: +"Round number within the competition season." - added
Input schema / properties / sort / descriptionAdded value: +"Sort direction. One of: asc, desc." - added
Input schema / properties / sort / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / startDate / descriptionAdded value: +"Lower bound YYYY-MM-DD" - added
Input schema / properties / status / descriptionAdded value: +"Status CSV: U,L,C,P,B,S" - added
Input schema / properties / teamId / descriptionAdded value: +"Team id(s), e.g. 11,9"
- Changed
afl_player_get1 field changed- added
Input schema / properties / playerId / descriptionAdded value: +"Player id (from afl_players_list). Required — part of the URL path."
- Changed
afl_players_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_rounds_list3 fields changed- added
Input schema / properties / compSeasonId / descriptionAdded value: +"Competition-season id (from afl_compseasons_list) — a season WITHIN a competition, not a calendar year. Required — part of the URL path." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page." - added
Input schema / properties / roundNumber / descriptionAdded value: +"Filter to a single round"
- Changed
afl_season_get1 field changed- added
Input schema / properties / seasonId / descriptionAdded value: +"Season id (from afl_seasons_list). Required — part of the URL path."
- Changed
afl_seasons_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_statspro_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
afl_team_get1 field changed- added
Input schema / properties / teamId / descriptionAdded value: +"Team id (e.g. 1 = Adelaide Crows) Required — part of the URL path."
- Changed
afl_teams_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
afl_venue_get1 field changed- added
Input schema / properties / venueId / descriptionAdded value: +"Venue id (from afl_venues_list). Required — part of the URL path."
- Changed
afl_venues_list2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"Zero-based page number." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Added
apisports_baseball_games - Added
apisports_basketball_games - Added
apisports_basketball_standings - Added
apisports_football_fixture_statistics - Added
apisports_football_fixtures - Added
apisports_football_h2h - Added
apisports_football_leagues - Added
apisports_football_odds - Added
apisports_football_players - Added
apisports_football_predictions - Added
apisports_football_standings - Added
apisports_football_teams - Added
apisports_formula1_races - Added
apisports_handball_games - Added
apisports_hockey_games - Added
apisports_mma_fights - Added
apisports_nfl_games - Added
apisports_rugby_games - Added
apisports_status - Added
apisports_volleyball_games - Added
apitennis_events - Added
apitennis_fixtures - Added
apitennis_h2h - Added
apitennis_livescore - Added
apitennis_players - Added
apitennis_standings - Added
apitennis_tournaments - Added
balldontlie_epl_games - Added
balldontlie_epl_teams - Added
balldontlie_mlb_games - Added
balldontlie_nba_games - Added
balldontlie_nba_players - Added
balldontlie_nba_season_averages - Added
balldontlie_nba_standings - Added
balldontlie_nba_stats - Added
balldontlie_nba_teams - Added
balldontlie_nfl_games - Changed
betfair_cashout3 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key (leave default)." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / marketIds / descriptionAdded value: +"Comma-separated market ids."
- Changed
betfair_event_details5 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated event ids." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / regionCode / descriptionAdded value: +"Region (NZAUS for AU/NZ)."
- Changed
betfair_event_timeline6 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / eventId / descriptionAdded value: +"Single event id." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / productType / descriptionAdded value: +"Product type." - added
Input schema / properties / regionCode / descriptionAdded value: +"Region."
- Changed
betfair_event_timelines4 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated event ids." - added
Input schema / properties / locale / descriptionAdded value: +"Locale."
- Changed
betfair_market_prices8 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key (leave default)." - added
Input schema / properties / alt / descriptionAdded value: +"Response format (leave json)." - added
Input schema / properties / currencyCode / descriptionAdded value: +"Currency for prices/volumes." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / marketIds / descriptionAdded value: +"Comma-separated market ids, e.g. \"1.258654642,1.258653584\"." - added
Input schema / properties / rollupLimit / descriptionAdded value: +"Price-ladder depth to roll up." - added
Input schema / properties / rollupModel / descriptionAdded value: +"Roll-up model (STAKE / MANAGED_LIABILITY / NONE)." - added
Input schema / properties / types / descriptionAdded value: +"Which data sections to include (CSV)."
- Changed
betfair_markets_by_event8 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key (leave default)." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / currencyCode / descriptionAdded value: +"Currency for prices/volumes." - added
Input schema / properties / eventIds / descriptionAdded value: +"Event ids, e.g. 35652256 (from betfair_navigation EVENT nodes). Prefer ONE id per call — multi-id batches return 400." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / rollupLimit / descriptionAdded value: +"Price-ladder depth to roll up." - added
Input schema / properties / rollupModel / descriptionAdded value: +"Roll-up model." - added
Input schema / properties / types / descriptionAdded value: +"Which data sections to include (CSV)."
- Changed
betfair_navigation9 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key (leave default)." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / attachments / descriptionAdded value: +"Attachment types to inline (MENU, EVENT, MARKET). Include MARKET for bulk market-id discovery — 1000+ MARKET nodes per event type in one call (verified live 2026-07-06), ready for betfair_market_prices." - added
Input schema / properties / currencyCode / descriptionAdded value: +"Currency." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / maxInDistance / descriptionAdded value: +"How many parent levels to walk up." - added
Input schema / properties / maxOutDistance / descriptionAdded value: +"How many child levels to walk down." - added
Input schema / properties / maxResults / descriptionAdded value: +"Max nodes to return." - added
Input schema / properties / nodeIds / descriptionAdded value: +"Node ids to start from, e.g. \"EVENT_TYPE:7\" (Horse Racing), \"EVENT_TYPE:1\" (Soccer), \"COMP:11897406\", \"EVENT:35652256\"."
- Changed
betfair_scores4 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated event ids, e.g. 35676887." - added
Input schema / properties / locale / descriptionAdded value: +"Locale."
- Changed
betfair_scores_broadcast5 fields changed- added
Input schema / properties / _ak / descriptionAdded value: +"Public web app key." - added
Input schema / properties / alt / descriptionAdded value: +"Response format." - added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated event ids." - added
Input schema / properties / locale / descriptionAdded value: +"Locale." - added
Input schema / properties / regionCode / descriptionAdded value: +"Region."
- Changed
betr_fav41 field changed- added
Input schema / properties / EventTypeFilter / descriptionAdded value: +"Race-type filter (7 = all racing)."
- Changed
betr_grouped_racecard1 field changed- added
Input schema / properties / DaysToRace / descriptionAdded value: +"Day offset: 0 today, 1 tomorrow, -1 yesterday, etc."
- Changed
betr_master_category3 fields changed- added
Input schema / properties / EventClassCode / descriptionAdded value: +"Optional class filter, e.g. \"FEATURERACE\" for racing." - added
Input schema / properties / EventTypeId / descriptionAdded value: +"Event type id (e.g. 107 Basketball, 1 Racing)." - added
Input schema / properties / WithLevelledMarkets / descriptionAdded value: +"Include levelled markets."
- Changed
betr_master_event2 fields changed- added
Input schema / properties / GroupTypeCode / descriptionAdded value: +"Market group to return, from the default response's GroupLinks (e.g. \"G25\" Popular, \"G26\" Totals, \"G175\" Race to). Omit for the default (popular) group." - added
Input schema / properties / MasterEventId / descriptionAdded value: +"Master event (match) id, e.g. 2095084 (from a category / SGM feed)."
- Changed
betr_next5_races2 fields changed- added
Input schema / properties / CountryFilter / descriptionAdded value: +"Country filter (0 = all)." - added
Input schema / properties / EventTypeFilter / descriptionAdded value: +"Race-type filter (7 = all racing; 1 thoroughbred, etc.)."
- Changed
betr_pop_sgm_bet_data3 fields changed- added
Input schema / properties / CategoryId / descriptionAdded value: +"Category (competition) id." - added
Input schema / properties / MasterEventId / descriptionAdded value: +"Master event id (a match)." - added
Input schema / properties / SortOrder / descriptionAdded value: +"Sort order."
- Changed
betr_race1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Race event id (from a races feed)."
- Changed
betr_race_flucs1 field changed- added
Input schema / properties / EventId / descriptionAdded value: +"Race event id."
- Changed
betr_race_form2 fields changed- added
Input schema / properties / EventId / descriptionAdded value: +"Race event id." - added
Input schema / properties / RequestingRace / descriptionAdded value: +"Upstream flag; leave false."
- Changed
betr_sports_category1 field changed- added
Input schema / properties / CategoryId / descriptionAdded value: +"Category (competition) id, e.g. 39251 (NBA)."
- Changed
betr_todays_races1 field changed- added
Input schema / properties / CountryFilter / descriptionAdded value: +"Country filter (0 = all)."
- Added
cfbd_advanced_box_score - Added
cfbd_betting_lines - Added
cfbd_games - Added
cfbd_portal - Added
cfbd_rankings - Added
cfbd_ratings_elo - Added
cfbd_ratings_sp - Added
cfbd_recruiting - Added
cfbd_team_season_stats - Added
cfbd_teams - Added
chesscom_archives - Added
chesscom_club - Added
chesscom_leaderboards - Added
chesscom_monthly_games - Added
chesscom_player - Added
chesscom_player_stats - Added
chesscom_titled_players - Changed
cricketaustralia_competitions2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_content6 fields changed- added
Input schema / properties / contentType / descriptionAdded value: +"Content type. One of: VIDEO, TEXT, AUDIO, PLAYLIST. Required — part of the URL path." - added
Input schema / properties / contentType / enumAdded value: +[ + "VIDEO", + "TEXT", + "AUDIO", + "PLAYLIST" +] - added
Input schema / properties / detail / descriptionAdded value: +"Detail level (STANDARD or BASIC)." - added
Input schema / properties / page / descriptionAdded value: +"Zero-based page index." - added
Input schema / properties / pageSize / descriptionAdded value: +"Items per page." - added
Input schema / properties / tagNames / descriptionAdded value: +"Optional tag filter (e.g. a competition or team tag)."
- Changed
cricketaustralia_fixtures8 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Filter to one competition." - added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / gameTypeId / descriptionAdded value: +"Filter by game type (Test / ODI / T20)." - added
Input schema / properties / isCompleted / descriptionAdded value: +"Only completed matches." - added
Input schema / properties / isLive / descriptionAdded value: +"Only live matches." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave as the default to get the camelCase envelope)." - added
Input schema / properties / limit / descriptionAdded value: +"Max fixtures to return." - added
Input schema / properties / year / descriptionAdded value: +"Season/calendar year (e.g. 2026)."
- Changed
cricketaustralia_players3 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)." - added
Input schema / properties / playerIds / descriptionAdded value: +"List of player ids (sent as a comma-separated list). Ids come from a scorecard's players[] or fixtures."
- Changed
cricketaustralia_playlist3 fields changed- added
Input schema / properties / detail / descriptionAdded value: +"Detail level." - added
Input schema / properties / pageSize / descriptionAdded value: +"Max items to include." - added
Input schema / properties / playlistId / descriptionAdded value: +"Playlist id. Required — part of the URL path."
- Changed
cricketaustralia_runs_graph3 fields changed- added
Input schema / properties / fixtureId / descriptionAdded value: +"Fixture id." - added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_scorecard4 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Optional competition id (some fixtures resolve faster with it)." - added
Input schema / properties / fixtureId / descriptionAdded value: +"Fixture id (from cricketaustralia_fixtures)." - added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_standings3 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Competition id (from cricketaustralia_competitions or a fixture)." - added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_streams2 fields changed- added
Input schema / properties / fixtureId / descriptionAdded value: +"Fixture id." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_teams2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_tours2 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)."
- Changed
cricketaustralia_venue3 fields changed- added
Input schema / properties / format / descriptionAdded value: +"Response format." - added
Input schema / properties / jsconfig / descriptionAdded value: +"Response-shape flag (leave default)." - added
Input schema / properties / venueId / descriptionAdded value: +"Venue id (from a fixture's venueId)."
- Added
cricketdata_current_matches - Added
cricketdata_match_info - Added
cricketdata_matches - Added
cricketdata_player_info - Added
cricketdata_players - Added
cricketdata_scorecard - Added
cricketdata_series - Added
cricketdata_series_info - Changed
dabble_active_competitions1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Optional — filter active competitions to ONE sport (sportId from dabble_sports). Omit for all sports."
- Changed
dabble_competition_fixtures4 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Competition UUID — from dabble_active_competitions / dabble_competitions (any competition, not just AFL/NRL). Required — part of the URL path." - added
Input schema / properties / exclude / descriptionAdded value: +"Slim the payload by dropping embedded block(s) — pass any of markets / prices / selections (one or more, sent as repeated exclude[] params). Omit to include all." - added
Input schema / properties / exclude / enumAdded value: +[ + "markets", + "prices", + "selections" +] - added
Input schema / properties / includeInPlay / descriptionAdded value: +"Include in-play fixtures."
- Changed
dabble_competitions2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Exact competition name (e.g. 'NRL', 'Premier League', 'AFL Matches')." - added
Input schema / properties / sportId / descriptionAdded value: +"List all competitions for ONE sport (sportId from dabble_sports) — includes non-active ones."
- Changed
dabble_fixture_details1 field changed- added
Input schema / properties / fixtureId / descriptionAdded value: +"Fixture UUID (from dabble_competition_fixtures.data[].id). Required — part of the URL path."
- Changed
datagolf_approach_skill3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / period / descriptionAdded value: +"Window: last 24 months, last 12 months, or year-to-date. One of: l24, l12, ytd." - added
Input schema / properties / period / enumAdded value: +[ + "l24", + "l12", + "ytd" +]
- Changed
datagolf_fantasy_projections6 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / site / descriptionAdded value: +"DFS site. One of: draftkings, fanduel, yahoo." - added
Input schema / properties / site / enumAdded value: +[ + "draftkings", + "fanduel", + "yahoo" +] - added
Input schema / properties / slate / descriptionAdded value: +"Slate (e.g. main)." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_field_updates3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_hist_dfs_event_list3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / site / descriptionAdded value: +"DFS site (this feed keys off site, not tour). One of: draftkings, fanduel, yahoo." - added
Input schema / properties / site / enumAdded value: +[ + "draftkings", + "fanduel", + "yahoo" +]
- Changed
datagolf_hist_dfs_points7 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"Event id." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / site / descriptionAdded value: +"DFS site. One of: draftkings, fanduel, yahoo." - added
Input schema / properties / site / enumAdded value: +[ + "draftkings", + "fanduel", + "yahoo" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Calendar year."
- Changed
datagolf_hist_event_list4 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Optional tour filter. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Optional calendar-year filter."
- Changed
datagolf_hist_matchups8 fields changed- added
Input schema / properties / book / descriptionAdded value: +"Sportsbook." - added
Input schema / properties / event_id / descriptionAdded value: +"Event id." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds format. One of: decimal, american, fraction, percent." - added
Input schema / properties / odds_format / enumAdded value: +[ + "decimal", + "american", + "fraction", + "percent" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Calendar year."
- Changed
datagolf_hist_odds_event_list3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_hist_outrights10 fields changed- added
Input schema / properties / book / descriptionAdded value: +"Sportsbook (e.g. pinnacle, bet365, draftkings)." - added
Input schema / properties / event_id / descriptionAdded value: +"Event id." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / market / descriptionAdded value: +"Outright market. One of: win, top_5, top_10, top_20, make_cut, mc, frl." - added
Input schema / properties / market / enumAdded value: +[ + "win", + "top_5", + "top_10", + "top_20", + "make_cut", + "mc", + "frl" +] - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds format. One of: decimal, american, fraction, percent." - added
Input schema / properties / odds_format / enumAdded value: +[ + "decimal", + "american", + "fraction", + "percent" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Calendar year."
- Changed
datagolf_hist_results4 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"Event id (from datagolf_hist_results_event_list)." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour (PGA only for this feed)." - added
Input schema / properties / year / descriptionAdded value: +"Calendar year of the event."
- Changed
datagolf_hist_results_event_list2 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour (PGA only for this feed)."
- Changed
datagolf_hist_rounds5 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"Event id (from datagolf_hist_event_list)." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Calendar year of the event."
- Changed
datagolf_in_play5 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds/probability format. One of: percent, decimal, american, fraction." - added
Input schema / properties / odds_format / enumAdded value: +[ + "percent", + "decimal", + "american", + "fraction" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_live_hole_stats3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_live_strokes_gained3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / sg / descriptionAdded value: +"Raw SG values, or relative to model predictions." - added
Input schema / properties / sg / enumAdded value: +[ + "raw", + "relative" +]
- Changed
datagolf_live_tournament_stats6 fields changed- added
Input schema / properties / display / descriptionAdded value: +"Values or ranks." - added
Input schema / properties / display / enumAdded value: +[ + "value", + "rank" +] - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / round / descriptionAdded value: +"Which round (or cumulative/average). One of: event_cumulative, event_avg, 1, 2, 3, 4." - added
Input schema / properties / round / enumAdded value: +[ + "event_cumulative", + "event_avg", + 1, + 2, + 3, + 4 +] - added
Input schema / properties / stats / descriptionAdded value: +"Stat categories to include (CSV)."
- Changed
datagolf_matchups7 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / market / descriptionAdded value: +"Matchup market. One of: tournament_matchups, round_matchups, 3_balls." - added
Input schema / properties / market / enumAdded value: +[ + "tournament_matchups", + "round_matchups", + "3_balls" +] - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds format. One of: decimal, american, fraction, percent." - added
Input schema / properties / odds_format / enumAdded value: +[ + "decimal", + "american", + "fraction", + "percent" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_matchups_all_pairings5 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds format. One of: decimal, american, fraction, percent." - added
Input schema / properties / odds_format / enumAdded value: +[ + "decimal", + "american", + "fraction", + "percent" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_outrights7 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / market / descriptionAdded value: +"Outright market. One of: win, top_5, top_10, top_20, make_cut, mc, frl." - added
Input schema / properties / market / enumAdded value: +[ + "win", + "top_5", + "top_10", + "top_20", + "make_cut", + "mc", + "frl" +] - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds format. One of: decimal, american, fraction, percent." - added
Input schema / properties / odds_format / enumAdded value: +[ + "decimal", + "american", + "fraction", + "percent" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_player_decompositions3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_player_list1 field changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format (leave json)."
- Changed
datagolf_pre_tournament6 fields changed- added
Input schema / properties / add_position / descriptionAdded value: +"Extra finish positions to include (e.g. '1,2,3')." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / odds_format / descriptionAdded value: +"How probabilities/odds are expressed. One of: percent, decimal, american, fraction." - added
Input schema / properties / odds_format / enumAdded value: +[ + "percent", + "decimal", + "american", + "fraction" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_pre_tournament_archive7 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"Event id (from get-schedule / historical event lists)." - added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / odds_format / descriptionAdded value: +"Odds/probability format. One of: percent, decimal, american, fraction." - added
Input schema / properties / odds_format / enumAdded value: +[ + "percent", + "decimal", + "american", + "fraction" +] - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +] - added
Input schema / properties / year / descriptionAdded value: +"Calendar year of the event."
- Changed
datagolf_rankings1 field changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format."
- Changed
datagolf_schedule3 fields changed- added
Input schema / properties / file_format / descriptionAdded value: +"Response format." - added
Input schema / properties / tour / descriptionAdded value: +"Tour. One of: pga, euro, kft, alt, liv." - added
Input schema / properties / tour / enumAdded value: +[ + "pga", + "euro", + "kft", + "alt", + "liv" +]
- Changed
datagolf_skill_ratings3 fields changed- added
Input schema / properties / display / descriptionAdded value: +"Show raw values or ranks." - added
Input schema / properties / display / enumAdded value: +[ + "value", + "rank" +] - added
Input schema / properties / file_format / descriptionAdded value: +"Response format."
- Changed
entain_cms_entries5 fields changed- added
Input schema / properties / content_type / descriptionAdded value: +"Contentful content type, e.g. promotions, majorEventNavigation, nationallyApprovedPromotions." - added
Input schema / properties / include / descriptionAdded value: +"Linked-entry resolution depth (Contentful CDA)." - added
Input schema / properties / limit / descriptionAdded value: +"Page size (Contentful CDA)." - added
Input schema / properties / order / descriptionAdded value: +"Sort order field (Contentful CDA)." - added
Input schema / properties / skip / descriptionAdded value: +"Pagination offset (Contentful CDA)."
- Changed
entain_event_market_type_group_maps1 field changed- added
Input schema / properties / category_id / descriptionAdded value: +"Sport category UUID."
- Changed
entain_event_market_type_groups1 field changed- added
Input schema / properties / category_id / descriptionAdded value: +"Sport category UUID."
- Changed
entain_graphql_call2 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / variables / descriptionAdded value: +"Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one."
- Changed
entain_metadata_by_url1 field changed- added
Input schema / properties / url / descriptionAdded value: +"URL path, e.g. /racing."
- Changed
entain_quicklinks_list1 field changed- added
Input schema / properties / filter / descriptionAdded value: +"QuickLinkFilter, e.g. {\"type\":\"Racing\"}. Passing a bare string returns 500."
- Changed
entain_racing_future_markets2 fields changed- added
Input schema / properties / exclude / descriptionAdded value: +"Field mask, e.g. {\"markets\":true,\"prices\":true,\"entrants\":true}." - added
Input schema / properties / method / descriptionAdded value: +"Upstream RPC method (observed: future-markets)."
- Changed
entain_racing_meeting2 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Race date, YYYY-MM-DD." - added
Input schema / properties / timezone / descriptionAdded value: +"IANA timezone, e.g. Australia/Melbourne."
- Changed
entain_racing_next_races2 fields changed- added
Input schema / properties / categories / descriptionAdded value: +"JSON array of racing category UUIDs." - added
Input schema / properties / count / descriptionAdded value: +"Races per category."
- Changed
entain_racing_racecard2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Race UUID from the meetings route." - added
Input schema / properties / method / descriptionAdded value: +"Upstream RPC method (racecard)."
- Changed
entain_racing_search2 fields changed- added
Input schema / properties / category_ids / descriptionAdded value: +"Optional JSON array of category UUIDs to filter." - added
Input schema / properties / q / descriptionAdded value: +"Optional full-text query."
- Changed
entain_sport_event_card1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Sport event UUID (bare, no type prefix)."
- Changed
entain_sport_event_request1 field changed- added
Input schema / properties / category_ids / descriptionAdded value: +"JSON array of sport category UUIDs."
- Added
entitysport_competitions - Added
entitysport_match_commentary - Added
entitysport_match_info - Added
entitysport_match_scorecard - Added
entitysport_matches - Changed
espn_cdn_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
espn_core_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
espn_game_summary3 fields changed- added
Input schema / properties / event / descriptionAdded value: +"Event/game id from espn_scoreboard, e.g. 401547439." - added
Input schema / properties / league / descriptionAdded value: +"League slug, e.g. nfl, nba. Required — part of the URL path." - added
Input schema / properties / sport / descriptionAdded value: +"Sport slug, e.g. football, basketball. Required — part of the URL path."
- Changed
espn_news3 fields changed- added
Input schema / properties / league / descriptionAdded value: +"League slug, e.g. nfl, nba. Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Max articles to return." - added
Input schema / properties / sport / descriptionAdded value: +"Sport slug, e.g. football, basketball. Required — part of the URL path."
- Changed
espn_scoreboard5 fields changed- added
Input schema / properties / dates / descriptionAdded value: +"Date filter YYYYMMDD (or a range YYYYMMDD-YYYYMMDD); omit for today." - added
Input schema / properties / league / descriptionAdded value: +"League slug, e.g. nfl, nba, mlb, nhl, eng.1. Required — part of the URL path." - added
Input schema / properties / seasontype / descriptionAdded value: +"Season phase: 1=pre, 2=regular, 3=post, 4=off." - added
Input schema / properties / sport / descriptionAdded value: +"Sport slug, e.g. football, basketball, baseball, hockey, soccer. Required — part of the URL path." - added
Input schema / properties / week / descriptionAdded value: +"Week number (NFL/college football)."
- Changed
espn_site_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
espn_standings4 fields changed- added
Input schema / properties / league / descriptionAdded value: +"League slug, e.g. nfl, nba. Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Season year, e.g. 2025; omit for current." - added
Input schema / properties / seasontype / descriptionAdded value: +"Season phase: 1=pre, 2=regular, 3=post." - added
Input schema / properties / sport / descriptionAdded value: +"Sport slug, e.g. football, basketball. Required — part of the URL path."
- Changed
espn_teams2 fields changed- added
Input schema / properties / league / descriptionAdded value: +"League slug, e.g. nfl, nba. Required — part of the URL path." - added
Input schema / properties / sport / descriptionAdded value: +"Sport slug, e.g. football, basketball. Required — part of the URL path."
- Changed
espn_web_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
espnfantasy_boxscore6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"The week / scoring period to score. REQUIRED — omitting it yields season totals with no lineup detail." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"mBoxscore carries the lineups; mMatchupScore adds the head-to-head totals."
- Changed
espnfantasy_communication6 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"Topic filter, e.g. {\"topics\":{\"filterType\":{\"value\":[\"ACTIVITY_TRANSACTIONS\"]},\"limit\":25,\"sortMessageDate\":{\"sortPriority\":1,\"sortAsc\":false}}}." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"`kona_league_communication` (activity) or `kona_league_messageboard` (chat)."
- Changed
espnfantasy_draft5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_everything6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period to anchor roster/boxscore sections to." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_league7 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"Filter object; league-scoped views nest under an entity key, e.g. {\"players\":{\"limit\":50,\"sortPercOwned\":{\"sortPriority\":1,\"sortAsc\":false}}}." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"Your league id — the `leagueId=` in the fantasy site URL. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period (NFL week / daily-sport day). Required by mBoxscore, mRoster-at-week, mTransactions2." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018; use espnfantasy_league_history for older). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"One or more views, sent as repeated params. Verified: mTeam, mRoster, mMatchup, mMatchupScore, mSettings, mStandings, mBoxscore, mScoreboard, mSchedule, mDraftDetail, mTransactions2, mPendingTransactions, mPositionalRatings, mLiveScoring, mNav, mStatus, kona_player_info, kona_playercard, allon."
- Changed
espnfantasy_league_defaults4 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / scoringTypeId / descriptionAdded value: +"Preset id. Verified for ffl: 1=Standard, 3=PPR, 5=All-Play PPR, 6=Knockout. Other ids return 200 with no settings.name." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year, e.g. 2025. Required — part of the URL path."
- Changed
espnfantasy_league_history5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year to read. Omit to get every season the league has history for." - added
Input schema / properties / view / descriptionAdded value: +"Same view vocabulary as the seasons path."
- Changed
espnfantasy_league_settings5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_live_scoring6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period; omit for the current one." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_matchup_score7 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"Limit to given matchup periods, e.g. {\"schedule\":{\"filterMatchupPeriodIds\":{\"value\":[3]}}}." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Narrow to one scoring period." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_matchups5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_nav5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_pending_transactions6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_player_card6 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"REQUIRED to target players. {\"players\":{\"filterIds\":{\"value\":[3139477]},\"filterStatsForTopScoringPeriodIds\":{\"value\":16,\"additionalValue\":[\"002025\",\"102025\"]}}} — additionalValue ids are \"00\"+season (actual) and \"10\"+season (projected)." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_player_info7 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"NESTED under \"players\". Free agents: {\"players\":{\"filterStatus\":{\"value\":[\"FREEAGENT\",\"WAIVERS\"]},\"limit\":50,\"sortPercOwned\":{\"sortPriority\":1,\"sortAsc\":false}}}. A limit REQUIRES a sort. filterSlotIds narrows by position." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period the stats/projections are anchored to." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_player_news3 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / playerId / descriptionAdded value: +"ESPN player id (from espnfantasy_players or a roster entry)."
- Changed
espnfantasy_players5 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"ROOT-level filter object (NOT nested under \"players\" on this path), e.g. {\"filterActive\":{\"value\":true}}. A \"limit\" MUST be paired with a sort or the API 400s with FILTER_LIMIT_MISSING_SORT." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year, e.g. 2025. Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is; `players_wl` is the only view this path serves."
- Changed
espnfantasy_positional_ratings6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period to rate." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_pro_teams4 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year, e.g. 2025. Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is. `proTeamSchedules_wl` is what carries the pro schedule."
- Changed
espnfantasy_rosters6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Roster as it stood in this scoring period (week). Omit for the current one." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_scoreboard6 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period; omit for the current one." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_season3 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code: ffl=football, flb=baseball, fba=basketball, fhl=hockey, wfba=WNBA." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year, e.g. 2025 (from espnfantasy_games.currentSeasonId). Required — part of the URL path."
- Changed
espnfantasy_standings5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"mStandings alone omits team names/records — mTeam is what carries them."
- Changed
espnfantasy_status5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_teams5 fields changed- added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Changed
espnfantasy_transactions7 fields changed- added
Input schema / properties / fantasy_filter / descriptionAdded value: +"Optional type filter, e.g. {\"transactions\":{\"filterType\":{\"value\":[\"TRADE_ACCEPTED\",\"WAIVER\",\"FREEAGENT\"]}}}." - added
Input schema / properties / game / descriptionAdded value: +"Fantasy game code. One of: ffl, flb, fba, fhl, wfba." - added
Input schema / properties / game / enumAdded value: +[ + "ffl", + "flb", + "fba", + "fhl", + "wfba" +] - added
Input schema / properties / leagueId / descriptionAdded value: +"League id. Required — part of the URL path." - added
Input schema / properties / scoringPeriodId / descriptionAdded value: +"Scoring period to read. REQUIRED — without it the response carries no `transactions` key at all." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season year (>= 2018). Required — part of the URL path." - added
Input schema / properties / view / descriptionAdded value: +"Leave as-is."
- Added
euroleague_clubs - Added
euroleague_game - Added
euroleague_game_stats - Added
euroleague_games - Added
euroleague_people - Added
euroleague_rounds - Added
euroleague_seasons - Changed
fanduel_racing_call2 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / variables / descriptionAdded value: +"Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one."
- Changed
fanduel_racing_messages4 fields changed- added
Input schema / properties / brand / descriptionAdded value: +"Brand key." - added
Input schema / properties / device / descriptionAdded value: +"Device key." - added
Input schema / properties / namespace / descriptionAdded value: +"Message namespace(s), comma-separated (e.g. \"Global,InformationalPages\")." - added
Input schema / properties / product / descriptionAdded value: +"Product key."
- Changed
fanduel_racing_promotions1 field changed- added
Input schema / properties / body / descriptionAdded value: +"Optional filter body; {} returns the default placements."
- Changed
fanduel_sb_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
fanduel_sb_live_score1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sportsbook event id (from fanduel_sb_call event_page / content_page). Required — part of the URL path."
- Added
footballdataorg_areas - Added
footballdataorg_competition - Added
footballdataorg_competition_matches - Added
footballdataorg_competitions - Added
footballdataorg_match - Added
footballdataorg_matches - Added
footballdataorg_scorers - Added
footballdataorg_standings - Added
footballdataorg_team - Added
footballdataorg_teams - Added
footballdatauk_season - Added
formulae_championships - Added
formulae_driver_standings - Added
formulae_race - Added
formulae_races - Added
formulae_team_standings - Added
golfcourseapi_course - Added
golfcourseapi_search - Added
highlightly_baseball_highlights - Added
highlightly_basketball_highlights - Added
highlightly_hockey_highlights - Added
highlightly_nfl_highlights - Added
highlightly_soccer_highlights - Added
highlightly_soccer_leagues - Added
highlightly_soccer_matches - Added
isportsapi_basketball_schedule - Added
isportsapi_football_competitions - Added
isportsapi_football_live - Added
isportsapi_football_odds_asian - Added
isportsapi_football_schedule - Added
jolpicaf1_circuits - Added
jolpicaf1_constructor_standings - Added
jolpicaf1_constructors - Added
jolpicaf1_driver_standings - Added
jolpicaf1_drivers - Added
jolpicaf1_laps - Added
jolpicaf1_pitstops - Added
jolpicaf1_qualifying - Added
jolpicaf1_races - Added
jolpicaf1_results - Added
jolpicaf1_seasons - Added
jolpicaf1_sprint - Changed
kalshi_candlesticks5 fields changed- added
Input schema / properties / end_ts / descriptionAdded value: +"Window end (unix seconds)." - added
Input schema / properties / period_interval / descriptionAdded value: +"Candle width in minutes: 1, 60, or 1440." - added
Input schema / properties / seriesTicker / descriptionAdded value: +"Series ticker (the market ticker's prefix before the first '-'). Required — part of the URL path." - added
Input schema / properties / start_ts / descriptionAdded value: +"Window start (unix seconds)." - added
Input schema / properties / ticker / descriptionAdded value: +"Market ticker. Required — part of the URL path."
- Changed
kalshi_candlesticks_batch4 fields changed- added
Input schema / properties / end_ts / descriptionAdded value: +"Window end (unix seconds)." - added
Input schema / properties / market_tickers / descriptionAdded value: +"Market ticker(s)." - added
Input schema / properties / period_interval / descriptionAdded value: +"Candle width in minutes: 1, 60, or 1440." - added
Input schema / properties / start_ts / descriptionAdded value: +"Window start (unix seconds)."
- Changed
kalshi_event2 fields changed- added
Input schema / properties / eventTicker / descriptionAdded value: +"Event ticker (from kalshi_events or a market's event_ticker). Required — part of the URL path." - added
Input schema / properties / with_nested_markets / descriptionAdded value: +"Embed the event's markets."
- Changed
kalshi_events5 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / limit / descriptionAdded value: +"Page size (1-200)." - added
Input schema / properties / series_ticker / descriptionAdded value: +"Filter to one series." - added
Input schema / properties / status / descriptionAdded value: +"Comma-separated: unopened, open, closed, settled." - added
Input schema / properties / with_nested_markets / descriptionAdded value: +"Embed each event's markets in the response."
- Changed
kalshi_market1 field changed- added
Input schema / properties / ticker / descriptionAdded value: +"Market ticker (from kalshi_markets). Required — part of the URL path."
- Changed
kalshi_markets6 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor from the previous page." - added
Input schema / properties / event_ticker / descriptionAdded value: +"Filter to one event's markets." - added
Input schema / properties / limit / descriptionAdded value: +"Page size (1-1000)." - added
Input schema / properties / series_ticker / descriptionAdded value: +"Filter to one series' markets." - added
Input schema / properties / status / descriptionAdded value: +"Comma-separated: unopened, open, closed, settled." - added
Input schema / properties / tickers / descriptionAdded value: +"Specific market ticker(s)."
- Changed
kalshi_milestones4 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Filter by category." - added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / minimum_start_date / descriptionAdded value: +"ISO date lower bound."
- Changed
kalshi_mve_collection1 field changed- added
Input schema / properties / collectionTicker / descriptionAdded value: +"Collection ticker (a market's mve_collection_ticker). Required — part of the URL path."
- Changed
kalshi_mve_collections4 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / series_ticker / descriptionAdded value: +"Filter to one series." - added
Input schema / properties / status / descriptionAdded value: +"Filter: open, closed, settled."
- Changed
kalshi_orderbook2 fields changed- added
Input schema / properties / depth / descriptionAdded value: +"Max price levels per side." - added
Input schema / properties / ticker / descriptionAdded value: +"Market ticker. Required — part of the URL path."
- Changed
kalshi_series1 field changed- added
Input schema / properties / seriesTicker / descriptionAdded value: +"Series ticker (e.g. KXNBA). Required — part of the URL path."
- Changed
kalshi_series_list2 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Series category (e.g. Sports)." - added
Input schema / properties / include_product_metadata / descriptionAdded value: +"Embed product metadata."
- Changed
kalshi_structured_target1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Structured-target id. Required — part of the URL path."
- Changed
kalshi_structured_targets3 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / page_size / descriptionAdded value: +"Page size (the API ignores 'limit' here)." - added
Input schema / properties / type / descriptionAdded value: +"Entity type filter (e.g. basketball_player, soccer_player, company, actor)."
- Changed
kalshi_trades5 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / limit / descriptionAdded value: +"Page size (1-1000)." - added
Input schema / properties / max_ts / descriptionAdded value: +"Unix-seconds upper bound." - added
Input schema / properties / min_ts / descriptionAdded value: +"Unix-seconds lower bound." - added
Input schema / properties / ticker / descriptionAdded value: +"Filter to one market."
- Changed
laliga_competition1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Competition slug (primera-division, segunda-division, primera-division-femenina). Required — part of the URL path."
- Changed
laliga_match1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Match slug (from laliga_matches.matches[].slug). Required — part of the URL path."
- Changed
laliga_matches5 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition slug to filter to — REQUIRED for real LaLiga matches (primera-division, segunda-division, primera-division-femenina)." - added
Input schema / properties / gameweek / descriptionAdded value: +"Matchweek number (use with competition for a single round = 10 matches)." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / subscription / descriptionAdded value: +"Subscription slug = the season (e.g. laliga-easports-2025)."
- Changed
laliga_player1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Player slug (from laliga_players_stats / laliga_squad; e.g. rubi-3). Required — part of the URL path."
- Changed
laliga_player_stats1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Player slug. Required — part of the URL path."
- Changed
laliga_players_stats3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size (max 100)." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / slug / descriptionAdded value: +"Subscription slug (e.g. laliga-easports-2025). Required — part of the URL path."
- Changed
laliga_rounds1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Subscription slug. Required — part of the URL path."
- Changed
laliga_squad2 fields changed- added
Input schema / properties / slug / descriptionAdded value: +"Team slug (e.g. real-madrid). Required — part of the URL path." - added
Input schema / properties / subscription / descriptionAdded value: +"Subscription slug (required by the API; e.g. laliga-easports-2025)."
- Changed
laliga_standing1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Subscription slug (e.g. laliga-easports-2025). Required — part of the URL path."
- Changed
laliga_subscription1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Subscription slug (e.g. laliga-easports-2025 = 2025/26). Required — part of the URL path."
- Changed
laliga_subscriptions1 field changed- added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset (20 per page)."
- Changed
laliga_team1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Team slug (e.g. real-madrid, barcelona, atletico-de-madrid). Required — part of the URL path."
- Changed
laliga_teams2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset (total ~1541)."
- Added
lichess_daily_puzzle - Added
lichess_leaderboard - Added
lichess_leaderboards_all - Added
lichess_tournaments - Added
lichess_user - Added
lichess_users_status - Changed
list_tools_by_capability1 field changed- added
Input schema / properties / capability / descriptionAdded value: +"A capability slug, e.g. `sport.fixtures_by_date` or `stats.ladder`. Omit to list every capability with the tools that expose it."
- Changed
mlb_allstar_ballot2 fields changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id (103=AL, 104=NL). Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_allstar_final_vote2 fields changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id (103=AL, 104=NL). Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_allstar_writeins2 fields changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id (103=AL, 104=NL). Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_attendance4 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date (YYYY-MM-DD)." - added
Input schema / properties / leagueId / descriptionAdded value: +"League id(s): 103=AL, 104=NL. Defaulted so the tool works without a teamId." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id — takes precedence over leagueId when both are set."
- Changed
mlb_awards3 fields changed- added
Input schema / properties / awardId / descriptionAdded value: +"Award id (e.g. MLBHOF, ALMVP, NLMVP, ALCY, NLCY, ALROY, NLROY). Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Filter to one season." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_awards_list2 fields changed- added
Input schema / properties / leagueId / descriptionAdded value: +"Filter by league (103=AL, 104=NL)." - added
Input schema / properties / sportId / descriptionAdded value: +"Filter by sport (1 = MLB)."
- Changed
mlb_boxscore2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id (from mlb_schedule). Required — part of the URL path." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot (YYYYMMDD_HHMMSS)."
- Changed
mlb_conferences2 fields changed- added
Input schema / properties / conferenceId / descriptionAdded value: +"Filter to one conference." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_datacasters2 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id."
- Changed
mlb_divisions3 fields changed- added
Input schema / properties / divisionId / descriptionAdded value: +"Filter to one division." - added
Input schema / properties / leagueId / descriptionAdded value: +"Filter by league." - added
Input schema / properties / sportId / descriptionAdded value: +"Filter by sport."
- Changed
mlb_draft4 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max picks." - added
Input schema / properties / round / descriptionAdded value: +"Filter to one round." - added
Input schema / properties / teamId / descriptionAdded value: +"Filter to picks by one team." - added
Input schema / properties / year / descriptionAdded value: +"Draft year (e.g. 2024). Required — part of the URL path."
- Changed
mlb_draft_prospects3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max prospects." - added
Input schema / properties / round / descriptionAdded value: +"Filter to a round." - added
Input schema / properties / year / descriptionAdded value: +"Draft year. Required — part of the URL path."
- Changed
mlb_free_agents3 fields changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id(s): 103=AL, 104=NL." - added
Input schema / properties / order / descriptionAdded value: +"Sort order." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_game_changes3 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"Trim the response to these fields." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / updatedSince / descriptionAdded value: +"ISO timestamp (e.g. 2025-09-01T00:00:00Z)."
- Changed
mlb_game_content1 field changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path."
- Changed
mlb_game_context_metrics2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot."
- Changed
mlb_game_pace3 fields changed- added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / teamIds / descriptionAdded value: +"Filter to team(s)."
- Changed
mlb_game_uniforms1 field changed- added
Input schema / properties / gamePks / descriptionAdded value: +"Game id(s)."
- Changed
mlb_game_win_probability2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot (YYYYMMDD_HHMMSS)."
- Changed
mlb_high_low6 fields changed- added
Input schema / properties / gameType / descriptionAdded value: +"Game type code." - added
Input schema / properties / limit / descriptionAdded value: +"Top-N." - added
Input schema / properties / orgType / descriptionAdded value: +"Org level for the records. One of: player, team, division, league, sport. Required — part of the URL path." - added
Input schema / properties / orgType / enumAdded value: +[ + "player", + "team", + "division", + "league", + "sport" +] - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sortStat / descriptionAdded value: +"Stat to rank by (e.g. 'homeRuns'). See mlb_meta(type='statTypes')."
- Changed
mlb_home_run_derby1 field changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Derby game id. Required — part of the URL path."
- Changed
mlb_jobs3 fields changed- added
Input schema / properties / jobType / descriptionAdded value: +"Job type code (see mlb_meta(type='jobTypes'))." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_leaders6 fields changed- added
Input schema / properties / leaderCategories / descriptionAdded value: +"Category code(s): homeRuns, battingAverage, runsBattedIn, era, strikeouts, wins, saves, ..." - added
Input schema / properties / leagueId / descriptionAdded value: +"League id(s): 103=AL, 104=NL." - added
Input schema / properties / limit / descriptionAdded value: +"Top-N to return." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / statGroup / descriptionAdded value: +"hitting | pitching | fielding (disambiguates a category)."
- Changed
mlb_leagues3 fields changed- added
Input schema / properties / leagueIds / descriptionAdded value: +"Filter to specific league ids (e.g. 103, 104)." - added
Input schema / properties / seasons / descriptionAdded value: +"Season year(s)." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_linescore2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot (YYYYMMDD_HHMMSS)."
- Changed
mlb_live_feed3 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / hydrate / descriptionAdded value: +"Additional hydrations." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot (YYYYMMDD_HHMMSS); omit for latest."
- Changed
mlb_meta2 fields changed- added
Input schema / properties / type / descriptionAdded value: +"Which lookup table to return. One of: awards, baseballStats, eventTypes, gameStatus, gameTypes, hitTrajectories, jobTypes, languages, leagueLeaderTypes, logicalEvents, metrics, pitchCodes, pitchTypes, platforms, positions, reviewReasons, rosterTypes, scheduleEventTypes, situationCodes, sky, standingsTypes, statGroups, statTypes, windDirection. Required — part of the URL path." - added
Input schema / properties / type / enumAdded value: +[ + "awards", + "baseballStats", + "eventTypes", + "gameStatus", + "gameTypes", + "hitTrajectories", + "jobTypes", + "languages", + "leagueLeaderTypes", + "logicalEvents", + "metrics", + "pitchCodes", + "pitchTypes", + "platforms", + "positions", + "reviewReasons", + "rosterTypes", + "scheduleEventTypes", + "situationCodes", + "sky", + "standingsTypes", + "statGroups", + "statTypes", + "windDirection" +]
- Changed
mlb_official_scorers2 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id."
- Changed
mlb_people2 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'currentTeam,stats(type=season)')." - added
Input schema / properties / personIds / descriptionAdded value: +"Player id(s)."
- Changed
mlb_people_changes2 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"Trim the response to these fields." - added
Input schema / properties / updatedSince / descriptionAdded value: +"ISO timestamp (e.g. 2026-06-01T00:00:00Z)."
- Changed
mlb_playbyplay2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / timecode / descriptionAdded value: +"Point-in-time snapshot (YYYYMMDD_HHMMSS)."
- Changed
mlb_player2 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'currentTeam,stats(type=season)')." - added
Input schema / properties / personId / descriptionAdded value: +"Player id (from a roster, schedule, boxscore or mlb_player_search). Required — part of the URL path."
- Changed
mlb_player_game_stats2 fields changed- added
Input schema / properties / gamePk / descriptionAdded value: +"Game id. Required — part of the URL path." - added
Input schema / properties / personId / descriptionAdded value: +"Player id. Required — part of the URL path."
- Changed
mlb_player_search2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results." - added
Input schema / properties / names / descriptionAdded value: +"Name to search (e.g. 'Aaron Judge')."
- Changed
mlb_player_stats4 fields changed- added
Input schema / properties / group / descriptionAdded value: +"hitting | pitching | fielding." - added
Input schema / properties / personId / descriptionAdded value: +"Player id. Required — part of the URL path." - added
Input schema / properties / season / descriptionAdded value: +"Season year (for season/gameLog types)." - added
Input schema / properties / stats / descriptionAdded value: +"season | career | yearByYear | gameLog | statSplits."
- Changed
mlb_schedule8 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Single date (YYYY-MM-DD)." - added
Input schema / properties / endDate / descriptionAdded value: +"Range end (YYYY-MM-DD)." - added
Input schema / properties / gameTypes / descriptionAdded value: +"Game type code(s): R (regular), F/D/L/W (postseason), S (spring), etc." - added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'team,linescore,probablePitcher,decisions')." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / startDate / descriptionAdded value: +"Range start (YYYY-MM-DD); use with endDate." - added
Input schema / properties / teamId / descriptionAdded value: +"Filter to one team."
- Changed
mlb_schedule_postseason4 fields changed- added
Input schema / properties / gameTypes / descriptionAdded value: +"Postseason game type code(s): F, D, L, W." - added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_schedule_postseason_series2 fields changed- added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_schedule_postseason_tunein2 fields changed- added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_schedule_tied3 fields changed- added
Input schema / properties / gameTypes / descriptionAdded value: +"Game type code(s)." - added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects." - added
Input schema / properties / season / descriptionAdded value: +"Season year."
- Changed
mlb_season2 fields changed- added
Input schema / properties / seasonId / descriptionAdded value: +"Season year/id. Required — part of the URL path." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_seasons2 fields changed- added
Input schema / properties / season / descriptionAdded value: +"Filter to one season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_seasons_all3 fields changed- added
Input schema / properties / divisionId / descriptionAdded value: +"Filter by division." - added
Input schema / properties / leagueId / descriptionAdded value: +"Filter by league (103=AL, 104=NL)." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_sports1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Filter to one sport."
- Changed
mlb_sports_players3 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB). Required — part of the URL path."
- Changed
mlb_standings5 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Standings as of a date (YYYY-MM-DD)." - added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'team')." - added
Input schema / properties / leagueId / descriptionAdded value: +"League id(s): 103=AL, 104=NL (comma-separated)." - added
Input schema / properties / season / descriptionAdded value: +"Season year (defaults to current)." - added
Input schema / properties / standingsTypes / descriptionAdded value: +"regularSeason | wildCard | divisionLeaders | springTraining | etc."
- Changed
mlb_stats8 fields changed- added
Input schema / properties / group / descriptionAdded value: +"Stat group: hitting | pitching | fielding." - added
Input schema / properties / limit / descriptionAdded value: +"Max rows." - added
Input schema / properties / playerPool / descriptionAdded value: +"all | qualified | rookies | etc." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sortStat / descriptionAdded value: +"Stat to sort by (e.g. 'homeRuns')." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / stats / descriptionAdded value: +"Stat type: season | career | yearByYear | byDateRange | statSplits | ..." - added
Input schema / properties / teamId / descriptionAdded value: +"Filter to one team."
- Changed
mlb_team3 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'venue,league,division,social')." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_alumni3 fields changed- added
Input schema / properties / group / descriptionAdded value: +"hitting | pitching | fielding." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_coaches3 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date (YYYY-MM-DD)." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_leaders5 fields changed- added
Input schema / properties / leaderCategories / descriptionAdded value: +"Category code(s): homeRuns, battingAverage, era, ..." - added
Input schema / properties / leaderGameTypes / descriptionAdded value: +"Game type code(s)." - added
Input schema / properties / limit / descriptionAdded value: +"Top-N." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_personnel2 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date (YYYY-MM-DD)." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_roster5 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Roster as of a date (YYYY-MM-DD)." - added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'person(stats(type=season))')." - added
Input schema / properties / rosterType / descriptionAdded value: +"active | 40Man | fullSeason | fullRoster | depthChart | gameday." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id (from mlb_teams). Required — part of the URL path."
- Changed
mlb_team_stats5 fields changed- added
Input schema / properties / group / descriptionAdded value: +"hitting | pitching | fielding." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / stats / descriptionAdded value: +"season | career | yearByYear | ..." - added
Input schema / properties / teamId / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
mlb_team_uniforms2 fields changed- added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamIds / descriptionAdded value: +"Team id(s)."
- Changed
mlb_teams4 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'venue,league,division')." - added
Input schema / properties / leagueIds / descriptionAdded value: +"Filter by league id(s)." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)."
- Changed
mlb_teams_affiliates3 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / teamIds / descriptionAdded value: +"Parent team id(s)."
- Changed
mlb_teams_history3 fields changed- added
Input schema / properties / endSeason / descriptionAdded value: +"Last season." - added
Input schema / properties / startSeason / descriptionAdded value: +"First season." - added
Input schema / properties / teamIds / descriptionAdded value: +"Team id(s)."
- Changed
mlb_teams_stats6 fields changed- added
Input schema / properties / group / descriptionAdded value: +"hitting | pitching | fielding." - added
Input schema / properties / limit / descriptionAdded value: +"Max rows." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / sortStat / descriptionAdded value: +"Stat to sort by." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (1 = MLB)." - added
Input schema / properties / stats / descriptionAdded value: +"Stat type."
- Changed
mlb_transactions6 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Single date (YYYY-MM-DD)." - added
Input schema / properties / endDate / descriptionAdded value: +"Range end (YYYY-MM-DD)." - added
Input schema / properties / playerId / descriptionAdded value: +"Filter to one player." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id." - added
Input schema / properties / startDate / descriptionAdded value: +"Range start (YYYY-MM-DD); use with endDate." - added
Input schema / properties / teamId / descriptionAdded value: +"Filter to one team."
- Changed
mlb_umpires2 fields changed- added
Input schema / properties / date / descriptionAdded value: +"As-of date." - added
Input schema / properties / sportId / descriptionAdded value: +"Sport id."
- Changed
mlb_venues3 fields changed- added
Input schema / properties / hydrate / descriptionAdded value: +"Embed related objects (e.g. 'location,fieldInfo')." - added
Input schema / properties / season / descriptionAdded value: +"Season year." - added
Input schema / properties / venueIds / descriptionAdded value: +"Venue id(s) (from a team's venue or a game)."
- Added
motogp_categories - Added
motogp_events - Added
motogp_seasons - Added
motogp_session_classification - Added
motogp_sessions - Added
motogp_standings - Added
mysportsfeeds_boxscore - Added
mysportsfeeds_games - Added
mysportsfeeds_injuries - Added
mysportsfeeds_player_gamelogs - Added
mysportsfeeds_standings - Added
nascar_race_list - Added
nascar_weekend_feed - Changed
nba_boxscore1 field changed- added
Input schema / properties / gameId / descriptionAdded value: +"10-digit NBA game id, e.g. 0022300001 (from nba_scoreboard_today / nba_schedule). Required — part of the URL path."
- Changed
nba_daily_lineups1 field changed- added
Input schema / properties / date / descriptionAdded value: +"Date as YYYYMMDD, e.g. 20260101. Required — part of the URL path."
- Changed
nba_playbyplay1 field changed- added
Input schema / properties / gameId / descriptionAdded value: +"10-digit NBA game id, e.g. 0022300001. Required — part of the URL path."
- Changed
nba_stats_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
nbl_ladder3 fields changed- added
Input schema / properties / seasonType / descriptionAdded value: +"Season phase: regular (the main season ladder), all, in_season, preseason or finals." - added
Input schema / properties / seasonType / enumAdded value: +[ + "regular", + "all", + "in_season", + "preseason", + "finals" +] - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_match_outcomes3 fields changed- added
Input schema / properties / seasonType / descriptionAdded value: +"Season phase (default regular)." - added
Input schema / properties / seasonType / enumAdded value: +[ + "regular", + "all", + "in_season", + "preseason", + "finals" +] - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_news1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"Max articles to return (default: all ~200)."
- Changed
nbl_next_matches1 field changed- added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_player_boxscores4 fields changed- added
Input schema / properties / playerId / descriptionAdded value: +"Player id (UUID) — from nbl_players[].player.id. Required — part of the URL path." - added
Input schema / properties / seasonType / descriptionAdded value: +"Season phase (default regular)." - added
Input schema / properties / seasonType / enumAdded value: +[ + "regular", + "all", + "in_season", + "preseason", + "finals" +] - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_player_stats1 field changed- added
Input schema / properties / playerId / descriptionAdded value: +"Player id (UUID) — from nbl_players[].player.id. Required — part of the URL path."
- Changed
nbl_players1 field changed- added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_schedule3 fields changed- added
Input schema / properties / seasonType / descriptionAdded value: +"Phase to list (default all)." - added
Input schema / properties / seasonType / enumAdded value: +[ + "all", + "regular", + "in_season", + "preseason", + "finals" +] - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_season_current1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"Max rows (default 1)."
- Changed
nbl_stat_leaders3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max rows; -1 for all." - added
Input schema / properties / seasonId / descriptionAdded value: +"Season UUID — from nbl_seasons (data[].id, the season_type=regular one for the main leaders). Required — part of the URL path." - added
Input schema / properties / sort / descriptionAdded value: +"Sort key, prefix `-` for descending — e.g. -points_average (top scorers), -assists_average, -rebounds_total_average. Any per-game average column works."
- Changed
nbl_team_roster2 fields changed- added
Input schema / properties / teamId / descriptionAdded value: +"Team id (UUID) — from a team object in nbl_players / nbl_schedule. Required — part of the URL path." - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Changed
nbl_team_stats3 fields changed- added
Input schema / properties / seasonType / descriptionAdded value: +"Season phase (default regular)." - added
Input schema / properties / seasonType / enumAdded value: +[ + "regular", + "all", + "in_season", + "preseason", + "finals" +] - added
Input schema / properties / year / descriptionAdded value: +"Season START year — 2025 = NBL26 (current 2025-26 season), 2026 = NBL27. Required — part of the URL path."
- Added
ncaa_rankings - Added
ncaa_scoreboard - Added
ncaa_standings - Added
nhl_boxscore - Added
nhl_club_schedule - Added
nhl_game_landing - Added
nhl_goalie_leaders - Added
nhl_player - Added
nhl_roster - Added
nhl_schedule - Added
nhl_scores - Added
nhl_seasons - Added
nhl_skater_leaders - Added
nhl_standings - Changed
nrl_fixture1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Champion Data competition id (e.g. 12999). From nrl_competitions / nrl_application_settings. Required — part of the URL path."
- Changed
nrl_match2 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Champion Data competition id (e.g. 12999). Required — part of the URL path." - added
Input schema / properties / matchId / descriptionAdded value: +"Match id from nrl_fixture (e.g. 129990101). Required — part of the URL path."
- Added
oddsapiio_bookmakers - Added
oddsapiio_events - Added
oddsapiio_leagues - Added
oddsapiio_odds - Added
oddsapiio_sports - Added
opendota_hero_stats - Added
opendota_heroes - Added
opendota_leagues - Added
opendota_match - Added
opendota_player - Added
opendota_player_heroes - Added
opendota_player_matches - Added
opendota_player_winloss - Added
opendota_pro_matches - Added
opendota_public_matches - Added
opendota_teams - Changed
openf1_car_data3 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number (required — one driver's telemetry can be tens of thousands of samples)." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_championship_drivers3 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Filter to one driver." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Race session key, or 'latest'."
- Changed
openf1_championship_teams3 fields changed- added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Race session key, or 'latest'." - added
Input schema / properties / team_name / descriptionAdded value: +"Filter to one team."
- Changed
openf1_drivers5 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Filter to one car number." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / name_acronym / descriptionAdded value: +"Filter by 3-letter driver code (e.g. 'VER', 'HAM', 'NOR')." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'. Strongly recommended to bound the response." - added
Input schema / properties / team_name / descriptionAdded value: +"Filter by team name."
- Changed
openf1_intervals3 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number (strongly recommended — this feed is high-volume)." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Race session key, or 'latest'."
- Changed
openf1_laps4 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number (strongly recommended)." - added
Input schema / properties / lap_number / descriptionAdded value: +"Filter to one lap." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_location3 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number (required — high-frequency spatial data)." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_meetings4 fields changed- added
Input schema / properties / country_name / descriptionAdded value: +"Country name (e.g. 'Italy')." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or the literal 'latest'." - added
Input schema / properties / meeting_name / descriptionAdded value: +"Meeting name (e.g. 'Singapore Grand Prix')." - added
Input schema / properties / year / descriptionAdded value: +"Season year (e.g. 2024)."
- Changed
openf1_overtakes4 fields changed- added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / overtaken_driver_number / descriptionAdded value: +"Filter by the car being passed." - added
Input schema / properties / overtaking_driver_number / descriptionAdded value: +"Filter by the car making the pass." - added
Input schema / properties / session_key / descriptionAdded value: +"Race session key, or 'latest'."
- Changed
openf1_pit4 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number." - added
Input schema / properties / lap_number / descriptionAdded value: +"Filter to pit stops on one lap." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_position4 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number (strongly recommended)." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / position / descriptionAdded value: +"Filter to one position." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_race_control6 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Filter by category (e.g. 'Flag', 'SafetyCar', 'Drs', 'CarEvent')." - added
Input schema / properties / driver_number / descriptionAdded value: +"Filter to messages about one driver." - added
Input schema / properties / flag / descriptionAdded value: +"Filter by flag (e.g. 'YELLOW', 'GREEN', 'RED', 'BLACK AND WHITE')." - added
Input schema / properties / lap_number / descriptionAdded value: +"Filter to messages on one lap." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_session_result4 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Filter to one driver." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / position / descriptionAdded value: +"Filter to one finishing position." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_sessions7 fields changed- added
Input schema / properties / circuit_short_name / descriptionAdded value: +"Circuit short name (e.g. 'Monza')." - added
Input schema / properties / country_name / descriptionAdded value: +"Country name." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key to list that weekend's sessions, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'." - added
Input schema / properties / session_name / descriptionAdded value: +"Session name (e.g. 'Race', 'Qualifying', 'Sprint', 'Practice 1')." - added
Input schema / properties / session_type / descriptionAdded value: +"Session type (e.g. 'Race', 'Qualifying', 'Practice')." - added
Input schema / properties / year / descriptionAdded value: +"Season year."
- Changed
openf1_starting_grid3 fields changed- added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / position / descriptionAdded value: +"Filter to one grid slot." - added
Input schema / properties / session_key / descriptionAdded value: +"Race session key, or 'latest'."
- Changed
openf1_stints4 fields changed- added
Input schema / properties / compound / descriptionAdded value: +"Filter by tyre compound (e.g. 'SOFT', 'MEDIUM', 'HARD', 'INTERMEDIATE', 'WET')." - added
Input schema / properties / driver_number / descriptionAdded value: +"Car number." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_team_radio3 fields changed- added
Input schema / properties / driver_number / descriptionAdded value: +"Car number." - added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Changed
openf1_weather2 fields changed- added
Input schema / properties / meeting_key / descriptionAdded value: +"Meeting key, or 'latest'." - added
Input schema / properties / session_key / descriptionAdded value: +"Session key, or 'latest'."
- Added
openligadb_current_matchday - Added
openligadb_leagues - Added
openligadb_match - Added
openligadb_matchday_matches - Added
openligadb_matchdays - Added
openligadb_season_matches - Added
openligadb_table - Added
openligadb_teams - Added
pandascore_leagues - Added
pandascore_match_odds - Added
pandascore_matches - Added
pandascore_players - Added
pandascore_series - Added
pandascore_teams - Added
pandascore_tournaments - Added
pandascore_videogames - Changed
pinnacle_league_matchups1 field changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id, from pinnacle_sport_leagues. Required — part of the URL path."
- Changed
pinnacle_league_matchups_live1 field changed- added
Input schema / properties / leagueId / descriptionAdded value: +"League id, from pinnacle_sport_leagues. Required — part of the URL path."
- Changed
pinnacle_matchup1 field changed- added
Input schema / properties / matchupId / descriptionAdded value: +"Matchup id (from any matchups feed). Required — part of the URL path."
- Changed
pinnacle_matchup_markets1 field changed- added
Input schema / properties / matchupId / descriptionAdded value: +"Matchup id (from a matchups feed; needs hasMarkets=true). Required — part of the URL path."
- Changed
pinnacle_matchup_parlay_markets1 field changed- added
Input schema / properties / matchupId / descriptionAdded value: +"Matchup id (needs hasMarkets=true). Required — part of the URL path."
- Changed
pinnacle_matchup_related1 field changed- added
Input schema / properties / matchupId / descriptionAdded value: +"Matchup id. Required — part of the URL path."
- Changed
pinnacle_sport_leagues1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Sport id (e.g. 3 Baseball, 4 Basketball), from pinnacle_sports. Required — part of the URL path."
- Changed
pinnacle_sport_matchups1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Sport id, from pinnacle_sports. Required — part of the URL path."
- Changed
pinnacle_sport_matchups_all1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Sport id, from pinnacle_sports. Required — part of the URL path."
- Changed
pinnacle_sport_matchups_live1 field changed- added
Input schema / properties / sportId / descriptionAdded value: +"Sport id, from pinnacle_sports_live. Required — part of the URL path."
- Changed
pl_awards2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_broadcast_match_events2 fields changed- added
Input schema / properties / pageSize / descriptionAdded value: +"Page size." - added
Input schema / properties / sportDataId / descriptionAdded value: +"SDP match id (from pl_matches)."
- Changed
pl_broadcasting_events3 fields changed- added
Input schema / properties / fromDate / descriptionAdded value: +"Range start (ISO 8601 UTC, e.g. 2025-08-01T00:00:00Z)." - added
Input schema / properties / pageSize / descriptionAdded value: +"Page size." - added
Input schema / properties / toDate / descriptionAdded value: +"Range end (ISO 8601 UTC)."
- Changed
pl_competition1 field changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8 = Premier League). Required — part of the URL path."
- Changed
pl_competitions2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Opaque pagination cursor from pagination._next."
- Changed
pl_content8 fields changed- added
Input schema / properties / contentTypes / descriptionAdded value: +"CSV of TEXT, VIDEO, PHOTO, PLAYLIST, PROMO, AUDIO." - added
Input schema / properties / detail / descriptionAdded value: +"Detail level." - added
Input schema / properties / lang / descriptionAdded value: +"Language (e.g. en). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / references / descriptionAdded value: +"Link to an entity, e.g. SDP_FOOTBALL_MATCH:2561895 (highlights), SDP_FOOTBALL_PLAYER:{pid}." - added
Input schema / properties / tagExpression / descriptionAdded value: +"Tag filter expression, e.g. \"Highlights\"or\"Match Highlights\"." - added
Input schema / properties / tagNames / descriptionAdded value: +"Tag name filter."
- Changed
pl_content_item4 fields changed- added
Input schema / properties / contentId / descriptionAdded value: +"Content id (from pl_content). Required — part of the URL path." - added
Input schema / properties / detail / descriptionAdded value: +"Detail level." - added
Input schema / properties / lang / descriptionAdded value: +"Language (e.g. en). Required — part of the URL path." - added
Input schema / properties / type / descriptionAdded value: +"Content type (TEXT, VIDEO, PHOTO, PLAYLIST, PROMO, AUDIO). Required — part of the URL path."
- Changed
pl_match1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Match id (7-digit, from pl_matches; e.g. 2561895). Required — part of the URL path."
- Changed
pl_match_commentary4 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Match id. Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / sort / descriptionAdded value: +"Sort order."
- Changed
pl_match_events1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Match id. Required — part of the URL path."
- Changed
pl_match_lineups1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Match id. Required — part of the URL path."
- Changed
pl_match_officials1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Match id. Required — part of the URL path."
- Changed
pl_match_stats1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Match id. Required — part of the URL path."
- Changed
pl_matches11 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition id (8)." - added
Input schema / properties / kickoff_after / descriptionAdded value: +"Only matches kicking off after this date (YYYY-MM-DD)." - added
Input schema / properties / kickoff_before / descriptionAdded value: +"Only matches kicking off before this date (YYYY-MM-DD)." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / matchweek / descriptionAdded value: +"Matchweek number." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / period / descriptionAdded value: +"Match state filter. One of: PreMatch, Live, FullTime." - added
Input schema / properties / period / enumAdded value: +[ + "PreMatch", + "Live", + "FullTime" +] - added
Input schema / properties / season / descriptionAdded value: +"Season id (2025 = 2025/26)." - added
Input schema / properties / sort / descriptionAdded value: +"Sort, e.g. kickoff:asc or kickoff:desc." - added
Input schema / properties / team / descriptionAdded value: +"Filter to one team's matches."
- Changed
pl_matchweek_matches4 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / mw / descriptionAdded value: +"Matchweek number. Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_metadata2 fields changed- added
Input schema / properties / mid / descriptionAdded value: +"Entity id (player id or team id). Required — part of the URL path." - added
Input schema / properties / type / descriptionAdded value: +"Entity type (SDP_FOOTBALL_PLAYER or SDP_FOOTBALL_TEAM). Required — part of the URL path."
- Changed
pl_news_latest2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / tags / descriptionAdded value: +"Tag filter (e.g. content-type:article,content-format:long-read)."
- Changed
pl_news_popular2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / recency / descriptionAdded value: +"Lookback window in hours."
- Changed
pl_player1 field changed- added
Input schema / properties / pid / descriptionAdded value: +"Player id. Required — part of the URL path."
- Changed
pl_player_basic1 field changed- added
Input schema / properties / pid / descriptionAdded value: +"Player id (from pl_players; e.g. 223094 = Haaland). Required — part of the URL path."
- Changed
pl_player_comp_stats2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / pid / descriptionAdded value: +"Player id. Required — part of the URL path."
- Changed
pl_player_info3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / pid / descriptionAdded value: +"Player id. Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_player_leaderboard6 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / position / descriptionAdded value: +"Position filter (Goalkeeper, Defender, Midfielder, Forward)." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path." - added
Input schema / properties / sort / descriptionAdded value: +"Sort metric:dir (e.g. goals:desc, goal_assists:desc, clean_sheets:desc). snake_case or camelCase accepted."
- Changed
pl_player_season_stats3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / pid / descriptionAdded value: +"Player id. Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_players5 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor." - added
Input schema / properties / position / descriptionAdded value: +"Position filter (Goalkeeper, Defender, Midfielder, Forward)." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_players_by_id1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Player id(s) (e.g. [200785, 223094])."
- Changed
pl_season_teams3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_squad3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path." - added
Input schema / properties / tid / descriptionAdded value: +"Team id (e.g. 14 = Liverpool). Required — part of the URL path."
- Changed
pl_standings3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / live / descriptionAdded value: +"Fold in in-progress matches." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_structure2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (the starting year; 2025 = 2025/26). Required — part of the URL path."
- Changed
pl_team2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / tid / descriptionAdded value: +"Team id (Liverpool 14, Man City 43, Arsenal 3). Required — part of the URL path."
- Changed
pl_team_form5 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / competitions / descriptionAdded value: +"Competition filter (usually = cid)." - added
Input schema / properties / seasons / descriptionAdded value: +"Season filter (usually = sid)." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path." - added
Input schema / properties / tid / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
pl_team_leaderboard4 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / season / descriptionAdded value: +"Season id (2025 = 2025/26) — a query param, not a path segment." - added
Input schema / properties / sort / descriptionAdded value: +"Sort metric:dir (e.g. tackles_won:desc, blocks:desc, possessionPercentage:desc)."
- Changed
pl_team_next_fixture3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path." - added
Input schema / properties / tid / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
pl_team_stats2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / tid / descriptionAdded value: +"Team id. Required — part of the URL path."
- Changed
pl_teamform2 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / sid / descriptionAdded value: +"Season id (2025 = 2025/26). Required — part of the URL path."
- Changed
pl_teams3 fields changed- added
Input schema / properties / cid / descriptionAdded value: +"Competition id (8). Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor."
- Changed
pl_teams_by_id1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Team id(s) (e.g. [14, 43])."
- Changed
pl_video_latest2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / tags / descriptionAdded value: +"Tag filter (e.g. content-type:video)."
- Changed
pl_video_popular2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / recency / descriptionAdded value: +"Lookback window in hours."
- Changed
pointsbet_competition_events2 fields changed- added
Input schema / properties / competitionKey / descriptionAdded value: +"Competition key (e.g. 7523 = AFL), from pointsbet_sport_competitions. Required — part of the URL path." - added
Input schema / properties / page / descriptionAdded value: +"1-based page; follow nextPage in the response."
- Changed
pointsbet_content_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
pointsbet_event1 field changed- added
Input schema / properties / eventKey / descriptionAdded value: +"Numeric event key (e.g. 2754627), from any events feed. Required — part of the URL path."
- Changed
pointsbet_event_search4 fields changed- added
Input schema / properties / competitionKey / descriptionAdded value: +"Restrict to one competition key." - added
Input schema / properties / eventClassIds / descriptionAdded value: +"Comma-separated event-class ids to include." - added
Input schema / properties / includeHistoricStats / descriptionAdded value: +"Inline historic head-to-head stats per event." - added
Input schema / properties / numberOfSportEvents / descriptionAdded value: +"Max events to return."
- Changed
pointsbet_events_nextup1 field changed- added
Input schema / properties / v2Limit / descriptionAdded value: +"Max events to return."
- Changed
pointsbet_promo_code1 field changed- added
Input schema / properties / code / descriptionAdded value: +"Promo code, e.g. \"WELCOME\". Required — part of the URL path."
- Changed
pointsbet_promotions2 fields changed- added
Input schema / properties / displayTarget / descriptionAdded value: +"Where the promo renders, e.g. \"carousel\"." - added
Input schema / properties / lang / descriptionAdded value: +"Language code."
- Changed
pointsbet_racing_featured2 fields changed- added
Input schema / properties / raceCount / descriptionAdded value: +"Number of featured races to return." - added
Input schema / properties / runnerCount / descriptionAdded value: +"Top runners to preview per race."
- Changed
pointsbet_racing_form5 fields changed- added
Input schema / properties / country / descriptionAdded value: +"Country slug, e.g. \"aus\". Required — part of the URL path." - added
Input schema / properties / date / descriptionAdded value: +"Date + session token, \"YYYY-MM-DD-am\" or \"-pm\" (e.g. 2026-06-03-am). Required — part of the URL path." - added
Input schema / properties / meetingNumber / descriptionAdded value: +"Meeting sequence number for that venue/day (usually 1). Required — part of the URL path." - added
Input schema / properties / raceNumber / descriptionAdded value: +"Zero-padded race number, e.g. \"01\". Required — part of the URL path." - added
Input schema / properties / venue / descriptionAdded value: +"Venue slug, e.g. \"sandown\". Required — part of the URL path."
- Changed
pointsbet_racing_insights1 field changed- added
Input schema / properties / raceId / descriptionAdded value: +"Race id. Required — part of the URL path."
- Changed
pointsbet_racing_meeting1 field changed- added
Input schema / properties / meetingId / descriptionAdded value: +"Meeting id (e.g. 2758032), from pointsbet_racing_meetings. Required — part of the URL path."
- Changed
pointsbet_racing_meetings2 fields changed- added
Input schema / properties / endDate / descriptionAdded value: +"Window end, ISO-8601 UTC." - added
Input schema / properties / startDate / descriptionAdded value: +"Window start, ISO-8601 UTC (e.g. 2026-06-04T00:00:00.000Z)."
- Changed
pointsbet_racing_race1 field changed- added
Input schema / properties / raceId / descriptionAdded value: +"Race id (e.g. 109756102), from a meetings/featured feed. Required — part of the URL path."
- Changed
pointsbet_racing_races1 field changed- added
Input schema / properties / raceIds / descriptionAdded value: +"Comma-separated race ids."
- Changed
pointsbet_racing_srm1 field changed- added
Input schema / properties / raceId / descriptionAdded value: +"Race id. Required — part of the URL path."
- Changed
pointsbet_racing_tips3 fields changed- added
Input schema / properties / country / descriptionAdded value: +"Country code slug, e.g. \"aus\". Required — part of the URL path." - added
Input schema / properties / racingType / descriptionAdded value: +"Racing code. One of: thoroughbred, harness, greyhound. Required — part of the URL path." - added
Input schema / properties / racingType / enumAdded value: +[ + "thoroughbred", + "harness", + "greyhound" +]
- Changed
pointsbet_sport_competitions1 field changed- added
Input schema / properties / sportKey / descriptionAdded value: +"Sport slug, e.g. \"aussie-rules\", \"basketball\", \"tennis\". Required — part of the URL path."
- Changed
pointsbet_sport_featured_events1 field changed- added
Input schema / properties / sportKey / descriptionAdded value: +"Sport slug, e.g. \"aussie-rules\". Required — part of the URL path."
- Changed
pointsbet_sports_list1 field changed- added
Input schema / properties / date / descriptionAdded value: +"Date token in ddMMMyyyy form (e.g. 02May2018). The feed returns the current catalogue regardless, so any valid token works. Required — part of the URL path."
- Changed
polymarket_book1 field changed- added
Input schema / properties / token_id / descriptionAdded value: +"CLOB token id (one entry of a market's clobTokenIds)."
- Changed
polymarket_clob_markets1 field changed- added
Input schema / properties / next_cursor / descriptionAdded value: +"Pagination cursor ('' first page, 'LTE=' = end)."
- Changed
polymarket_event1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Gamma event id (from polymarket_events). Required — part of the URL path."
- Changed
polymarket_events14 fields changed- added
Input schema / properties / active / descriptionAdded value: +"Only active events." - added
Input schema / properties / archived / descriptionAdded value: +"Include archived." - added
Input schema / properties / ascending / descriptionAdded value: +"Sort direction." - added
Input schema / properties / closed / descriptionAdded value: +"Only (or exclude with false) closed events." - added
Input schema / properties / end_date_max / descriptionAdded value: +"ISO date — events ending before this." - added
Input schema / properties / end_date_min / descriptionAdded value: +"ISO date — events ending after this." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / liquidity_min / descriptionAdded value: +"Min liquidity." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / order / descriptionAdded value: +"Sort key (e.g. volume24hr, liquidity, endDate)." - added
Input schema / properties / series_id / descriptionAdded value: +"Filter by series id." - added
Input schema / properties / slug / descriptionAdded value: +"Exact event slug (e.g. from a polymarket.com/event/... URL)." - added
Input schema / properties / tag_id / descriptionAdded value: +"Filter by tag id." - added
Input schema / properties / volume_min / descriptionAdded value: +"Min volume."
- Changed
polymarket_holders2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max holders per token." - added
Input schema / properties / market / descriptionAdded value: +"Condition id."
- Changed
polymarket_market1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Gamma market id (from polymarket_markets). Required — part of the URL path."
- Changed
polymarket_markets15 fields changed- added
Input schema / properties / active / descriptionAdded value: +"Only active markets." - added
Input schema / properties / archived / descriptionAdded value: +"Include archived." - added
Input schema / properties / ascending / descriptionAdded value: +"Sort direction (default false with `order`)." - added
Input schema / properties / clob_token_ids / descriptionAdded value: +"Filter by CLOB token id." - added
Input schema / properties / closed / descriptionAdded value: +"Only (or exclude with false) closed markets." - added
Input schema / properties / condition_ids / descriptionAdded value: +"Filter by condition id." - added
Input schema / properties / end_date_max / descriptionAdded value: +"ISO date — markets ending before this." - added
Input schema / properties / end_date_min / descriptionAdded value: +"ISO date — markets ending after this." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / liquidity_num_min / descriptionAdded value: +"Min liquidity." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / order / descriptionAdded value: +"Sort key (e.g. volume24hr, liquidity, endDate)." - added
Input schema / properties / slug / descriptionAdded value: +"Exact market slug." - added
Input schema / properties / tag_id / descriptionAdded value: +"Filter by tag id (see polymarket_tags)." - added
Input schema / properties / volume_num_min / descriptionAdded value: +"Min volume."
- Changed
polymarket_midpoint1 field changed- added
Input schema / properties / token_id / descriptionAdded value: +"CLOB token id."
- Changed
polymarket_price3 fields changed- added
Input schema / properties / side / descriptionAdded value: +"Which side's best price. One of: buy, sell." - added
Input schema / properties / side / enumAdded value: +[ + "buy", + "sell" +] - added
Input schema / properties / token_id / descriptionAdded value: +"CLOB token id."
- Changed
polymarket_price_history6 fields changed- added
Input schema / properties / endTs / descriptionAdded value: +"Window end (unix seconds)." - added
Input schema / properties / fidelity / descriptionAdded value: +"Resolution in minutes." - added
Input schema / properties / interval / descriptionAdded value: +"Named lookback window (alternative to startTs/endTs). One of: 1h, 6h, 1d, 1w, 1m, max." - added
Input schema / properties / interval / enumAdded value: +[ + "1h", + "6h", + "1d", + "1w", + "1m", + "max" +] - added
Input schema / properties / market / descriptionAdded value: +"CLOB token id (the API calls this param `market`)." - added
Input schema / properties / startTs / descriptionAdded value: +"Window start (unix seconds)."
- Changed
polymarket_search3 fields changed- added
Input schema / properties / events_status / descriptionAdded value: +"Filter events by status (e.g. active)." - added
Input schema / properties / limit_per_type / descriptionAdded value: +"Max results per result type." - added
Input schema / properties / q / descriptionAdded value: +"Search text (team, person, topic)."
- Changed
polymarket_series1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Gamma series id (from polymarket_series_list or an event's series). Required — part of the URL path."
- Changed
polymarket_series_list6 fields changed- added
Input schema / properties / ascending / descriptionAdded value: +"Sort direction." - added
Input schema / properties / closed / descriptionAdded value: +"Only (or exclude with false) closed series." - added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / order / descriptionAdded value: +"Sort key (e.g. volume24hr, liquidity)." - added
Input schema / properties / slug / descriptionAdded value: +"Exact series slug."
- Changed
polymarket_spread1 field changed- added
Input schema / properties / token_id / descriptionAdded value: +"CLOB token id."
- Changed
polymarket_tags2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset."
- Changed
polymarket_trades6 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size (max 500)." - added
Input schema / properties / market / descriptionAdded value: +"Condition id (a market's conditionId)." - added
Input schema / properties / offset / descriptionAdded value: +"Pagination offset." - added
Input schema / properties / side / descriptionAdded value: +"Taker side filter. One of: BUY, SELL." - added
Input schema / properties / side / enumAdded value: +[ + "BUY", + "SELL" +] - added
Input schema / properties / user / descriptionAdded value: +"Filter by wallet address."
- Changed
racingandsports_race_odds2 fields changed- added
Input schema / properties / raceId / descriptionAdded value: +"Race id (from the form-guide page)." - added
Input schema / properties / token / descriptionAdded value: +"Per-race access token issued by the form-guide page (not generatable here)."
- Changed
seriea_competitions1 field changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language."
- Changed
seriea_match_lineups3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / matchId / descriptionAdded value: +"SDP match id (from seriea_matches.matches[].matchId). Required — part of the URL path." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Changed
seriea_matches2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Changed
seriea_players5 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Stat category — only General and Goalkeeping are valid (Attack/Defence/etc. return 400)." - added
Input schema / properties / category / enumAdded value: +[ + "General", + "Goalkeeping" +] - added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / page / descriptionAdded value: +"1-based page (30 players/page; total via pagination.totalPages)." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Changed
seriea_season2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons; e.g. serie-a::Football_Season::5f0e080fc3a44073984b75b3a8e06a8a = 2025/26). Required — part of the URL path."
- Changed
seriea_seasons1 field changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language."
- Changed
seriea_standings2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Changed
seriea_team_stats5 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Stat category (General or Goalkeeping; others 400)." - added
Input schema / properties / category / enumAdded value: +[ + "General", + "Goalkeeping" +] - added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / page / descriptionAdded value: +"1-based page (all 20 teams usually fit on page 1)." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Changed
seriea_teams2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Label language." - added
Input schema / properties / seasonId / descriptionAdded value: +"SDP season id (from seriea_seasons). Required — part of the URL path."
- Added
sleeper_draft - Added
sleeper_draft_picks - Added
sleeper_league - Added
sleeper_league_drafts - Added
sleeper_league_rosters - Added
sleeper_league_users - Added
sleeper_matchups - Added
sleeper_playoff_bracket - Added
sleeper_state - Added
sleeper_traded_picks - Added
sleeper_transactions - Added
sleeper_trending_players - Added
sleeper_user - Added
sleeper_user_leagues - Added
sportmonks_fixture - Added
sportmonks_fixtures_by_date - Added
sportmonks_leagues - Added
sportmonks_livescores - Added
sportmonks_players - Added
sportmonks_standings - Added
sportmonks_teams - Added
sportmonks_types - Changed
sportsbet_bet_live4 fields changed- added
Input schema / properties / birType / descriptionAdded value: +"Bet-in-running type filter. One of: BETLIVE." - added
Input schema / properties / birType / enumAdded value: +[ + "BETLIVE" +] - added
Input schema / properties / excludeNonLiveEvents / descriptionAdded value: +"Return only live events." - added
Input schema / properties / includePrimaryMarket / descriptionAdded value: +"Inline each event's primary market + prices."
- Changed
sportsbet_class_coupon1 field changed- added
Input schema / properties / classId / descriptionAdded value: +"Sport class id. Required — part of the URL path."
- Changed
sportsbet_cms_page3 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Competition id (use this OR pagePath)." - added
Input schema / properties / loggedIn / descriptionAdded value: +"Return the logged-in variant." - added
Input schema / properties / pagePath / descriptionAdded value: +"CMS page path (use this OR competitionId)."
- Changed
sportsbet_competition_matches1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Sport competition id. Required — part of the URL path."
- Changed
sportsbet_competition_outrights1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Sport competition id. Required — part of the URL path."
- Changed
sportsbet_event_commentary1 field changed- added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated sport event ids."
- Changed
sportsbet_event_markets1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sport event id. Required — part of the URL path."
- Changed
sportsbet_event_results1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sport event id. Required — part of the URL path."
- Changed
sportsbet_event_status1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sport event id. Required — part of the URL path."
- Changed
sportsbet_graphql_call2 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / variables / descriptionAdded value: +"Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one."
- Changed
sportsbet_league_ladder1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Sport competition id. Required — part of the URL path."
- Changed
sportsbet_match_preview4 fields changed- added
Input schema / properties / eventDate / descriptionAdded value: +"Event date, YYYY-MM-DD." - added
Input schema / properties / eventName / descriptionAdded value: +"Event / match name." - added
Input schema / properties / sportsClass / descriptionAdded value: +"Sport class name." - added
Input schema / properties / sportsCompetitionName / descriptionAdded value: +"Competition name."
- Changed
sportsbet_multiple_racecards1 field changed- added
Input schema / properties / eventIds / descriptionAdded value: +"Comma-separated racing event ids."
- Changed
sportsbet_page_content4 fields changed- added
Input schema / properties / loggedIn / descriptionAdded value: +"Return the logged-in variant." - added
Input schema / properties / popularsrms / descriptionAdded value: +"Include popular SRM modules." - added
Input schema / properties / tab / descriptionAdded value: +"Homepage tab: sports or racing. Required — part of the URL path." - added
Input schema / properties / tab / enumAdded value: +[ + "sports", + "racing" +]
- Changed
sportsbet_popular_promotions4 fields changed- added
Input schema / properties / clientId / descriptionAdded value: +"Client id for the promo model. Required — part of the URL path." - added
Input schema / properties / limit / descriptionAdded value: +"Max promotions to return." - added
Input schema / properties / loggedIn / descriptionAdded value: +"Return logged-in promotions instead of anonymous." - added
Input schema / properties / provider / descriptionAdded value: +"Promotions provider key. Required — part of the URL path."
- Changed
sportsbet_race_preview4 fields changed- added
Input schema / properties / eventDate / descriptionAdded value: +"Meeting date, YYYY-MM-DD." - added
Input schema / properties / raceNumber / descriptionAdded value: +"Race number at the meeting." - added
Input schema / properties / raceType / descriptionAdded value: +"Racing code (e.g. Thoroughbred)." - added
Input schema / properties / trackName / descriptionAdded value: +"Track / venue name."
- Changed
sportsbet_racecard2 fields changed- added
Input schema / properties / eventId / descriptionAdded value: +"Racing event id. Required — part of the URL path." - added
Input schema / properties / selectionNames / descriptionAdded value: +"Include full selection (runner) names."
- Changed
sportsbet_racecard_with_context2 fields changed- added
Input schema / properties / classId / descriptionAdded value: +"Racing class id (race type/class), required by upstream." - added
Input schema / properties / eventId / descriptionAdded value: +"Racing event id. Required — part of the URL path."
- Changed
sportsbet_racing_allracing1 field changed- added
Input schema / properties / eventDate / descriptionAdded value: +"Race date, YYYY-MM-DD. Required — part of the URL path."
- Changed
sportsbet_racing_competition1 field changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Racing competition (meeting) id. Required — part of the URL path."
- Changed
sportsbet_racing_event_meeting1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Racing event id. Required — part of the URL path."
- Changed
sportsbet_racing_popular_srms7 fields changed- added
Input schema / properties / hierarchyLevel / descriptionAdded value: +"Level the ids refer to: event, competition or class." - added
Input schema / properties / hierarchyLevel / enumAdded value: +[ + "event", + "competition", + "class" +] - added
Input schema / properties / ids / descriptionAdded value: +"Comma-separated ids at the chosen hierarchyLevel." - added
Input schema / properties / maxItems / descriptionAdded value: +"Max SRM combinations to return." - added
Input schema / properties / minUniqueCount / descriptionAdded value: +"Minimum distinct legs per SRM." - added
Input schema / properties / popularsrms / descriptionAdded value: +"Restrict to popular SRMs only." - added
Input schema / properties / sortBy / descriptionAdded value: +"Sort order for returned SRMs."
- Changed
sportsbet_racing_resulted_events3 fields changed- added
Input schema / properties / classId / descriptionAdded value: +"Racing class id." - added
Input schema / properties / competitionId / descriptionAdded value: +"Racing competition (meeting) id. Required — part of the URL path." - added
Input schema / properties / date / descriptionAdded value: +"Result date, YYYY-MM-DD."
- Changed
sportsbet_results_classes1 field changed- added
Input schema / properties / date / descriptionAdded value: +"Result date, YYYY-MM-DD, or the literal \"today\"."
- Changed
sportsbet_results_competitions2 fields changed- added
Input schema / properties / classId / descriptionAdded value: +"Sport class id. Required — part of the URL path." - added
Input schema / properties / date / descriptionAdded value: +"Result date, YYYY-MM-DD, or the literal \"today\"."
- Changed
sportsbet_sport_card_legacy1 field changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sport event id. Required — part of the URL path."
- Changed
sportsbet_sport_competition7 fields changed- added
Input schema / properties / competitionId / descriptionAdded value: +"Sport competition id. Required — part of the URL path." - added
Input schema / properties / displayType / descriptionAdded value: +"Upstream display variant." - added
Input schema / properties / eventFilter / descriptionAdded value: +"Restrict to matches or outrights." - added
Input schema / properties / eventFilter / enumAdded value: +[ + "matches", + "outrights" +] - added
Input schema / properties / includeAllEvents / descriptionAdded value: +"Include all events, not just upcoming." - added
Input schema / properties / includeTopMarkets / descriptionAdded value: +"Inline highlighted top markets per event." - added
Input schema / properties / numMarkets / descriptionAdded value: +"Markets to inline per event."
- Changed
sportsbet_sport_resulted_events3 fields changed- added
Input schema / properties / classId / descriptionAdded value: +"Sport class id." - added
Input schema / properties / competitionId / descriptionAdded value: +"Sport competition id. Required — part of the URL path." - added
Input schema / properties / date / descriptionAdded value: +"Result date, YYYY-MM-DD."
- Changed
sportsbet_sports_card6 fields changed- added
Input schema / properties / eventId / descriptionAdded value: +"Sport event id. Required — part of the URL path." - added
Input schema / properties / includeAllMarkets / descriptionAdded value: +"Inline every market for the event." - added
Input schema / properties / includeCommentary / descriptionAdded value: +"Inline text commentary." - added
Input schema / properties / includeIncidents / descriptionAdded value: +"Inline match incidents (goals, cards)." - added
Input schema / properties / includeScoreboard / descriptionAdded value: +"Inline the live scoreboard." - added
Input schema / properties / includeTopMarkets / descriptionAdded value: +"Inline highlighted top markets."
- Changed
sportsbet_sports_classes4 fields changed- added
Input schema / properties / excludeNonLiveEvents / descriptionAdded value: +"Return only in-play events." - added
Input schema / properties / fromDate / descriptionAdded value: +"Window start — naive datetime YYYY-MM-DDTHH:MM:SS (a bare date is rejected with HTTP 400)." - added
Input schema / properties / includeLiveEvents / descriptionAdded value: +"Include events currently in-play." - added
Input schema / properties / toDate / descriptionAdded value: +"Window end — naive datetime YYYY-MM-DDTHH:MM:SS (a bare date is rejected with HTTP 400)."
- Changed
sportsbet_track_report3 fields changed- added
Input schema / properties / eventDate / descriptionAdded value: +"Meeting date, YYYY-MM-DD." - added
Input schema / properties / raceType / descriptionAdded value: +"Racing code (e.g. Thoroughbred, Greyhound, Harness)." - added
Input schema / properties / trackName / descriptionAdded value: +"Track / venue name."
- Changed
sportsbet_trending_sgm1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Sport event id."
- Changed
sportsbet_upcoming_events2 fields changed- added
Input schema / properties / includePrimaryMarket / descriptionAdded value: +"Inline each event's primary market + prices." - added
Input schema / properties / maxEvents / descriptionAdded value: +"Cap the number of events returned."
- Added
sportsdata_feedback - Added
sportsdata_session_stats - Added
sportsdataio_mlb_games_by_date - Added
sportsdataio_nba_dfs_slates - Added
sportsdataio_nba_games_by_date - Added
sportsdataio_nfl_dfs_slates - Added
sportsdataio_nfl_injuries - Added
sportsdataio_nfl_projections - Added
sportsdataio_nfl_scores - Added
sportsdataio_nfl_teams - Added
sportsdataio_nhl_games_by_date - Added
sportsgameodds_bookmakers - Added
sportsgameodds_events - Added
sportsgameodds_leagues - Added
sportsgameodds_players - Added
sportsgameodds_sports - Added
sportsgameodds_stats - Added
sportsgameodds_teams - Added
squiggle_games - Added
squiggle_ladder - Added
squiggle_sources - Added
squiggle_standings - Added
squiggle_teams - Added
squiggle_tips - Changed
supercoach_leagues5 fields changed- added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
supercoach_player6 fields changed- added
Input schema / properties / id / descriptionAdded value: +"SuperCoach player id (from supercoach_players[].id). Required — part of the URL path." - added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
supercoach_players7 fields changed- added
Input schema / properties / embed / descriptionAdded value: +"Comma-separated embeds (CLOSED set): positions, player_stats (price/proj/ownership/season totals — the main one), player_match_stats (that round's per-game {games, points} — for the score series), notes (dated news), odds (AFL Brownlow odds only). Default 'positions,player_stats,notes'." - added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / round / descriptionAdded value: +"Round number. REQUIRED in practice: player_stats are scoped to this round. Omitting it does NOT return the whole season. Use supercoach_settings.next_round for the upcoming-round projection, or loop 1..current_round for history." - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
supercoach_real_fixture8 fields changed- added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / page / descriptionAdded value: +"1-based page." - added
Input schema / properties / page_size / descriptionAdded value: +"Rows per page (default 9998 = effectively all)." - added
Input schema / properties / round / descriptionAdded value: +"Round number. Omit for the entire season." - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
supercoach_settings6 fields changed- added
Input schema / properties / min / descriptionAdded value: +"min=true returns a slimmer settings blob; false (default) includes the full competition/system/content sections." - added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
supercoach_teams5 fields changed- added
Input schema / properties / mode / descriptionAdded value: +"Game mode: `classic` (the salary-cap game — default, all 7 sports) or `draft` (the draft league variant — afl/nrl/nba/epl; adds a top-level predraft_rank + player_stats.position_ranks to each player). Same response shape otherwise." - added
Input schema / properties / mode / enumAdded value: +[ + "classic", + "draft" +] - added
Input schema / properties / sport / descriptionAdded value: +"Which SuperCoach game: afl | nrl | epl | nba | nbl | nfl | bbl. Response shape is identical across all seven; only the per-player stat columns differ. Required — part of the URL path." - added
Input schema / properties / sport / enumAdded value: +[ + "afl", + "nrl", + "epl", + "nba", + "nbl", + "nfl", + "bbl" +] - added
Input schema / properties / year / descriptionAdded value: +"Season key (NOT always the calendar year). afl/nrl = current calendar year (2026 now). epl/nba/nbl/nfl/bbl = the season's year, currently 2025 (2024 archived). When unsure, try the current year, then the prior year if the feed is empty. Required — part of the URL path."
- Changed
tab_cms_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
tab_competition4 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition name, e.g. \"AFL\", \"AFL Futures\". Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / numTopMarkets / descriptionAdded value: +"Top markets to inline per match." - added
Input schema / properties / sport / descriptionAdded value: +"Sport name, e.g. \"AFL Football\". Required — part of the URL path."
- Changed
tab_featured_events1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_live_events_summary1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_match4 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition name, e.g. \"AFL\". Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / match / descriptionAdded value: +"Match name, e.g. \"Adelaide v Geelong\". Pass raw spaces. Required — part of the URL path." - added
Input schema / properties / sport / descriptionAdded value: +"Sport name, e.g. \"AFL Football\". Required — part of the URL path."
- Changed
tab_match_markets4 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition name, e.g. \"AFL\". Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / match / descriptionAdded value: +"Match name, e.g. \"Adelaide v Geelong\". Pass raw spaces. Required — part of the URL path." - added
Input schema / properties / sport / descriptionAdded value: +"Sport name, e.g. \"AFL Football\". Required — part of the URL path."
- Changed
tab_multi_builder2 fields changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / sport / descriptionAdded value: +"Sport code/name, e.g. \"NRL\", \"AFL\". Required — part of the URL path."
- Changed
tab_racing_dates1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction: NSW, VIC, QLD, ACT, SA, TAS or NT."
- Changed
tab_racing_futures_meetings3 fields changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / returnOffers / descriptionAdded value: +"Inline bonus-bet offers." - added
Input schema / properties / returnPromo / descriptionAdded value: +"Inline promotions."
- Changed
tab_racing_futures_race7 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date from the futures listing, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / fixedOdds / descriptionAdded value: +"Include fixed-odds prices (futures are fixed-odds only)." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / raceName / descriptionAdded value: +"Race name from the futures listing, e.g. \"Queen Anne Stakes (All In)\". Required — part of the URL path." - added
Input schema / properties / raceType / descriptionAdded value: +"Race code: R/G/H. Required — part of the URL path." - added
Input schema / properties / raceType / enumAdded value: +[ + "R", + "G", + "H" +] - added
Input schema / properties / venueMnemonic / descriptionAdded value: +"Futures meeting name, e.g. \"Racing Futures\", \"Greyhound Futures\"."
- Changed
tab_racing_jackpots1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_racing_meeting_races5 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / raceType / descriptionAdded value: +"Race code: R thoroughbred, G greyhound, H harness. Required — part of the URL path." - added
Input schema / properties / raceType / enumAdded value: +[ + "R", + "G", + "H" +] - added
Input schema / properties / venueMnemonic / descriptionAdded value: +"Venue code, e.g. HAW (Hawkesbury), from the meeting object. Required — part of the URL path."
- Changed
tab_racing_meetings4 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction (NSW, VIC, …)." - added
Input schema / properties / returnOffers / descriptionAdded value: +"Inline bonus-bet offers." - added
Input schema / properties / returnPromo / descriptionAdded value: +"Inline promotions."
- Changed
tab_racing_next_to_go4 fields changed- added
Input schema / properties / includeFixedOdds / descriptionAdded value: +"Inline fixed-odds prices." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / returnOffers / descriptionAdded value: +"Inline bonus-bet offers." - added
Input schema / properties / returnPromo / descriptionAdded value: +"Inline promotions."
- Changed
tab_racing_race6 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / raceNumber / descriptionAdded value: +"Race number at the meeting. Required — part of the URL path." - added
Input schema / properties / raceType / descriptionAdded value: +"Race code: R/G/H. Required — part of the URL path." - added
Input schema / properties / raceType / enumAdded value: +[ + "R", + "G", + "H" +] - added
Input schema / properties / venueMnemonic / descriptionAdded value: +"Venue code, e.g. HAW. Required — part of the URL path."
- Changed
tab_racing_race_form6 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / raceNumber / descriptionAdded value: +"Race number. Required — part of the URL path." - added
Input schema / properties / raceType / descriptionAdded value: +"Race code: R/G/H. Required — part of the URL path." - added
Input schema / properties / raceType / enumAdded value: +[ + "R", + "G", + "H" +] - added
Input schema / properties / venueMnemonic / descriptionAdded value: +"Venue code. Required — part of the URL path."
- Changed
tab_racing_runner_form7 fields changed- added
Input schema / properties / date / descriptionAdded value: +"Meeting date, YYYY-MM-DD. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / raceNumber / descriptionAdded value: +"Race number. Required — part of the URL path." - added
Input schema / properties / raceType / descriptionAdded value: +"Race code: R/G/H. Required — part of the URL path." - added
Input schema / properties / raceType / enumAdded value: +[ + "R", + "G", + "H" +] - added
Input schema / properties / runnerNumber / descriptionAdded value: +"Saddle/box number. Required — part of the URL path." - added
Input schema / properties / venueMnemonic / descriptionAdded value: +"Venue code. Required — part of the URL path."
- Changed
tab_recommendation_featured2 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Recommendation category, e.g. \"Jockey Challenge\", \"Racing Extras\". Pass raw spaces. Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_sport2 fields changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / sport / descriptionAdded value: +"Sport name, e.g. \"AFL Football\", \"Rugby League\", \"Jockey Challenge\". Pass raw spaces. Required — part of the URL path."
- Changed
tab_sports1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_sports_next_to_go7 fields changed- added
Input schema / properties / featuredCompetitions / descriptionAdded value: +"Restrict to featured competitions." - added
Input schema / properties / futuresOnly / descriptionAdded value: +"Only futures markets." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / limit / descriptionAdded value: +"Max events to return." - added
Input schema / properties / next / descriptionAdded value: +"Time window, e.g. \"12h\"." - added
Input schema / properties / openOnly / descriptionAdded value: +"Only events open for betting." - added
Input schema / properties / sortByCloseTime / descriptionAdded value: +"Sort by market close time."
- Changed
tab_sports_results1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Changed
tab_tournament5 fields changed- added
Input schema / properties / competition / descriptionAdded value: +"Competition name, e.g. \"Wimbledon\". Required — part of the URL path." - added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction." - added
Input schema / properties / numTopMarkets / descriptionAdded value: +"Top markets to inline per match." - added
Input schema / properties / sport / descriptionAdded value: +"Sport name, e.g. \"Tennis\". Required — part of the URL path." - added
Input schema / properties / tournament / descriptionAdded value: +"Tournament name from the competition page, e.g. \"Wimbledon Mens Singles\". Pass raw spaces. Required — part of the URL path."
- Changed
tab_trending_props1 field changed- added
Input schema / properties / jurisdiction / descriptionAdded value: +"State jurisdiction."
- Added
theoddsapi_event_odds - Added
theoddsapi_events - Added
theoddsapi_historical_odds - Added
theoddsapi_odds - Added
theoddsapi_scores - Added
theoddsapi_sports - Changed
twitter_liking_users3 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Post id. Required — part of the URL path." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (1-100)." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_quote_tweets4 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Quoted post id. Required — part of the URL path." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (10-100)." - added
Input schema / properties / pagination_token / descriptionAdded value: +"Pagination token." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields (CSV)."
- Changed
twitter_retweeted_by3 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Post id. Required — part of the URL path." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (1-100)." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_search_recent11 fields changed- added
Input schema / properties / end_time / descriptionAdded value: +"ISO 8601 upper bound." - added
Input schema / properties / expansions / descriptionAdded value: +"Related objects to embed (CSV)." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (10-100)." - added
Input schema / properties / next_token / descriptionAdded value: +"Pagination token from meta.next_token." - added
Input schema / properties / query / descriptionAdded value: +"Search query with operators (from:user, lang:en, -is:retweet, #tag, \"phrase\")." - added
Input schema / properties / since_id / descriptionAdded value: +"Only posts newer than this id." - added
Input schema / properties / sort_order / descriptionAdded value: +"Result ordering (default recency)." - added
Input schema / properties / sort_order / enumAdded value: +[ + "recency", + "relevancy" +] - added
Input schema / properties / start_time / descriptionAdded value: +"ISO 8601 lower bound (within the last 7 days)." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields to include (CSV)." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields for expanded authors (CSV)."
- Changed
twitter_trends3 fields changed- added
Input schema / properties / max_trends / descriptionAdded value: +"Max trends to return (1-50, default 20)." - added
Input schema / properties / trend_fields / descriptionAdded value: +"Trend fields to include (CSV) — tweet_count is omitted unless requested." - added
Input schema / properties / woeid / descriptionAdded value: +"Where-On-Earth id of the location. Required — part of the URL path."
- Changed
twitter_tweet4 fields changed- added
Input schema / properties / expansions / descriptionAdded value: +"Related objects (CSV)." - added
Input schema / properties / id / descriptionAdded value: +"Post id. Required — part of the URL path." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields (CSV)." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_tweet_counts5 fields changed- added
Input schema / properties / end_time / descriptionAdded value: +"ISO 8601 upper bound." - added
Input schema / properties / granularity / descriptionAdded value: +"Bucket size. One of: minute, hour, day." - added
Input schema / properties / granularity / enumAdded value: +[ + "minute", + "hour", + "day" +] - added
Input schema / properties / query / descriptionAdded value: +"Same operator syntax as search." - added
Input schema / properties / start_time / descriptionAdded value: +"ISO 8601 lower bound."
- Changed
twitter_tweets4 fields changed- added
Input schema / properties / expansions / descriptionAdded value: +"Related objects (CSV)." - added
Input schema / properties / ids / descriptionAdded value: +"Post id(s), up to 100." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields (CSV)." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_usage2 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Days of daily usage to include (1-90, default 7)." - added
Input schema / properties / usage_fields / descriptionAdded value: +"Usage fields to include (CSV: cap_reset_day, daily_project_usage, daily_client_app_usage, project_cap, project_id, project_usage)."
- Changed
twitter_user2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Numeric user id. Required — part of the URL path." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_user_by_username2 fields changed- added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)." - added
Input schema / properties / username / descriptionAdded value: +"Handle without the @ (e.g. NBA, AFL, wojespn). Required — part of the URL path."
- Changed
twitter_user_mentions5 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Numeric user id. Required — part of the URL path." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (5-100)." - added
Input schema / properties / pagination_token / descriptionAdded value: +"Pagination token." - added
Input schema / properties / since_id / descriptionAdded value: +"Only posts newer than this id." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields (CSV)."
- Changed
twitter_user_tweets8 fields changed- added
Input schema / properties / end_time / descriptionAdded value: +"ISO 8601 upper bound." - added
Input schema / properties / exclude / descriptionAdded value: +"CSV of retweets and/or replies to drop." - added
Input schema / properties / id / descriptionAdded value: +"Numeric user id. Required — part of the URL path." - added
Input schema / properties / max_results / descriptionAdded value: +"Results per page (5-100)." - added
Input schema / properties / pagination_token / descriptionAdded value: +"Pagination token." - added
Input schema / properties / since_id / descriptionAdded value: +"Only posts newer than this id." - added
Input schema / properties / start_time / descriptionAdded value: +"ISO 8601 lower bound." - added
Input schema / properties / tweet_fields / descriptionAdded value: +"Post fields (CSV)."
- Changed
twitter_users2 fields changed- added
Input schema / properties / ids / descriptionAdded value: +"Numeric user id(s), up to 100." - added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)."
- Changed
twitter_users_by_usernames2 fields changed- added
Input schema / properties / user_fields / descriptionAdded value: +"User fields (CSV)." - added
Input schema / properties / usernames / descriptionAdded value: +"Handle(s) without the @, up to 100."
- Changed
unibet_kambi_call3 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / path_params / descriptionAdded value: +"Values for the operation's URL path placeholders, as an object keyed by placeholder name. The catalogue resource lists which each operation needs." - added
Input schema / properties / query_params / descriptionAdded value: +"Query-string parameters for the operation, as an object. Optional for most operations; the catalogue resource documents the accepted keys."
- Changed
unibet_kambi_live_stats4 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"Kambi channel id." - added
Input schema / properties / eventId / descriptionAdded value: +"Kambi event id (from a listView / betoffer call). Required — part of the URL path." - added
Input schema / properties / lang / descriptionAdded value: +"Locale." - added
Input schema / properties / market / descriptionAdded value: +"Market."
- Changed
unibet_racing_call2 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"The operation to run. Valid names come from this provider's catalogue resource (see `list_resources`) — guessing one returns an error listing the alternatives." - added
Input schema / properties / variables / descriptionAdded value: +"Variables for the operation, as an object. Which keys are required depends on the operation; the catalogue resource documents each one."
- Changed
wta_player1 field changed- added
Input schema / properties / playerId / descriptionAdded value: +"WTA player id (from wta_players[].id or wta_rankings[].player.id). Required — part of the URL path."
- Changed
wta_player_matches1 field changed- added
Input schema / properties / playerId / descriptionAdded value: +"WTA player id (from wta_players[].id). Required — part of the URL path."
- Changed
wta_players3 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Filter by player name (e.g. 'Swiatek', 'Sabalenka')." - added
Input schema / properties / page / descriptionAdded value: +"0-based page index." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
- Changed
wta_rankings6 fields changed- added
Input schema / properties / metric / descriptionAdded value: +"Ranking metric — singles or doubles. Must match `type` (rankSingles↔singles, rankDoubles↔doubles)." - added
Input schema / properties / metric / enumAdded value: +[ + "singles", + "doubles" +] - added
Input schema / properties / page / descriptionAdded value: +"0-based page index." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page (e.g. 100 = top 100)." - added
Input schema / properties / type / descriptionAdded value: +"Ranking type — rankSingles or rankDoubles. Must match `metric`." - added
Input schema / properties / type / enumAdded value: +[ + "rankSingles", + "rankDoubles" +]
- Changed
wta_tournament2 fields changed- added
Input schema / properties / groupId / descriptionAdded value: +"tournamentGroup id (e.g. 901 = Australian Open) — from wta_tournaments. Required — part of the URL path." - added
Input schema / properties / year / descriptionAdded value: +"Edition year (e.g. 2025). Required — part of the URL path."
- Changed
wta_tournament_matches2 fields changed- added
Input schema / properties / groupId / descriptionAdded value: +"tournamentGroup id — from wta_tournaments. Required — part of the URL path." - added
Input schema / properties / year / descriptionAdded value: +"Edition year (e.g. 2025). Required — part of the URL path."
- Changed
wta_tournament_players2 fields changed- added
Input schema / properties / groupId / descriptionAdded value: +"tournamentGroup id (e.g. 901 = Australian Open) — from wta_tournaments. Required — part of the URL path." - added
Input schema / properties / year / descriptionAdded value: +"Edition year (e.g. 2025). Required — part of the URL path."
- Changed
wta_tournaments2 fields changed- added
Input schema / properties / page / descriptionAdded value: +"0-based page index." - added
Input schema / properties / pageSize / descriptionAdded value: +"Rows per page."
27 tool updates
v0.23.1- Added
espnfantasy_boxscore - Added
espnfantasy_communication - Added
espnfantasy_draft - Added
espnfantasy_everything - Added
espnfantasy_games - Added
espnfantasy_league - Added
espnfantasy_league_defaults - Added
espnfantasy_league_history - Added
espnfantasy_league_settings - Added
espnfantasy_live_scoring - Added
espnfantasy_matchup_score - Added
espnfantasy_matchups - Added
espnfantasy_nav - Added
espnfantasy_pending_transactions - Added
espnfantasy_player_card - Added
espnfantasy_player_info - Added
espnfantasy_player_news - Added
espnfantasy_players - Added
espnfantasy_positional_ratings - Added
espnfantasy_pro_teams - Added
espnfantasy_rosters - Added
espnfantasy_scoreboard - Added
espnfantasy_season - Added
espnfantasy_standings - Added
espnfantasy_status - Added
espnfantasy_teams - Added
espnfantasy_transactions
2 tool updates
v0.21.0- Changed
betr_master_event1 field changed- added
Input schema / properties / GroupTypeCodeAdded value: +{ + "default": null, + "type": "string" +}
- Added
tab_tournament
2 tool updates
v0.20.0- Added
entain_racing_racecard - Added
tab_racing_runner_form
492 tool updates
v0.1.1- Added
afl_broadcast_channels - Added
afl_broadcast_event_get - Added
afl_broadcast_events - Added
afl_broadcast_match_events - Added
afl_broadcast_region_get - Added
afl_broadcast_regions - Added
afl_broadcasters_list - Added
afl_cfs_call - Added
afl_club_get - Added
afl_clubs_list - Added
afl_competition_compseasons - Added
afl_competition_get - Added
afl_competitions_list - Added
afl_compseason_get - Added
afl_compseasons_list - Added
afl_content_photo_get - Added
afl_content_photo_list - Added
afl_content_promo_get - Added
afl_content_promo_list - Added
afl_content_text_get - Added
afl_content_text_list - Added
afl_content_video_get - Added
afl_content_video_list - Added
afl_keyserver_url_signing - Added
afl_ladders_get - Added
afl_live_audio - Added
afl_live_video - Added
afl_match_get - Added
afl_matches_idmap - Added
afl_matches_list - Added
afl_player_get - Added
afl_players_idmap - Added
afl_players_list - Added
afl_rounds_list - Added
afl_season_get - Added
afl_seasons_list - Added
afl_statspro_call - Added
afl_team_get - Added
afl_teams_idmap - Added
afl_teams_list - Added
afl_venue_get - Added
afl_venues_list - Added
betfair_cashout - Added
betfair_event_details - Added
betfair_event_timeline - Added
betfair_event_timelines - Added
betfair_market_prices - Added
betfair_markets_by_event - Added
betfair_navigation - Added
betfair_scores - Added
betfair_scores_broadcast - Added
betr_all_promotions - Added
betr_event_types - Added
betr_fav4 - Added
betr_featured_racing - Added
betr_grouped_racecard - Added
betr_market_movers - Added
betr_master_category - Added
betr_master_event - Added
betr_next5_races - Added
betr_pop_sgm_bet_data - Added
betr_pop_sgm_category - Added
betr_popular_market_links - Added
betr_promotions - Added
betr_race - Added
betr_race_flucs - Added
betr_race_form - Added
betr_sports_category - Added
betr_statwars_events - Added
betr_todays_races - Added
cricketaustralia_competitions - Added
cricketaustralia_content - Added
cricketaustralia_fixtures - Added
cricketaustralia_players - Added
cricketaustralia_playlist - Added
cricketaustralia_runs_graph - Added
cricketaustralia_scorecard - Added
cricketaustralia_standings - Added
cricketaustralia_streams - Added
cricketaustralia_teams - Added
cricketaustralia_tours - Added
cricketaustralia_venue - Added
dabble_active_competitions - Added
dabble_competition_fixtures - Added
dabble_competitions - Added
dabble_fixture_details - Added
dabble_sports - Added
datagolf_approach_skill - Added
datagolf_fantasy_projections - Added
datagolf_field_updates - Added
datagolf_hist_dfs_event_list - Added
datagolf_hist_dfs_points - Added
datagolf_hist_event_list - Added
datagolf_hist_matchups - Added
datagolf_hist_odds_event_list - Added
datagolf_hist_outrights - Added
datagolf_hist_results - Added
datagolf_hist_results_event_list - Added
datagolf_hist_rounds - Added
datagolf_in_play - Added
datagolf_live_hole_stats - Added
datagolf_live_strokes_gained - Added
datagolf_live_tournament_stats - Added
datagolf_matchups - Added
datagolf_matchups_all_pairings - Added
datagolf_outrights - Added
datagolf_player_decompositions - Added
datagolf_player_list - Added
datagolf_pre_tournament - Added
datagolf_pre_tournament_archive - Added
datagolf_rankings - Added
datagolf_schedule - Added
datagolf_skill_ratings - Added
entain_cms_entries - Added
entain_event_market_rules - Added
entain_event_market_type_group_maps - Added
entain_event_market_type_groups - Added
entain_featured_slider - Added
entain_graphql_call - Added
entain_metadata_by_url - Added
entain_quicklinks_list - Added
entain_racing_future_markets - Added
entain_racing_meeting - Added
entain_racing_next_races - Added
entain_racing_search - Added
entain_sport_event_card - Added
entain_sport_event_request - Added
entain_video_channels - Added
espn_cdn_call - Added
espn_core_call - Added
espn_game_summary - Added
espn_news - Added
espn_scoreboard - Added
espn_site_call - Added
espn_standings - Added
espn_teams - Added
espn_web_call - Added
fanduel_racing_call - Added
fanduel_racing_messages - Added
fanduel_racing_promotions - Added
fanduel_racing_quicklinks - Added
fanduel_sb_call - Added
fanduel_sb_live_score - Added
kalshi_candlesticks - Added
kalshi_candlesticks_batch - Added
kalshi_event - Added
kalshi_events - Added
kalshi_exchange_announcements - Added
kalshi_exchange_schedule - Added
kalshi_exchange_status - Added
kalshi_market - Added
kalshi_markets - Added
kalshi_milestones - Added
kalshi_mve_collection - Added
kalshi_mve_collections - Added
kalshi_orderbook - Added
kalshi_series - Added
kalshi_series_list - Added
kalshi_structured_target - Added
kalshi_structured_targets - Added
kalshi_trades - Added
laliga_competition - Added
laliga_competitions - Added
laliga_match - Added
laliga_matches - Added
laliga_player - Added
laliga_player_stats - Added
laliga_players_stats - Added
laliga_rounds - Added
laliga_squad - Added
laliga_standing - Added
laliga_subscription - Added
laliga_subscriptions - Added
laliga_team - Added
laliga_teams - Added
mlb_allstar_ballot - Added
mlb_allstar_final_vote - Added
mlb_allstar_writeins - Added
mlb_attendance - Added
mlb_awards - Added
mlb_awards_list - Added
mlb_boxscore - Added
mlb_conferences - Added
mlb_datacasters - Added
mlb_divisions - Added
mlb_draft - Added
mlb_draft_prospects - Added
mlb_free_agents - Added
mlb_game_changes - Added
mlb_game_content - Added
mlb_game_context_metrics - Added
mlb_game_pace - Added
mlb_game_uniforms - Added
mlb_game_win_probability - Added
mlb_high_low - Added
mlb_home_run_derby - Added
mlb_jobs - Added
mlb_leaders - Added
mlb_leagues - Added
mlb_linescore - Added
mlb_live_feed - Added
mlb_meta - Added
mlb_official_scorers - Added
mlb_people - Added
mlb_people_changes - Added
mlb_playbyplay - Added
mlb_player - Added
mlb_player_game_stats - Added
mlb_player_search - Added
mlb_player_stats - Added
mlb_schedule - Added
mlb_schedule_postseason - Added
mlb_schedule_postseason_series - Added
mlb_schedule_postseason_tunein - Added
mlb_schedule_tied - Added
mlb_season - Added
mlb_seasons - Added
mlb_seasons_all - Added
mlb_sports - Added
mlb_sports_players - Added
mlb_standings - Added
mlb_stats - Added
mlb_team - Added
mlb_team_alumni - Added
mlb_team_coaches - Added
mlb_team_leaders - Added
mlb_team_personnel - Added
mlb_team_roster - Added
mlb_team_stats - Added
mlb_team_uniforms - Added
mlb_teams - Added
mlb_teams_affiliates - Added
mlb_teams_history - Added
mlb_teams_stats - Added
mlb_transactions - Added
mlb_umpires - Added
mlb_venues - Added
nba_boxscore - Added
nba_daily_lineups - Added
nba_odds_today - Added
nba_playbyplay - Added
nba_schedule - Added
nba_scoreboard_today - Added
nba_stats_call - Added
nbl_ladder - Added
nbl_match_outcomes - Added
nbl_news - Added
nbl_next_matches - Added
nbl_player_boxscores - Added
nbl_player_stats - Added
nbl_players - Added
nbl_schedule - Added
nbl_season_current - Added
nbl_seasons - Added
nbl_stat_leaders - Added
nbl_team_roster - Added
nbl_team_stats - Added
nbl_teams - Added
nrl_application_settings - Added
nrl_competitions - Added
nrl_fixture - Added
nrl_match - Added
openf1_car_data - Added
openf1_championship_drivers - Added
openf1_championship_teams - Added
openf1_drivers - Added
openf1_intervals - Added
openf1_laps - Added
openf1_location - Added
openf1_meetings - Added
openf1_overtakes - Added
openf1_pit - Added
openf1_position - Added
openf1_race_control - Added
openf1_session_result - Added
openf1_sessions - Added
openf1_starting_grid - Added
openf1_stints - Added
openf1_team_radio - Added
openf1_weather - Added
pinnacle_carousel - Added
pinnacle_enums - Added
pinnacle_labels - Added
pinnacle_league_matchups - Added
pinnacle_league_matchups_live - Added
pinnacle_matchup - Added
pinnacle_matchup_markets - Added
pinnacle_matchup_parlay_markets - Added
pinnacle_matchup_related - Added
pinnacle_sport_leagues - Added
pinnacle_sport_matchups - Added
pinnacle_sport_matchups_all - Added
pinnacle_sport_matchups_live - Added
pinnacle_sports - Added
pinnacle_sports_live - Added
pinnacle_status - Added
pinnacle_teasers - Added
pl_awards - Added
pl_broadcast_match_events - Added
pl_broadcasting_events - Added
pl_clubs_metadata - Added
pl_competition - Added
pl_competitions - Added
pl_content - Added
pl_content_item - Added
pl_country - Added
pl_current_gameweek - Added
pl_match - Added
pl_match_commentary - Added
pl_match_events - Added
pl_match_lineups - Added
pl_match_officials - Added
pl_match_stats - Added
pl_matches - Added
pl_matchweek_matches - Added
pl_metadata - Added
pl_news_latest - Added
pl_news_popular - Added
pl_player - Added
pl_player_basic - Added
pl_player_comp_stats - Added
pl_player_info - Added
pl_player_leaderboard - Added
pl_player_season_stats - Added
pl_players - Added
pl_players_by_id - Added
pl_season_teams - Added
pl_squad - Added
pl_standings - Added
pl_structure - Added
pl_team - Added
pl_team_form - Added
pl_team_leaderboard - Added
pl_team_next_fixture - Added
pl_team_stats - Added
pl_teamform - Added
pl_teams - Added
pl_teams_by_id - Added
pl_video_latest - Added
pl_video_popular - Added
pointsbet_competition_events - Added
pointsbet_content_call - Added
pointsbet_event - Added
pointsbet_event_search - Added
pointsbet_events_nextup - Added
pointsbet_inplay_streaming - Added
pointsbet_preprice_multis - Added
pointsbet_promo_code - Added
pointsbet_promotions - Added
pointsbet_racing_featured - Added
pointsbet_racing_form - Added
pointsbet_racing_futures - Added
pointsbet_racing_hourly_quaddie - Added
pointsbet_racing_insights - Added
pointsbet_racing_meeting - Added
pointsbet_racing_meetings - Added
pointsbet_racing_race - Added
pointsbet_racing_races - Added
pointsbet_racing_srm - Added
pointsbet_racing_tips - Added
pointsbet_sport_competitions - Added
pointsbet_sport_featured_events - Added
pointsbet_sports_inplay - Added
pointsbet_sports_list - Added
polymarket_book - Added
polymarket_clob_markets - Added
polymarket_event - Added
polymarket_events - Added
polymarket_holders - Added
polymarket_market - Added
polymarket_markets - Added
polymarket_midpoint - Added
polymarket_price - Added
polymarket_price_history - Added
polymarket_search - Added
polymarket_series - Added
polymarket_series_list - Added
polymarket_sports - Added
polymarket_spread - Added
polymarket_tags - Added
polymarket_trades - Added
racingandsports_match_list - Added
racingandsports_race_odds - Added
racingandsports_todays_racing - Added
seriea_competitions - Added
seriea_match_lineups - Added
seriea_matches - Added
seriea_players - Added
seriea_season - Added
seriea_seasons - Added
seriea_standings - Added
seriea_team_stats - Added
seriea_teams - Added
sportsbet_bet_live - Added
sportsbet_class_coupon - Added
sportsbet_cms_messages - Added
sportsbet_cms_page - Added
sportsbet_cms_settings - Added
sportsbet_competition_matches - Added
sportsbet_competition_outrights - Added
sportsbet_event_commentary - Added
sportsbet_event_markets - Added
sportsbet_event_results - Added
sportsbet_event_status - Added
sportsbet_graphql_call - Added
sportsbet_league_ladder - Added
sportsbet_match_preview - Added
sportsbet_multiple_racecards - Added
sportsbet_nav_hierarchy - Added
sportsbet_page_content - Added
sportsbet_popular_promotions - Added
sportsbet_race_preview - Added
sportsbet_racecard - Added
sportsbet_racecard_with_context - Added
sportsbet_racing_allracing - Added
sportsbet_racing_best_bets - Added
sportsbet_racing_best_bets_with_events - Added
sportsbet_racing_challenges - Added
sportsbet_racing_competition - Added
sportsbet_racing_event_meeting - Added
sportsbet_racing_futures - Added
sportsbet_racing_megabets - Added
sportsbet_racing_multis_events - Added
sportsbet_racing_popular_srms - Added
sportsbet_racing_resulted_events - Added
sportsbet_racing_top_jockeys - Added
sportsbet_results_classes - Added
sportsbet_results_competitions - Added
sportsbet_safer_gambling_message - Added
sportsbet_sport_card_legacy - Added
sportsbet_sport_competition - Added
sportsbet_sport_resulted_events - Added
sportsbet_sports_card - Added
sportsbet_sports_classes - Added
sportsbet_track_report - Added
sportsbet_trending_sgm - Added
sportsbet_upcoming_events - Added
supercoach_leagues - Added
supercoach_player - Added
supercoach_players - Added
supercoach_real_fixture - Added
supercoach_settings - Added
supercoach_teams - Added
tab_cms_call - Added
tab_competition - Added
tab_featured_events - Added
tab_live_events_summary - Added
tab_match - Added
tab_match_markets - Added
tab_multi_builder - Added
tab_racing_dates - Added
tab_racing_futures_meetings - Added
tab_racing_futures_race - Added
tab_racing_jackpots - Added
tab_racing_meeting_races - Added
tab_racing_meetings - Added
tab_racing_next_to_go - Added
tab_racing_race - Added
tab_racing_race_form - Added
tab_recommendation_featured - Added
tab_sport - Added
tab_sports - Added
tab_sports_next_to_go - Added
tab_sports_results - Added
tab_trending_props - Added
twitter_liking_users - Added
twitter_quote_tweets - Added
twitter_retweeted_by - Added
twitter_search_recent - Added
twitter_trends - Added
twitter_tweet - Added
twitter_tweet_counts - Added
twitter_tweets - Added
twitter_usage - Added
twitter_user - Added
twitter_user_by_username - Added
twitter_user_mentions - Added
twitter_user_tweets - Added
twitter_users - Added
twitter_users_by_usernames - Added
unibet_kambi_call - Added
unibet_kambi_live_stats - Added
unibet_kambi_odds_ladder - Added
unibet_racing_call - Added
wta_player - Added
wta_player_matches - Added
wta_players - Added
wta_rankings - Added
wta_tournament - Added
wta_tournament_matches - Added
wta_tournament_players - Added
wta_tournaments
3 tool updates
v0.1.0- First observed
list_available_groups - First observed
list_resources - First observed
list_tools_by_capability
TDQS
Scored across 829 tools
Tools are organized by provider prefix and many carry detailed 'also answers this' cross-references, but the same question is served by multiple near-duplicate tools across providers (six SGM pricers, four racing-form guides, four Pinnacle matchup variants, several overlapping MLB/NBA/NHL sources). With 829 tools, an agent will routinely face near-identical choices differentiated only by provider quirks.
Each provider namespace is internally consistent (afl_* uses _list/_get suffixes, mlb_* uses bare nouns, betr_* uses noun phrases), which keeps things readable. However, conventions are mixed across the server — verb_noun tools like list_available_groups sit beside noun_verb tools like afl_players_list — and there are irregularities like twitter_user_by_username vs twitter_users_by_usernames and pl_players_by_id vs mlb_people.
829 tools is an extreme mismatch for a single MCP surface — an order of magnitude beyond even a heavy server. The provider-group gating described by list_available_groups partially mitigates this, but as exposed, the tool set is far too large for any agent to hold in context or navigate reliably.
For its stated purpose as a sports-data aggregator, coverage is near-total: official and third-party sources across dozens of sports, odds, fantasy platforms, prediction markets, CMS content, and multiple SGM price/validate tools. Minor gaps exist — bet-placement tools are referenced (sportsbet_place_bet, tab_place_bet) but absent from the exposed surface, and some third-party providers are explicitly superseded by deeper official feeds.
Maintenance
Related MCP Connectors
The Odds API MCP — sportsbook odds across 70+ books, 30+ leagues
Sports Game Odds MCP — wraps the Sports Game Odds API (sportsgameodds.com)
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP-compatible server that gives AI agents access to alternative sports data across 30+ leagues — odds, events, probabilities, settlement, and futures for prediction markets, DFS platforms, and sportsbooks.297MIT
- AlicenseAqualityAmaintenanceA unified MCP server that aggregates 32 sports API providers into a single service, providing 336 tools for scores, stats, odds, esports, and more across 70+ sports.1004322MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude Desktop to The Odds API, giving Claude real-time access to sports odds, scores, and schedules across 80+ sports and leagues worldwide.-
- AlicenseNot gradedqualityBmaintenanceProps-first sports odds API with a hosted MCP server. Live odds and player props (moneyline, spreads, totals) across US sportsbooks, normalized to JSON. Tools: get_odds, get_props, get_events, get_books. API-key auth, free tier.MIT No Attribution