Cito API
Server Details
Live and post-match esports data for agents. League of Legends (LEC, LCK, LPL, Worlds), UFC / MMA fight cards, fighter records, and live stats. Resolve teams and players, live matches, upcoming schedule, standings, match summaries, and head-to-head. Requires a Cito API key from https://citoapi.com/dashboard
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 41 tools
Tools are highly differentiated through explicit 'Prefer over' / 'Do not use when' guidance, so match_preview vs match_summary vs match_details and player_form vs player_matches vs player_stats vs player_profile are cleanly separated. The main ambiguity is the 10 leaderboard_* tools, which share an identical shape and differ only by statistic, plus some copy-pasted description text that blurs leaderboard_break_conversion and leaderboard_break_points_saved.
Names consistently use snake_case and form recognizable families: cs2_*, leaderboard_*, player_*, match_*. Minor deviations exist: meta tools (api_health, call_api, list_capabilities) break the domain-prefix pattern, and h2h_matrix uses an abbreviation while head_to_head does not, but overall the convention is predictable.
41 tools is well past the heavy threshold for a coherent set. The count is inflated by near-duplicate structures: 10 tennis leaderboards could be a single parameterized tool, and the 8 CS2 stat tools are similarly granular. The multi-game scope justifies some breadth, but this many tools burdens an agent's tool-selection step.
Core workflows are well covered: live matches, upcoming/schedule, preview/summary/details, standings, player/team profiles, head-to-head, entity search, event cards, and deep tennis/CS2 stat surfaces. Gaps are minor and mostly API-side (Dota standings and H2H are weak), and call_api plus list_routes provide a documented escape hatch for long-tail paths.
Available Tools
41 toolsapi_healthARead-onlyInspect
API reachability, API key validity, plan tier, rate-limit headers, and best-effort included games.
When to use:
Once per session before heavy work
After 401/403/UNSUPPORTED_GAME/RATE_LIMIT
App scaffolding entitlement checks
Prefer over: probing random game endpoints to test the key.
Do not use when: you only need live scores — use live_matches.
Parallel-safe: yes. Upstream cost: 1–6. Example: { "includeGameProbes": true }
| Name | Required | Description | Default |
|---|---|---|---|
| includeGameProbes | No | If true, light allSettled probes per primary game product/status path. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, the description adds valuable behavioral context: parallel-safety, upstream cost range, best-effort probing behavior, and which error situations warrant calling it. This gives the agent a clear model of the tool's side effects and operational 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 organized with front-loaded output information, a compact when-to-use list, and a short example. Every section earns its place, and there is no filler or redundant 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?
Despite having an output schema, the description still supplies operational context such as upstream cost, parallel-safety, and error recovery triggers. For a simple single-parameter health-check tool, this is complete enough for an agent to select and 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 documents includeGameProbes at 100% coverage, so the baseline is 3. The description adds a concrete usage example and links the parameter to the 'best-effort included games' behavior, making the optional flag's purpose clearer without repeating 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 exactly what the tool reports: API reachability, API key validity, plan tier, rate-limit headers, and best-effort included games. It clearly differentiates from siblings by naming live_matches as the alternative for live 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?
Provides explicit when-to-use scenarios, including once per session, after specific errors, and for entitlement checks. It also gives a 'Prefer over' instruction and a 'Do not use when' rule, which is exactly the kind of routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_apiARead-onlyInspect
Power escape hatch: allowlisted Cito REST call with unshaped raw JSON in data.raw.
When to use:
Long-tail paths not yet curated (Fortnite, CS2 leaderboards, niche stats)
Debugging payloads while building an app
User explicitly knows an OpenAPI path
Prefer curated tools for all standard jobs (live, schedule, profiles, standings, H2H, previews).
Do not use when: a curated tool covers the outcome. Avoid parallel storms; same plan rate limits apply.
Path must start with / and match allowlisted prefixes: /health, /lol, /cs2, /dota2, /cod, /ufc, /fortnite, /tennis. Rejects absolute URLs and path traversal → PATH_NOT_ALLOWED.
Parallel-safe: yes but discouraged in bulk. Upstream cost: 1. Example: { "method": "GET", "path": "/cs2/rankings/teams", "queryJson": "{"page":1,"limit":20}" }
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path starting with /. Allowlisted prefixes only. Example: "/cs2/rankings/teams". | |
| query | No | Query params as a plain object (alternative to queryJson). Example: {"year":2026}. | |
| method | No | HTTP method. GET only: call_api is read-only. Example: "GET". | GET |
| queryJson | No | Stringified JSON object of query params. Example: "{\"page\":1,\"limit\":20}". | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description adds critical behavioral context beyond that: path allowlist constraints, rejection of absolute URLs and path traversal (PATH_NOT_ALLOWED), parallel-safety caveats ('discouraged in bulk'), and upstream cost (1). It also clarifies the raw/unshaped return format. No contradiction with annotations; the read-only nature is reinforced by 'GET only'.
Agents need to know what a tool does to the world before calling 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 core purpose, then bullet points for when to use, when not to use, path constraints, parallel guidance, cost, and an example. Every section carries unique value; no filler. It is longer than typical but the tool is an escape hatch with non-obvious constraints, so the length is justified 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?
The description covers all decision-relevant aspects: what the tool does, when to use it, when not to, path validation rules, error behavior, parallel usage guidance, and cost. Since an output schema exists (has output schema true), the raw return format is implied. For a raw-access tool with these constraints, nothing an agent needs to call 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?
Schema description coverage is 100%, so the baseline is 3. The description adds a single combined example that demonstrates method, path, and queryJson together, which clarifies how the parameters interact. It also reinforces that method is read-only, though that's already in the schema enum. The description doesn't introduce new parameter meanings but the example adds practical usage clarity beyond the 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 opens with 'Power escape hatch: allowlisted Cito REST call with unshaped raw JSON in data.raw.' This states the verb (call), resource (Cito REST), and the key differentiator (raw/unshaped output). It explicitly contrasts with curated tools: 'Prefer curated tools for all standard jobs,' naming the sibling set. An agent can immediately tell this tool is for uncached, raw access and not for standard curated 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?
Provides an explicit 'When to use' list (long-tail paths, debugging, user knows an OpenAPI path) and a 'Do not use when' clause (a curated tool covers the outcome). It also names alternatives implicitly via 'Prefer curated tools' and warns about parallel storms. This is exactly the kind of decision guidance needed for an escape-hatch tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_clutchesARead-onlyInspect
1vX clutch situation success records. Pass playerId for a specific player's clutch breakdown (1v1, 1v2, 1v3, 1v4, 1v5 attempted vs won), or omit to view the global clutch leaderboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 20, max 100). Example: 20. | |
| playerId | No | Optional player ID or slug (e.g. "xm1nd" or "cs2-player-456"). If omitted, returns global leaderboard. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by specifying the structure of the data (1v1, 1v2, ..., attempted vs won) and the global leaderboard option, which goes beyond the annotations and clarifies response semantics 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 a single, front-loaded sentence that states the purpose first, then explains the two modes. It contains zero fluff and every clause carries essential information, making it optimally 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?
Given the tool is a simple read-only stats query with full schema coverage on both parameters and an output schema provided, the description fully covers the invocation variants (player vs global). No additional context is needed for correct usage; the output schema handles return format 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% for both parameters, so the baseline is 3. The description adds value by explaining that playerId triggers a specific breakdown (listing clutch scenarios) and that omission yields the global leaderboard, which is more semantic detail than the schema's 'if omitted, returns global leaderboard' 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 tool provides '1vX clutch situation success records' and distinguishes between two modes: per-player breakdown or global leaderboard. This uniquely identifies the tool's resource and differentiates it from sibling tools like cs2_opening_duels or leaderboard_aces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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: pass playerId for a player's breakdown, omit for global leaderboard. While it doesn't explicitly name alternatives or exclusion criteria, the conditional usage is unambiguous and effectively guides the agent on how to invoke the tool for the desired result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_live_scoreboardARead-onlyInspect
Live real-time in-game scoreboard for an active CS2 match. Returns current round, bomb status, team scores, and individual player stats (K/A/D, ADR, HS%, alive status, HP, armor, weapon, and equipment value).
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match ID (e.g. "cs2-match-2397733" or "2397733"). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by specifying 'live real-time' and 'active match,' indicating that data is ephemeral and tied to ongoing matches. 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?
Two concise sentences front-load the core purpose and immediately follow with valuable specifics. Every clause earns its place 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?
Given the simple single-parameter schema, the presence of an output schema, and annotations covering safety, the description is nearly complete for an agent to invoke the tool. Minor gaps include not explaining behavior for expired or finished matches, but this is not critical for a live scoreboard 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 the single matchId parameter 100%, including examples and description. The description does not add parameter-level details beyond implying the match must be active, so the baseline of 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 identifies a specific resource: a live in-game scoreboard for an active CS2 match. It enumerates distinctive data elements (round, bomb status, team scores, player stats) that differentiate it from sibling tools like cs2_clutches or cs2_round_economy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and 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 an active CS2 match' implies when the tool should be used, and the tool's unique focus on live scoreboard data is clear. However, it does not explicitly state when not to use it or name alternatives, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_opening_duelsARead-onlyInspect
First blood and opening duel statistics. Pass playerId to view a pro player's First Kills (FK), First Deaths (FD), and opening duel conversion %, or omit playerId to view the global CS2 opening duel leaderboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 20, max 100). Example: 20. | |
| playerId | No | Optional player ID or slug (e.g. "chucky" or "cs2-player-123"). If omitted, returns global leaderboard. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful context about the specific stats (FK, FD, conversion %) but does not disclose additional behavioral traits such as sorting, recency, or response shape; that burden is moderated by the existing annotations and 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?
A single, well-structured sentence that front-loads the resource and then lays out both usage modes with no filler. Every clause earns its place, and the description avoids restating the tool name or redundant 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?
Given the tool's simple two-optional-parameter interface, read-only annotations, and existing output schema, the description covers everything an agent needs to decide and call correctly. There is no missing operational context that would lead to misinvocation.
Complex tools with many parameters or behaviors need more documentation. Simple 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 meaning beyond the schema by naming the returned metrics (First Kills, First Deaths, opening duel conversion %) and explicitly tying playerId to pro-player stats versus the global leaderboard. This helps the agent understand what each call mode will yield.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter 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 first blood and opening duel statistics, with an explicit verb ('view') and resource (CS2 opening duels). It further distinguishes two distinct modes—player-specific stats versus global leaderboard—making its purpose unambiguous and separable from sibling CS2 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 explains when to pass playerId versus omit it, giving the agent concrete conditional guidance. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough for a read-only stats tool with a simple two-mode interface.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_roster_transfersARead-onlyInspect
Recent professional CS2 roster changes, player benchings, stand-ins, and team transfers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 20, max 100). Example: 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the temporal scope 'recent' but does not specify the exact time window, pagination, or sorting behavior. It provides minimal additional behavioral context beyond the annotations, which is acceptable for a simple read operation 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 a single, concise sentence that front-loads the core functionality. There is no fluff, redundant phrasing, or extraneous detail. Every word contributes to the meaning, making it efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, output schema present), the description is largely sufficient. The only notable gap is the vague term 'recent', which could benefit from a defined time range. However, for a basic informational tool, the description covers what an agent needs to know 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?
The input schema fully documents the single 'limit' parameter with default, min, max, and an example, achieving 100% schema coverage. The description adds no extra meaning about the parameter, so it relies entirely on the schema. 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 clearly states the resource and topic: professional CS2 roster changes, benchings, stand-ins, and transfers. It distinguishes from siblings like cs2_live_scoreboard or cs2_team_map_stats by focusing on roster events rather than match stats. However, it lacks an explicit verb like 'list' or 'retrieve', making the action 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: use this tool when roster transfer information is needed. There is no explicit statement of when to use it versus alternatives, and no mention of scenarios where it should not be used. Since no direct sibling offers the same functionality, the lack of alternatives is acceptable, but the description provides no contextual guidance beyond its topic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_round_economyARead-onlyInspect
Round-by-round tactical economy for a CS2 map. Classifies every round buy type (Full Buy, Force Buy, Semi-Eco, Full Eco), team equipment spend, freeze-time equipment values, and loss bonus counter.
| Name | Required | Description | Default |
|---|---|---|---|
| mapId | Yes | Map ID or Game ID (e.g. "7716-map-1" or "cs2-game-123"). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only nature is covered by annotations; description adds specific behavioral detail about classifying rounds and exposing economy stats. No side-effect caveats needed beyond readOnlyHint.
Agents need to know what a tool does to the 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, dense sentences front-load the purpose and list concrete outputs. 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 the schema covering the input and an output schema present, the description tells the agent what the tool produces at the map level. No usage exclusions or alternative routing are mentioned, but the context is inferable for a read-only map-economy query.
Complex tools with many parameters or behaviors need more documentation. Simple 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 mapId parameter is already fully described in the schema with an example. The description does not add parameter-specific meaning, but schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Classifies') and resource (round-by-round economy for a CS2 map) with concrete output categories (buy types, spend, freeze-time values, loss bonus). It is distinct from sibling CS2 stat 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 intended use is implied by the content (analyze CS2 round economy), but there is no explicit statement of when to use it vs. sibling tools, nor 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.
cs2_team_map_statsBRead-onlyInspect
Team win rates, round win rates, and CT/T side win splits across the competitive map pool (Mirage, Inferno, Nuke, Dust2, Ancient, Anubis, Vertigo) over the last 30 or 90 days.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Timeframe in days: 30, 90, 180, or 365 (default 90). | |
| teamId | Yes | Team ID or slug (e.g. "cs2-team-4608" or "natus-vincere"). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds context about the data scope (history over 30/90 days) and that it covers the competitive map pool, but does not disclose any additional behavioral traits such as filtering restrictions, pagination, or response structure. That is acceptable given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the key metrics and then scopes them to the map pool and timeframe. It is concise and avoids redundant detail. It loses a point for the slight inconsistency with the schema's timeframe list and the embedded map list could be considered an unnecessary elaboration, but overall it 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?
With an output schema present and annotations covering the read-only safety profile, the description does not need to explain return values or side effects. However, the mismatch in valid days values is a genuine gap that could cause incorrect parameter usage. The description otherwise gives a good overview of the data content, so it 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?
Schema coverage is 100%, so the baseline would be 3, but the description actually introduces a contradiction: it says 'over the last 30 or 90 days' while the schema's days parameter explicitly allows 30, 90, 180, or 365. This misrepresents valid input and could mislead an agent. No extra meaning is added 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 data returned: team win rates, round win rates, CT/T splits across a defined map pool. This separates it from siblings like cs2_clutches or cs2_round_economy, though it does not explicitly name any alternative. The noun-phrase style is a minor drawback but the meaning 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?
There is no guidance on when to use this tool versus alternatives. It does not mention when to prefer it over cs2_veto_sequence, cs2_round_economy, or player_stats, nor does it give exclusion criteria. The only implied use case is needing team-level map stats, which is thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_utility_leaderboardARead-onlyInspect
Sub-second cached leaderboard of CS2 utility and flashbang efficiency. Returns pro player rankings for effective blind duration per flash, enemy blind time, flashes thrown, and grenade ADR.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 20, max 100). Example: 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context by noting the 'Sub-second cached' nature, which informs the agent about performance characteristics. It also specifies the exact metrics returned, 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 a single, information-dense sentence that front-loads the key behavioral trait ('Sub-second cached') and then lists the specific metrics. Every word 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 tool's simplicity (1 optional parameter, no nested objects, output schema present), the description is nearly complete. It covers the data source (CS2 utility/flashbang), the performance characteristic (cached), and the return metrics. The only minor gap is not explicitly stating the ranking order or whether the output is sorted, but the output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'limit' parameter is fully documented in the schema. The description does not add additional parameter-level detail beyond what the schema provides, but the baseline of 3 is appropriate given the complete 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: it returns a cached leaderboard of CS2 utility and flashbang efficiency, with specific metrics (effective blind duration per flash, enemy blind time, flashes thrown, grenade ADR). This is a specific verb-resource pairing that distinguishes it from sibling tools like cs2_clutches or leaderboard_aces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 querying CS2 utility leaderboard data, but does not explicitly state when to use this tool versus alternatives like cs2_team_map_stats or other leaderboard tools. The 'Sub-second cached' hint suggests a performance context, but no explicit when/when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs2_veto_sequenceARead-onlyInspect
Map pick/ban veto sequence for a CS2 match. Shows which team banned which map, map picks, and decider map in chronological order.
| Name | Required | Description | Default |
|---|---|---|---|
| matchId | Yes | Match ID (e.g. "2397603" or "cs2-match-2397603"). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read-only, non-destructive, open-world call. The description adds useful behavioral detail by specifying chronological ordering and the categories of information returned, 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?
Two short sentences with no filler; the first sentence names the resource and the second details the output. Every 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?
For a one-parameter read-only tool with a supplied output schema, the description is nearly complete. The only missing nuance is an edge-case caveat (for example, whether veto data is available before/during a match), which would have pushed it to 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?
The input schema has 100% description coverage for the only parameter, including an example and explicit required flag. The description doesn't need to add parameter details, so the baseline 3 applies; it contributes no extra semantics beyond 'for a CS2 match.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Shows') and names a concrete resource: a CS2 match's pick/ban veto sequence. It enumerates exactly what is displayed (team bans, map picks, decider map, chronological order), which makes it immediately distinguishable from sibling tools like cs2_team_map_stats or match_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 context is clearly a single CS2 match via matchId, but the description never states when to prefer this tool over siblings or when not to use it. Selection guidance is implied by the unique 'veto sequence' scope rather than explicitly provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_cardARead-onlyInspect
COMPOSITE event / fight-night card: identity, bout or match list, optional standings snippet.
When to use:
UFC fight night / numbered event page ("UFC 300 card", "Fight Night")
CS2 event hub with match list
Tournament/event overview before match_preview drill-down
Bouts come back in card order — main event first, then prelims, then early prelims. Each bout carries weightClass, titleBout, card placement, and (once fought) result { method, round, time, referee, winnerSlug }. Each corner carries images { headshotUrl, bodyImageUrl, imageUrl, proxiedImageUrl }, record, nickname, rank, championStatus, country and flag when upstream supplies them. Use proxiedImageUrl in browsers — the image host sends no CORS header. You do not need call_api per fighter for faces.
Prefer over: agent-side resolve + call_api /ufc/events + bout expansion; N+1 match_summary for the card list only; per-fighter call_api just to fetch headshots.
Prefer match_preview for one bout/match briefing; match_summary for completed recaps; live_matches for live-only strips; standings alone for pure tables.
Do not use when: you only need live scores (live_matches); single finished match recap (match_summary); no event name/id yet and game unknown.
Tennis: pass a tournament id/slug to get the draw bracket — rounds carry a round code (Q1..R128, QF, SF, F) with each match's players and score. Set is the primary tennis path here; there is no separate draw tool.
Parallel-safe: yes. Upstream cost: 1–4. Example: { "game": "ufc", "eventIdOrSlug": "ufc-300", "includeMatches": true, "includeStandings": false }
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text event name when id/slug unknown. Example: "UFC 300". Resolves within this tool — still prefer resolve_entity when disambiguating many hits. | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Max bouts/matches on the card (default 20, max 50). For a tennis draw this bounds the flat `bouts` list; the bracket in `draw.rounds` is returned whole by default, because a truncated bracket is not a bracket. Use drawMaxMatches to bound it. | |
| eventIdOrSlug | No | Event or tournament id/slug. Prefer over q when known. Required unless q is given. Example: "ufc-300". | |
| drawMaxMatches | No | Tennis only. Cap the total matches carried in draw.rounds. The round list is filled from the business end backwards (Final, SF, QF, …) so a small cap keeps the decisive rounds and drops the early ones; draw.truncated and draw.omitted report what happened. Omit for the complete bracket. | |
| includeMatches | No | Include the bout/match list, or the tennis draw bracket (default true). | |
| includeStandings | No | Include standings/rankings snippet when API supports event/tournament/division scope (default false). For UFC this also joins divisional rank and movement onto each bout corner as team.rank / team.rankMovement — bout rows themselves carry no rank. Costs one extra upstream call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already mark readOnlyHint=true and destructiveHint=false, the description goes far beyond by disclosing card ordering (main event first), bout and corner fields, the CORS limitation and recommendation to use proxiedImageUrl, no need for per-fighter call_api, tennis bracket truncation behavior, parallel-safety, and upstream cost. 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 long but tightly organized with bolded section labels and front-loaded purpose. Every sentence either explains when to use it, what behavior to expect, or what to prefer instead. There is no filler or repetition; the density is justified by the tool's breadth across multiple games and tennis special cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, multiple game-specific behaviors, and a tennis special path, the description is complete: it covers route selection, data shapes, alternatives, exclusions, parallel-safety, cost, and an example call. Since an output schema exists, the description appropriately focuses on decision-relevant behavior rather than restating return types.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description adds meaningful depth to every parameter: q resolves internally, eventIdOrSlug is preferred over q, limit bounds bouts and tennis draws, drawMaxMatches fills rounds from the final backwards and reports truncation, includeMatches includes the draw, and includeStandings triggers an extra call plus rank enrichment. This goes well beyond the schema's raw 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 a specific composite pattern ('COMPOSITE event / fight-night card: identity, bout or match list, optional standings snippet') and immediately lists concrete event types (UFC, CS2, tournament/event overview). It explicitly distinguishes itself from match_preview, match_summary, live_matches, and standings, so an agent can select it with confidence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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', 'Prefer over', 'Prefer X for Y', and 'Do not use when' sections, naming exact sibling tools and conditions. This leaves no ambiguity about when event_card is the right tool versus alternatives like match_preview or live_matches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
h2h_matrixARead-onlyInspect
Multi-player tennis head-to-head grid: every pair's series record in one comparison matrix.
When to use:
Draw/field analysis: how each contender fares against every other (e.g. Alcaraz vs Zverev vs Sinner round-robin records)
Group-stage or semifinal-field comparisons
Prefer over: N head_to_head calls for an N-player field; raw matrix via call_api.
Do not use when: a two-player rivalry deep-dive with tiebreak/decider splits → head_to_head; season stat leaders → leaderboard_*; rankings → standings.
Tennis-only. players takes 2-16 ids or names (names resolve via player search). Each matrix cell is "W-L" from the row player's perspective, "-" on the diagonal.
Parallel-safe: yes. Upstream cost: 1 + one search per unresolved name.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| players | Yes | 2-16 tennis player ids (atp_207989) or names ("Carlos Alcaraz"); duplicates collapse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior, and the description adds meaningful details: parallel-safety, upstream cost formula, name resolution via player search, cell orientation as W-L from the row player's perspective, and '-' on the diagonal. 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?
Well-structured into purpose, usage, exclusions, and behavior sections with no filler. Every sentence carries routing, semantics, or cost information, and the most important scope constraint appears early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with an output schema, this is complete: it covers player limits, input forms, cell semantics, routing to alternatives, and upstream cost. Return-value details are covered by the output schema, so the description does not need to repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple 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 explicitly restricting the tool to tennis despite the multi-game enum and by clarifying that names resolve via player search. The only wrinkle is the schema's game enum/examples implying other games, but the explicit 'Tennis-only' statement compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 object: a multi-player tennis head-to-head grid showing each pair's series record. It names the adjacent sibling head_to_head and positions itself as the matrix form for N-player fields, so an agent can immediately distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool (draw/field analysis, group-stage/semifinal comparisons), what to prefer it over (N head_to_head calls or raw call_api), and when not to use it (two-player deep-dive → head_to_head, stat leaders → leaderboard_*, rankings → standings). This is complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
head_to_headARead-onlyInspect
Composed head-to-head record between two teams, two UFC fighters, or two tennis players. No first-class REST H2H exists — this tool filters match history server-side.
When to use:
Rivalry / series record questions
Supporting context for previews
Prefer over: agent-side double match-list filtering.
Do not use when: single-side form only → team_profile or player_profile.
Caveat: Dota filters are weaker; expect meta.warnings when data is sparse.
Parallel-safe: yes. Upstream cost: 2–4. Example: { "game": "cs2", "sideA": "faze", "sideB": "navi", "limit": 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO-8601 upper bound on meeting startTime (client filter). | |
| from | No | ISO-8601 lower bound on meeting startTime (client filter). | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Max meetings returned. | |
| sideA | Yes | Id or slug for side A. | |
| sideB | Yes | Id or slug for side B. | |
| entityType | No | team (default), fighter (UFC), or player (tennis). | team |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior; the description adds meaningful context: server-side filtering instead of a native endpoint, weaker Dota filters with meta.warnings, parallel-safety, and upstream cost. These go beyond the structured annotations and inform 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 well-structured with front-loaded purpose, clear usage sections, a caveat, and an example. Every sentence adds value, and the length is justified given the number of parameters, siblings, and the need to disambiguate from related tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, annotations, output schema, and explicit routing to sibling tools, the description covers all essential context an agent needs. It includes limitations, parallel-safety, cost, and a concrete invocation example, so no critical operational gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple 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. The description's example clarifies expected slug-style values but adds no new 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 clearly states the resource: a composed head-to-head record between two teams, UFC fighters, or tennis players. It also differentiates itself by noting that no first-class REST H2H exists and by explicitly routing single-side questions to team_profile or player_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 scenarios, a 'prefer over' instruction, and a direct 'do not use when' rule with named sibling alternatives. This leaves little ambiguity about when an agent should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_acesARead-onlyInspect
Tennis season aces leaderboard: most aces served in a season, from real match-stats aggregates.
When to use:
Who leads the tour in aces this season; season serving-leader tables.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Rows carry aces + matches played, ordered most aces first.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and non-destructive behavior. The description adds useful behavioral context beyond that: data is from 'real match-stats aggregates,' rows contain aces and matches played, results are ordered most aces first, and the tool is 'Parallel-safe: yes. Upstream cost: 1.' This goes beyond what the annotations alone convey, though it does not address potential staleness or result shape details, which the output schema covers.
Agents need to know what a tool does to the world before calling 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 ('When to use', 'Prefer over', 'Do not use when') and compact sentences. Every line carries information: scope, defaults, exclusions, parallel-safety, and cost. 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?
Given the output schema exists, the description does not need to repeat return structure. It covers the tool's purpose, use cases, exclusions, defaults, ordering behavior, and execution safety. Nothing relevant to selecting or 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?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter guidance by clarifying that season defaults to 2026 and tour (ATP|WTA) is optional, explicitly instructing to omit it for the combined board. It also reinforces that division is a synonym for tour, matching the standings tool spelling, which helps disambiguate the two interchangeable 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 opens with a precise statement: 'Tennis season aces leaderboard: most aces served in a season, from real match-stats aggregates.' This names the resource (season aces leaderboard), the metric (aces served), and the domain (tennis), making the tool's purpose unambiguous and distinct from sibling leaderboard tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Who leads the tour in aces this season'), a preferred alternative ('Prefer over: raw leaderboard via call_api'), and clear exclusions with named alternatives: standings for ranking position, rankings_movers for week-over-week movement, and player_form for recent form. It also states 'Tennis-only' and explains optional tour behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_break_conversionARead-onlyInspect
Tennis season break-conversion leaderboard: Share of break opportunities converted per player, from real match-stats aggregates read return-side, ordered highest pct first.
When to use:
Share of break opportunities converted per player, from real match-stats aggregates read return-side, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players with at least 50 break opportunities qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint, openWorldHint, and destructiveHint. The description adds useful context: 'Parallel-safe: yes', 'Upstream cost: 1', an eligibility threshold (50 break opportunities), and default season/tour behavior. The phrase 'read return-side' is ambiguous, and there is no mention of pagination or output size limits beyond schema defaults, so a 5 is not warranted.
Agents need to know what a tool does to the world 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 and sections are clearly labeled, but the main sentence is duplicated verbatim in the When-to-use section. Some phrasing like 'read return-side' is awkward and the bullet 'season tables; clutch/serve-efficiency leader queries' adds little. It could be tightened without losing 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?
Covers the eligibility threshold, tennis-only scope, optional tour, season default, and parallelism. The presence of an output schema relieves the need to document return values. Minor gaps remain: game selection guidance is left to the schema enum, and 'read return-side' is unclear. Overall, the definition provides 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 schema covers all 5 parameters at 100% with descriptions, examples, defaults, and an enum for game. The description adds the 'omit tour for the combined board' nuance and repeats the season default, but it does not materially expand on parameter meanings. 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?
States a specific metric (share of break opportunities converted) with a clear resource (tennis season leaderboard) and ordering (highest pct first). It is distinct from the sibling leaderboard_break_points_saved because it focuses on conversion rather than saves. The tennis-only scope and season default further pin down 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?
Explicit 'When to use' section lists use cases and a 'Do not use when' section names specific sibling tools (standings, rankings_movers, player_form) with conditions. It even suggests preferring this over call_api for agent-normalized rows. An agent needs no inference 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.
leaderboard_break_points_savedARead-onlyInspect
Tennis season break-points-saved leaderboard: Share of break points saved per player, from real match-stats aggregates, ordered highest pct first.
When to use:
Share of break points saved per player, from real match-stats aggregates, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players facing at least 50 break points qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive behavior; the description adds valuable context: only players facing at least 50 break points qualify, season defaults to 2026, omitting tour yields the combined board, and it is parallel-safe with upstream cost 1. 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?
Well organized with labeled sections, front-loaded key result, and minimal fluff. Slight deduction because the 'When to use' bullet repeats the opening definition almost verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return shape. It covers selection criteria, defaults, filtering threshold, parallel-safety, and routing to alternatives. Nothing essential is missing for 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?
Schema coverage is 100%, so the baseline is 3. The description adds genuine parameter meaning by restricting usage to tennis despite the schema's broader game enum and clarifying that omitting tour produces the combined board. Limit and season are already well documented 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?
States exactly what the tool returns: share of break points saved per player, from real match-stats aggregates, ordered highest percentage first. This clearly distinguishes it from siblings like leaderboard_break_conversion and leaderboard_aces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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', 'Prefer over', and 'Do not use when' sections with concrete alternative tools (standings, rankings_movers, player_form, call_api). An agent can confidently select or reject this tool without opening sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_comeback_winsARead-onlyInspect
Tennis season comeback-wins leaderboard: Share of matches won after losing the first set per player, from real first-set rows joined to completed matches, ordered highest pct first.
When to use:
Share of matches won after losing the first set per player, from real first-set rows joined to completed matches, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players with first-set data on at least 20 matches qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description discloses tennis-only scope, the 2026 default season, optional ATP/WTA tour behavior, the 20-match qualification threshold, parallel-safety, and upstream cost. This adds substantial behavioral context beyond what annotations alone would 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 definition is front-loaded and well-sectored, but the first sentence is repeated almost verbatim in the 'When to use' bullet, adding minor redundancy. Overall it remains appropriately sized 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 leaderboard tool with an output schema and 5 parameters, the description covers scope, defaults, routing, qualification criteria, and operational traits. Nothing critical is missing for an agent to select and 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%, so the baseline is 3. The description adds value by explaining cross-parameter behavior: tour is optional and omitting it yields the combined board, division is a synonym for tour, and the 20-match qualification threshold affects results. It does not deeply explain the game parameter, but the enum already bounds 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 a specific, unambiguous definition: 'Share of matches won after losing the first set per player, from real first-set rows joined to completed matches, ordered highest pct first.' This names the exact metric, source rows, and ordering, clearly distinguishing it from sibling leaderboard_* 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 provides 'When to use', 'Prefer over', and 'Do not use when' sections, naming concrete alternatives such as standings, rankings_movers, and player_form for different intents. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_deciding_set_recordARead-onlyInspect
Tennis season deciding-set-record leaderboard: Share of deciding sets (full-length final sets) won per player, from real match rows, ordered highest pct first.
When to use:
Share of deciding sets (full-length final sets) won per player, from real match rows, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players contesting at least 10 deciders qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, covering safety. The description adds genuine behavioral context beyond that: 'Tennis-only', season default, tour optionality for a combined board, a minimum 10-decider qualification, parallel-safe status, and upstream cost. This helps an agent reason about cost and data filtering beyond the basic read-only 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 the essential definition, then organized into clear usage blocks (When to use, Do not use, defaults). It is slightly bloated by repeating the same 'Share of deciding sets...' phrasing in both the opener and the 'When to use' bullet, but overall every section earns its place and guidance 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 read-only leaderboard tool with an output schema and strong annotations, the description covers all necessary context: game restriction, season default, tour behavior, minimum match qualification, throughput safety, and alternative tool routing. An agent has everything needed to correctly 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 description coverage is 100%, so the baseline is fair. The description doesn't add much beyond the schema: it repeats the season default and tour optional/combined-board behavior that already appear in parameter descriptions. The only extra is the minimum 10-decider threshold, which is not parameter-specific but a data filter. It doesn't materially de-risk parameter choice 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 a highly specific purpose: a tennis season leaderboard for share of deciding sets won, from real match rows, ordered by percentage. It distinguishes itself from sibling leaderboards like leaderboard_tiebreak_win_pct and leaderboard_break_points_saved by name and metric, so an agent can tell which leaderboard to pick without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 dedicated 'When to use' block, names an alternative ('raw leaderboard via call_api') and explicitly states 'Do not use when' with concrete alternative mappings (standings, rankings_movers, player_form). This is exactly the kind of when/when-not/exclusion guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_finals_recordARead-onlyInspect
Tennis season finals-record leaderboard: Share of finals won (titles clutch) per player, from real completed finals rows, ordered highest pct first.
When to use:
Share of finals won (titles clutch) per player, from real completed finals rows, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players contesting at least 3 finals qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/open-world/non-destructive behavior; the description adds meaningful extras beyond them: that only players contesting at least 3 finals qualify, that data comes from real completed finals rows, that it is parallel-safe, and that upstream cost is 1. 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 key metric is front-loaded, and the bulleted When/Prefer/Do-not-use structure is easy to parse. However, the first bullet under 'When to use' repeats almost verbatim the opening sentence, adding minor redundancy in an otherwise 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 schema coverage, output schema, and annotations, the description is complete enough for effective selection and invocation: it covers qualifying threshold, optional tour behavior, season default, ordering, parallel-safety, and routing. There is no missing information that would cause an agent to call this tool incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple 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 even without extra parameter detail in the description. The description restates a few defaults (season 2026, optional tour, omitted for combined board) that are already present in the schema, but it does not add meaningfully beyond the schema for 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 opening sentence names a specific resource ('finals-record leaderboard'), a specific metric ('share of finals won per player'), a data scope ('real completed finals rows'), and an ordering ('highest pct first'). This clearly distinguishes it from sibling leaderboard_* tools that focus on aces, tiebreak win percentage, or break conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 ('share of finals won... clutch/serve-efficiency leader queries'), when to prefer a different tool ('prefer over call_api'), and provides a 'Do not use when' section mapping concrete alternatives such as standings, rankings_movers, and player_form. This is unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_first_serve_wonARead-onlyInspect
Tennis season first-serve-won leaderboard: Share of first-serve points won per player, from real match-stats aggregates, ordered highest pct first.
When to use:
Share of first-serve points won per player, from real match-stats aggregates, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players with at least 300 first serves in qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds materially beyond the readOnly/openWorld/destructive annotations: it states data is from real match-stats aggregates, enforces a 300-first-serve qualification threshold, clarifies season default and tour-omission behavior, and declares parallel-safety and upstream cost. 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 definition is well-structured with clear labeled sections and front-loaded content. It loses a point because the opening line and the first 'When to use' bullet repeat the exact same sentence verbatim, adding unnecessary redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description still supplies the essential call-time context: defaults, optional parameter behavior, qualification threshold, and routing to sibling tools. Nothing an agent needs to decide whether and how to call 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?
Schema coverage is 100%, so the schema already documents all parameters. The description still adds value by clarifying the combined-board behavior when tour/division is omitted, the Tennis-only scope, and the 300-first-serve qualification floor tied to the underlying data, going 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 names a specific resource (tennis season first-serve-won leaderboard), the metric (share of first-serve points won per player), the data source (real match-stats aggregates), and the ordering (highest pct first). This clearly distinguishes it from the many other leaderboard_* 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 has an explicit 'When to use' section, a 'Prefer over' statement routing away from raw call_api, and a 'Do not use when' list with named alternatives (standings, rankings_movers, player_form). The agent receives concrete selection criteria with zero inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_return_games_wonARead-onlyInspect
Tennis season return-games-won leaderboard: Share of return games won per player (breaks over opponent service games played), from real match-stats aggregates read return-side, ordered highest pct first.
When to use:
Share of return games won per player (breaks over opponent service games played), from real match-stats aggregates read return-side, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players with at least 100 return games played qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only/non-destructive, and the description adds meaningful behavior: data comes from real match-stats aggregates, results are ordered, season defaults to 2026, players must have at least 100 return games played, and parallel-safety/upstream cost are disclosed. This goes well 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-sectioned and mostly efficient, but it repeats the near-identical opener inside the 'When to use' bullet, which wastes space. The phrase 'season tables; clutch/serve-efficiency leader queries' is also awkwardly terse and could confuse rather than guide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a leaderboard tool with a rich output schema, the description covers the metric, sort order, defaults, tour behavior, eligibility threshold, alternatives, and safety/cost characteristics. Nothing critical is missing for an agent to call it correctly; even the required game parameter is inferable from 'Tennis-only' and the tool name.
Complex tools with many parameters or behaviors need more documentation. Simple 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 restricting the tool to tennis despite the broad game enum, explaining that tour is optional and omitting it yields the combined board, and noting the minimum qualifying threshold. It does not need to restate defaults already present in the schema, but the game constraint is a useful clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and metric: a tennis return-games-won leaderboard measuring share of return games won (breaks over opponent service games played), sorted by highest percentage first. This precisely distinguishes it from sibling leaderboards and makes the tool's purpose 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 gives explicit when-to-use guidance ('season tables; clutch/serve-efficiency leader queries'), explicitly prefers this tool over raw call_api, and lists 'do not use when' cases with concrete sibling alternatives (standings, rankings_movers, player_form). An agent can select the correct tool with minimal inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_tiebreak_win_pctARead-onlyInspect
Tennis season tiebreak-win-pct leaderboard: Share of classic 7-point tiebreaks won per player, from real match-set aggregates, ordered highest pct first.
When to use:
Share of classic 7-point tiebreaks won per player, from real match-set aggregates, ordered highest pct first. season tables; clutch/serve-efficiency leader queries.
Prefer over: raw leaderboard via call_api for agent-normalized rows.
Do not use when: ranking position → standings with game tennis; week-over-week movement → rankings_movers; one player's recent form → player_form.
Tennis-only. Season defaults to 2026; tour (ATP|WTA) is optional — omit it for the combined board. Only players contesting at least 10 tiebreaks qualify.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; omit for the combined board. Synonym: division. | |
| limit | No | Max items to return (default 10, max 100). Example: 10. | |
| season | No | Season year (YYYY). Default 2026. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses that it is parallel-safe and the upstream cost is 1. It also adds specifics like the minimum 10 tiebreaks to qualify and the default season (2026). These are useful context not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by usage conditions, exclusions, and constraints. Every sentence adds value: the do-not-use section preempts misrouting, and the qualification rule is 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 that the tool has an output schema (not shown) and annotations covering safety, the description is nearly complete. It covers usage, exclusions, defaults, and a qualification rule. Minor gap: it does not specify the return format or pagination beyond 'limit', but with an output schema, that 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?
The schema has 100% coverage, so the baseline is 3. The description adds key semantics: the 'tour' parameter is optional and maps to the combined board when omitted, and the 'division' parameter is a synonym for tour, clarifying its usage. It also confirms 'game' is tennis-only, which is not fully explicit in the enum 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 computes the share of classic 7-point tiebreaks won per player for tennis, ordered by highest percentage. It includes a specific verb ('share'), resource ('tiebreak-win-pct leaderboard'), and scope, with an example output context. It also mentions real match-set aggregatesaving for 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 explicitly lists when to use (clutch/serve-efficiency leader queries), what to prefer over (raw leaderboard via call_api), and do-not-use cases for related rankings (standings with game tennis, rankings_movers, player_form). It also specifies tennis-only and the season/tour defaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesARead-onlyInspect
Curated catalog of cito-mcp tools, games, jobs, and builder recipes.
When to use:
Session start or "what can you do?"
Mapping app screens to tools
Filtering by game or job (live_board, match_page, team_page, player_form, standings, h2h, schedule, preview, event_card, app_scaffold)
Prefer over: guessing from memory; exploring raw OpenAPI via call_api.
Do not use when: you already know the tool and have IDs — call that tool directly.
Parallel-safe: yes. Upstream cost: 0. Example: { "game": "cs2", "job": "live_board", "includeExamples": true }
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text filter over tool names and outcomes. | |
| job | No | Filter by agent/builder job. Example: "team_page". | |
| game | No | Filter catalog to one primary game; omit for all. | |
| includeRecipes | No | Include multi-step recipes. | |
| includeExamples | No | Include exampleArgs on each tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, openWorldHint, and destructiveHint. The description adds useful behavioral context: the result is a curated catalog (not a raw API dump), it is parallel-safe, and it has zero upstream cost. 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 scannable and front-loads the purpose. Every section earns its place: use cases, exclusions, parallel-safety, upstream cost, and a concrete example. 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?
The description fully covers when to use, when not to use, safety behavior, upstream cost, and gives an example call. With an output schema present, the agent has everything it needs to decide whether and how to 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?
The input schema has 100% coverage with descriptions for each parameter, so the baseline is 3. The description adds an example payload and a shorthand list of job filters, which clarifies how to combine game/job/includeExamples in practice.
Input schemas describe structure but not intent. Descriptions should explain non-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 defines the resource: the curated catalog of cito-mcp tools, games, jobs, and builder recipes. It is clearly distinct from data-lookup siblings like live_matches or match_details, and it explicitly contrasts itself with call_api for discovery 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', 'Prefer over', and 'Do not use when' sections. This gives an agent concrete routing rules, including the exclusion case where direct tool calls should win.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routesARead-onlyInspect
Index of raw REST routes from the live OpenAPI spec: method, path, summary, tag.
When to use:
You need a long-tail path for call_api and do not want to guess
Checking whether an endpoint exists before building around it
Mapping what raw data backs a curated tool
Prefer curated tools for standard jobs — this indexes the escape hatch, it is not a replacement for list_capabilities.
Do not use when: a curated tool already covers the outcome (call list_capabilities instead).
Note: the spec omits /lol entirely, though LoL routes work. Filtering by game=lol returns that caveat rather than an empty list.
Parallel-safe: yes. Upstream cost: 1. Example: { "game": "ufc", "q": "rankings" }
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text filter over path and summary. | |
| game | No | Filter to one game prefix (also accepts fortnite). Omit for all routes. | |
| limit | No | Max routes to return (default 60, max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true and destructiveHint=false; the description adds a meaningful caveat about the /lol spec omission and that filtering by game=lol returns a caveat rather than an empty list. It also states 'Parallel-safe: yes. Upstream cost: 1.' 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?
Front-loaded with a one-line purpose, then compact sections for when-to-use, caveats, and example. Every sentence carries useful signal and 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 an output schema present and annotations covering safety, the description supplies usage boundaries, a known edge case, operational semantics (parallel-safe, upstream cost), and an example. Nothing essential for calling 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?
Schema coverage is 100%, so baseline is 3. The description adds a concrete example combining game and q, and warns about game=lol's special behavior, giving the agent more than the raw 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?
States a specific verb and resource: 'Index of raw REST routes from the live OpenAPI spec: method, path, summary, tag.' It also differentiates from list_capabilities by calling it 'the escape hatch' and clarifying it is 'not a replacement for list_capabilities', so an agent can distinguish it 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?
Provides an explicit 'When to use' list covering concrete needs (long-tail path for call_api, checking endpoint existence, mapping raw data) and a 'Do not use when' clause directing to list_capabilities when a curated tool covers the outcome. The alternative is named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_matchesARead-onlyInspect
Live matches board across primary games, or a single game filter. Normalized labels, scores, and matchIds.
When to use:
"What's live right now?"
Ops/dashboard live strip
Prefer over: sequential per-game call_api live probes.
Do not use when: user wants upcoming fixtures → upcoming_schedule; historical results → match_summary.
CS2 live path is /cs2/live; UFC is included in multi-game fan-out. UFC empty board: section.note + emptyReason + health (workerAlive/lag) + optional supervisor/nextCard (non-live); never fake match items from events[].
Parallel-safe: yes. Upstream cost: 1–5 (allSettled). Example: { "game": "all", "limitPerGame": 10 }
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Single game or all. Omit for all primary games. Example: "lol". | |
| limitPerGame | No | Max matches kept per game (default 10, max 25). | |
| includeLabelsOnly | No | Token-light mode: shorter item payloads (label + matchId + status). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, the description discloses important behavioral details: parallel-safety, upstream cost range, CS2 live path, UFC empty-board handling including health fields and a warning never to fabricate match items from events[]. This is exactly the kind of operational nuance an agent 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 well-structured with clear sections: a one-line purpose, when-to-use, when-not-to-use, per-game edge cases, and performance notes. It is front-loaded with the core behavior and every section earns its place 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?
For a read-only live-matches tool with 3 optional parameters and rich annotations, the description is complete: it covers alternatives, edge cases (UFC empty board), performance characteristics, and example usage. The presence of an output schema means return-value documentation is not required here, 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 input schema already covers all parameters fully (100% schema description coverage), so the baseline is 3. The description adds value with a concrete usage example ({ "game": "all", "limitPerGame": 10 }), clarifies the single-game filter concept, and reinforces batching behavior via limitPerGame, slightly exceeding 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 states the tool provides a live matches board across primary games or a filtered single game, with normalized labels, scores, and matchIds. It explicitly distinguishes itself from upcoming_schedule, match_summary, and per-game call_api probes, so an agent can clearly understand what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 scenarios ('What's live right now?', ops/dashboard live strip), names a preferred alternative path (avoid sequential call_api probes), and provides do-not-use guidance with direct sibling alternatives (upcoming_schedule, match_summary). This leaves minimal ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_detailsARead-onlyInspect
Deep match package: optional timelines, advanced stats, live state/snapshots, full map/game tree, media inventory.
When to use:
Analyst deep dive
Live in-game window (LoL/CS2/UFC)
Full demo list
Prefer over match_summary only when summary is insufficient. Prefer match_summary for short answers and default cards.
Do not use when: first-pass live board (use live_matches + match_summary).
Section selection: pass includeTimeline / includeLiveState / includeAdvanced booleans, OR an explicit sections[] list. UFC betting lines: sections:["odds"] (opt-in, never in the default set). If sections[] is non-empty it wins (booleans are ignored). LoL liveState/advanced require gameId.
Parallel-safe: yes. Upstream cost: 1–8 (section-gated). Example: { "game": "lol", "matchId": "lol-match-1", "includeTimeline": true, "includeLiveState": false }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| gameId | No | LoL per-game live window target when distinct from matchId. | |
| matchId | Yes | Game-native match id (UFC boutId). | |
| sections | No | Explicit section list; defaults to base+playerStats+gamesOrMaps+media. "odds" is opt-in: UFC returns moneyline summarised per fighter with bookmaker count, best and median American price and implied probability plus a count of every other market (closing lines for a finished fight come back with currentlyOffered=false rather than being omitted). Tennis odds were withdrawn alongside the /tennis/odds/* routes, so for any other game the section reports NOT_IMPLEMENTED. Odds exist for UFC only. | |
| includeAdvanced | No | Include advanced packages when available (LoL). | |
| includeTimeline | No | Include timeline section (heavy). | |
| includeLiveState | No | Include live state/snapshots. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, openWorld, non-destructive), and the description adds genuinely new behavioral context: parallel-safety, a section-gated upstream cost of 1–8, precedence rules for sections[] vs booleans, the LoL gameId precondition, and odds-specific caveats (closing lines returning currentlyOffered=false, NOT_IMPLEMENTED for non-UFC). This is well beyond what structured fields 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?
Front-loaded with the one-line purpose, then bulleted when/when-not, section mechanics, and a concrete example call. Dense with no filler; the only mild redundancy is the paired match_summary preference lines, which earn their place as a routing rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, multi-section tool with an existing output schema, the description supplies everything an agent needs: purpose, alternatives, section-selection mechanics, precedence, per-game constraints, cost, and an example invocation. Return-value explanation is correctly omitted given the 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 already 100%, but the description adds precedence semantics absent from the schema — a non-empty sections[] overrides the booleans — plus the per-game conditional requirement that LoL liveState/advanced need gameId. It clarifies parameter interaction rather than restating field 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 first line names a specific verb-and-resource (deep match package) and enumerates its contents (timelines, advanced stats, live state/snapshots, map/game tree, media inventory). It explicitly frames itself relative to the sibling match_summary, so an agent can distinguish the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 scenarios (analyst deep dive, live in-game window, full demo list), explicit when-not (first-pass live board → live_matches + match_summary), and names the preferred alternative for short answers. Routing decision is fully determined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_previewARead-onlyInspect
COMPOSITE pre-match briefing: sides, roster/form snippets, H2H stub, event context — for pick'ems, articles, and match-page before state.
When to use:
Upcoming match deep link
"Who should I watch before this game?"
App scaffold for preview cards
Prefer over: manually chaining team_profile ×2 + head_to_head + schedule. Prefer match_summary when match is completed; match_details for live in-game.
Do not use when: user wants final score/recap of a finished match.
Parallel-safe: yes. Upstream cost: 4–8. Tennis H2H accepts an optional surface filter (Hard, Clay, Grass). Example: { "game": "lol", "teamA": "t1", "teamB": "gen-g", "includeH2H": true, "recentLimit": 5 }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| teamA | No | Id/slug; UFC fighter slug when applicable. | |
| teamB | No | Id/slug for side B. | |
| eventId | No | Optional event context (UFC). | |
| matchId | No | Pass matchId OR (teamA + teamB). | |
| surface | No | Optional tennis H2H surface filter: Hard, Clay, or Grass. Ignored for other games. | |
| includeH2H | No | Include composed H2H stub. | |
| recentLimit | No | Form window per side (default 5, max 15). | |
| includeRosters | No | Include roster snippets when available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds 'Parallel-safe: yes' and 'Upstream cost: 4–8', which are behavioral traits not in annotations. It also notes the optional surface filter is ignored for non-tennis games, matching the schema, 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 clear sections: an opening definition, explicit 'When to use' and 'Do not use' lists, a 'Prefer over' statement, and behavioral notes. Every line adds distinct value, and the key information is front-loaded. Space is used efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (9 params, output schema present) and rich annotations/schema, the description covers all necessary aspects: when to use, what it returns, key parameter relationships, and alternatives. The output schema presumably handles return details, 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?
Schema coverage is 100%, so the schema already documents all 9 parameters, but the description adds valuable semantic context: the composite behavior, the matchId OR (teamA+teamB) relationship, the tennis-specific surface filter, and the parallel-safe/cost context. The example JSON also demonstrates the intended parameter usage, which 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 clearly states the composite pre-match briefing purpose, lists the content components (sides, roster/form snippets, H2H stub, event context), and explicitly names the intended use cases (pick'ems, articles, match-page). It distinguishes from siblings like match_summary and match_details by specifying when those are preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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' and 'Do not use when' conditions with concrete examples like deep links and 'Who should I watch'. It names alternatives (match_summary, match_details) and when to prefer each, plus warns against chaining multiple tools manually, making the routing decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_summaryARead-onlyInspect
COMPOSITE match card: scoreline, key context, player performances, and VOD/demo links when available.
When to use:
Match recap / default match UI
After user selects a live or completed matchId
Prefer over match_details for chat answers and default UIs. Prefer match_details for timelines, full map trees, live state, advanced packages.
Do not use when: no matchId yet (resolve from live/schedule); pure pre-match → match_preview.
Parallel-safe: yes. Upstream cost: 2–5. Example: { "game": "cs2", "matchId": "cs2-match-123", "view": "summary", "includePlayerStats": true }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| view | No | Payload weight. Default summary. | summary |
| matchId | Yes | Game-native match id (UFC: boutId). Example: "cs2-match-123". | |
| includeMedia | No | Include demos/VODs when the API provides them. | |
| includePlayerStats | No | Include player performances when available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, and the description adds non-obvious behavior: 'Parallel-safe: yes', 'Upstream cost: 2–5', and data availability caveats like 'when available'. This goes beyond the annotations, though it does not detail error cases or rate limiting.
Agents need to know what a tool does to the world before calling 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, bulleted usage guidance, routing notes, negative cases, and a compact example. Every section 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?
Given the rich input schema, existing output schema, read-only annotations, and clear sibling differentiation, the description covers what an agent needs to call the tool correctly. It also includes parallel-safety and upstream cost context, making it complete 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 coverage is 100%, so the schema fully documents all five parameters. The description adds a concrete usage example and links concepts like 'player performances' and 'VOD/demo links' to the relevant parameters, but it does not add substantial meaning 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 description uses a specific opening phrase, 'COMPOSITE match card', and enumerates the delivered content: scoreline, key context, player performances, and VOD/demo links. It explicitly distinguishes this tool from match_details and match_preview, so an agent can easily tell what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 dedicated 'When to use' section, explicit routing guidance ('Prefer over match_details'), and clear negative cases such as 'no matchId yet' and 'pure pre-match → match_preview'. This leaves no ambiguity about when to call this tool versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_formARead-onlyInspect
Tennis player form: W/L record over the last N completed matches, current win/loss streak, and per-match rows (opponent, score, surface). Optional surface filter (Hard/Clay/Grass).
When to use:
"How is X playing lately?"; current streak; surface-specific record (e.g. clay last 5).
Prefer over: player_profile (identity + career aggregates, no streak); raw form via call_api for agent-normalized rows.
Do not use when: career totals/titles → player_profile with game tennis (wires /stats); ranking deltas → rankings_movers.
Tennis-only. Limit defaults to 10 (max 50, matching the API). Upstream rows arrive newest-first; the streak is the leading run of that order.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Recent-match window (default 10, max 50). | |
| surface | No | Filter to one surface: Hard, Clay, or Grass. | |
| playerId | Yes | Tennis player id, e.g. "atp_207989". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so safety is covered. The description adds valuable context: row ordering (newest-first), default limit matches API (10, max 50), parallel-safety, and upstream cost. This goes beyond annotations, though it could specify what output format includes, but output schema 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?
Well-structured with clear sections: description, when-to-use, do-not-use, and technical notes. Front-loaded with the core purpose, then usage guidance. Every sentence earns its place; 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 tool's moderate complexity (4 params), the presence of an output schema, and annotations covering read-only safety, the description is complete. It covers usage context, exclusions, ordering, limits, and parallel-safety, leaving no critical gaps 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 all parameters are documented. The description adds context for the surface filter (e.g., clay last 5) and confirms limit semantics, but does not add significant new meaning 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 a specific verb and resource ('Tennis player form: W/L record over the last N completed matches, current win/loss streak, and per-match rows'), distinguishing from siblings like player_profile by naming the unique output (streak, surface-specific). The purpose is clear 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?
Provides explicit when-to-use examples ('How is X playing lately?'), prefers this tool over player_profile for streak queries, and explicitly states when NOT to use it (career totals, ranking deltas). Names alternatives (player_profile, rankings_movers) and conditions for switching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_matchesARead-onlyInspect
Tennis player match log: every archived match for one player, newest first, with opponent, tournament, round, surface and score.
When to use:
"Show me Shelton's last 20 matches"; full match history; every match at a given tournament; filtering a player's record by surface.
Prefer over: player_form (a W/L summary with a small window and a streak, not the log); call_api for /tennis/players/{id}/matches.
Do not use when: aggregate totals, titles, or win% → player_stats; identity → player_profile; one match's box score → match_details.
Tennis-only. Limit defaults to 20 (max 50). Rows arrive newest-first. Use surface to narrow to Hard/Clay/Grass; tournamentId pins one event.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Match rows (default 20, max 50). | |
| surface | No | Filter to one surface: Hard, Clay, or Grass. | |
| playerId | Yes | Tennis player id, e.g. "atp_210097". | |
| tournamentId | No | Only matches at this tournament edition, e.g. "atp_2026_560". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/destructiveHint=false, so safety is covered. The description adds genuinely non-structured traits: rows arrive newest-first, tennis-only scope, parallel-safe, and upstream cost of 1. It does not add much beyond the schema on limit/ordering, which is why it stops short of 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?
Front-loaded with the core statement, then cleanly grouped into when-to-use / prefer-over / do-not-use blocks. Minor waste: newest-first and the limit default/max are stated twice (opening sentence plus 'Limit defaults to 20 (max 50)', both echoed 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?
An output schema exists, so return shape needn't be explained. Given 5 params at full coverage plus annotations, the description covers routing, scope, ordering, limits and cost – 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?
Schema description coverage is 100%, so the baseline is 3. The description restates surface values (Hard/Clay/Grass) and 'tournamentId pins one event', which largely duplicates existing schema descriptions rather than adding format, id-resolution or edge-case 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?
States a specific verb+resource ('match log: every archived match for one player') and immediately scopes it (newest first, opponent/tournament/round/surface/score). Sibling names player_form and call_api are contrasted directly, so an agent can discriminate without opening either 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?
Explicitly provides when-to-use examples ('Show me Shelton's last 20 matches', tournament history, surface filtering), a 'Prefer over' routing rule against player_form and call_api, and a 'Do not use when' list routing aggregate/identity/box-score needs to player_stats, player_profile and match_details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_profileARead-onlyInspect
Player or UFC fighter profile: identity, current team, recent matches, and form/trends/radar when available.
When to use:
"How is X playing lately?"
Player page scaffold; form inputs for previews
Prefer over: manual multi-call career/trends/matches via call_api.
Do not use when: full team roster needed → team_profile; unresolved name → resolve_entity first.
Parallel-safe: yes. Upstream cost: 2–5. Example: { "game": "cs2", "playerId": "cs2-player-1", "recentLimit": 10, "includeTrends": true }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| role | No | Dota radar role filter. | |
| slug | No | UFC fighter slug; also accepted where game allows idOrSlug. | |
| view | No | Payload weight. Default summary. | summary |
| window | No | Form/radar window (e.g. Dota radar). | |
| playerId | No | Pass exactly one of playerId or slug. Example: "cs2-player-1". | |
| recentLimit | No | Recent matches window (default 10, max 25). | |
| includeTrends | No | Include trends/radar/career enrichment when available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and non-destructive behavior. The description adds useful context beyond that: data may be unavailable ('when available'), parallel safety is guaranteed, and upstream cost is 2–5. This 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 well-structured: core purpose first, then compact labeled sections for usage, exclusions, operational notes, and an example. No sentence is wasted, and the example is concise while illustrating key 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?
Given the output schema exists, return-value details are not needed. The description covers purpose, usage, alternatives, exclusions, parallel safety, cost, and a representative call, making it complete for this 8-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 every parameter is already documented. The description adds a concrete example JSON but doesn't materially enrich parameter 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 clearly identifies the resource as a player or UFC fighter profile and enumerates the content: identity, current team, recent matches, and form/trends/radar. It also distinguishes itself from related sibling tools like team_profile and resolve_entity, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 examples, a 'Prefer over' note for call_api, and a 'Do not use when' section naming team_profile and resolve_entity. This gives an agent complete routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_rankings_historyARead-onlyInspect
Tennis player ranking trajectory: every published ranking date for one player, plus career-high and weeks at No.1.
When to use:
"Show Alcaraz's ranking over time"; career-high rank and when it was reached; how a player climbed; plotting a rank chart.
Prefer over: standings (latest snapshot only); rankings_movers (week-over-week delta for a whole tour); player_profile (has career-high but no per-date series).
Do not use when: the current top-N table → standings with game tennis.
Tennis-only. Rows arrive oldest-first (chronological), which is the order a chart wants; the newest entries are the tail. limit keeps the most RECENT N rows (the route itself ignores ?limit=, so the bound is applied here) — hasMore and oldestReturned/newestReturned say exactly which window came back, and omittedOlder counts the rows left behind at the old end.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Max history rows (default 20, max 500). | |
| since | No | Only rows on or after this date (YYYY-MM-DD). | |
| playerId | Yes | Tennis player id, e.g. "atp_207989" or "wta_214544". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses real behavioral traits: tennis-only scope, chronological oldest-first ordering, the fact that the upstream route ignores ?limit= so the bound is applied locally, the window-metadata fields (hasMore, oldestReturned/newestReturned, omittedOlder), and parallel-safety/cost. None of this is derivable from 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?
Front-loaded one-line purpose followed by clearly labeled When/Prefer/Do-not-use blocks and a trailing operational note. Long but every sentence carries information an agent needs; nothing is redundant 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?
Despite an output schema existing, the description still explains the returned window semantics (hasMore, oldestReturned/newestReturned, omittedOlder) and ordering, plus cost and safety. For a 4-param read tool with a required enum and player id, nothing needed 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?
Schema coverage is 100%, so a baseline of 3 applies, but the description adds genuinely non-obvious semantics for limit: it keeps the most RECENT N rows even though rows are returned oldest-first, and the upstream route ignores ?limit=. That is meaning beyond the schema's 'Max history rows'. The game/since parameters get no extra description, keeping it from 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?
States a specific verb+resource: 'Tennis player ranking trajectory: every published ranking date for one player, plus career-high and weeks at No.1.' It also explicitly names the sibling tools it is not (standings, rankings_movers, player_profile), so an agent can disambiguate without opening any 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 explicit 'When to use' with concrete example phrasings, a 'Prefer over' clause naming three alternatives with the reason each is inferior, and a 'Do not use when' routing the current top-N case to standings. This is about as complete as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_statsARead-onlyInspect
Tennis player career statistics: W/L totals, win percentage, titles, Grand Slam and Masters titles, plus per-surface and per-level breakdowns. Optional surface/year filters.
When to use:
"How many titles does Alcaraz have?"; career win%; Grand Slam title count; record on clay; a season-scoped record.
Prefer over: player_profile (identity + a summary block, no breakdowns); player_matches (individual rows, no aggregates).
Do not use when: the match log → player_matches; ranking over time → player_rankings_history.
Tennis-only. Filters are surface (Hard/Clay/Grass/Carpet) and yearFrom/yearTo. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| yearTo | No | Inclusive end year, e.g. 2026. | |
| surface | No | Filter to one surface: Hard, Clay, Grass, or Carpet. | |
| playerId | Yes | Tennis player id, e.g. "atp_207989". | |
| yearFrom | No | Inclusive start year, e.g. 2020. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds value beyond that: it declares the tool is tennis-only (despite the game enum offering six titles), states the upstream cost of 1, and enumerates the valid filter values. It stops short of describing result shape or any rate/limit behavior, but the output schema covers 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?
Front-loaded with the resource and its outputs, then structured into clearly labeled use/prefer/avoid sections, with a compact trailing line for the tennis-only constraint and cost. Slightly verbose with repeated filter enumerations, but every block carries routing or constraint 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 aggregate tool with a full output schema and 100% parameter coverage, the description supplies everything an agent needs: what it returns, when to choose it, which siblings to prefer, the tennis-only scope, and the cost. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple 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 every parameter is already documented, including the surface enum and yearFrom/yearTo bounds. The description restates the same filter set (surface Hard/Clay/Grass/Carpet, yearFrom/yearTo) without adding format or semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (tennis player career statistics) and enumerates exactly what aggregates are returned: W/L, win%, titles, Grand Slam/Masters titles, per-surface and per-level breakdowns. It also explicitly names the sibling tools it is not (player_profile, player_matches), so an agent can distinguish it without opening another 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?
Contains explicit 'When to use' examples, a 'Prefer over' section naming player_profile and player_matches with the reason each differs, and a 'Do not use when' section routing the match log to player_matches and ranking-over-time to player_rankings_history. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rankings_moversARead-onlyInspect
Tennis ranking movers: biggest climbers/fallers between the latest ATP/WTA list and its predecessor, plus new entries and drop-outs.
When to use:
Who climbed or fell this week; new top-100 entrants; who dropped out.
Prefer over: standings (latest snapshot only, no week-over-week delta); raw movers via call_api for agent-normalized rows.
Do not use when: current top-N snapshot → standings with game tennis; player history → player_profile.
Tennis-only. Direction up (climbers, default), down (fallers), or both (largest absolute change). Date pins an older ranking list (YYYY-MM-DD); default is the latest, which the API resolves past zero-diff cloned lists.
The two lists are NOT always one week apart: previousDate is whatever the archive holds next, and the archive has holes. Read gapDays / comparisonWindow (and comparisonsAreWeekly) before describing a delta as weekly — a warning is raised whenever the gap exceeds ten days.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Ranking date to compare against its predecessor (YYYY-MM-DD). Default: latest. | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| tour | No | ATP or WTA tour; default ATP. Synonym: division. | |
| limit | No | Max items to return (default 20, max 500). Example: 20. | |
| within | No | Only players inside the top N on either list. | |
| division | No | Synonym for tour (ATP or WTA), matching the standings tool spelling. | |
| direction | No | up (climbers), down (fallers), or both (largest absolute change). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, openWorld), but the description adds unique operational context: parallel-safe, upstream cost of 1, the API's handling of zero-diff cloned lists, and the caveat that the two lists are not always one week apart with a warning above a ten-day gap. That is exactly the kind of behavioral detail annotations cannot 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?
Front-loaded one-line summary followed by labeled sections (When to use / Prefer over / Do not use when) and a short caveat block. Bullets and headers keep it scannable and every sentence carries routing or behavioral 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?
An output schema exists so return values need no explanation, annotations carry the safety profile, and the description covers routing, direction semantics, date resolution, and the week-gap pitfall. An agent has everything needed 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?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics beyond the schema: 'both' means largest absolute change, 'up' is the default, date pins an older list and the default latest resolves past zero-diff clones, and it cross-references division as the standings-tool spelling of tour. Only 'within' and gapDays/comparisonWindow output fields go unelaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'biggest climbers/fallers between the latest ATP/WTA list and its predecessor, plus new entries and drop-outs.' It explicitly names the siblings it is not (standings, call_api, player_profile), so an agent can distinguish it without opening any 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?
Gives explicit 'When to use', 'Prefer over' with the reason each alternative is worse (standings = snapshot with no delta; call_api = raw unnormalized rows), and 'Do not use when' routing to standings and player_profile. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_entityARead-onlyInspect
Natural-language / fuzzy query → best typed entity ID(s) + game (player, team, event, tournament, match, fighter).
When to use:
User named an entity without an ID ("T1", "s1mple", "IEM Cologne", "Islam Makhachev")
Need a canonical id/slug before profile or match tools
Prefer over search_entities when you want one best match (or small ranked set) to chain. Prefer search_entities when browsing many results with pagination.
Do not use when: you already have a stable id/slug from a prior tool.
Empty/ambiguous results still return ok:true with best=null or needsDisambiguation=true — pick from candidates or refine q/game/type. Does not emit AMBIGUOUS_ENTITY as a hard error.
Parallel-safe: yes. Upstream cost: 1–5. Example: { "q": "T1", "game": "lol", "type": "team", "limit": 5 }
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text (name or tag). Keep short. | |
| game | No | Strongly recommended. If omitted, fans out across primary games and ranks candidates. | |
| type | No | Entity type bias. Example: "team". | any |
| limit | No | Max ranked candidates (default 5, max 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint, openWorldHint, and destructiveHint, and the description adds substantial behavioral context: empty/ambiguous results still return ok:true with best=null or needsDisambiguation=true, no hard AMBIGUOUS_ENTITY error, parallel-safety, and upstream cost. This goes well 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 well-structured with a front-loaded summary, clear use-case sections, an example, and no filler. Every sentence contributes either scoping, alternative selection, edge-case behavior, or operational cost 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 fuzzy-resolution tool with output schema available, the description covers the full decision context: when to use, when not to use, how it differs from the closest sibling, behavior on ambiguous results, cost, parallelism, and an example. 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?
Input schema coverage is 100%, so the schema already fully documents q, game, type, and limit with enums, defaults, and examples. The description adds practical selection guidance ('small ranked set to chain', 'pick from candidates or refine q/game/type') and a concrete example call, which elevates it above the baseline without needing to compensate for schema 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 immediately defines the tool's specific purpose: 'Natural-language / fuzzy query → best typed entity ID(s) + game', listing entity types. It explicitly distinguishes itself from the sibling search_entities by describing when each should be used, so an agent can reliably tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 scenarios ('User named an entity without an ID', 'Need a canonical id/slug before profile or match tools'), a direct contrast with search_entities ('Prefer over search_entities when you want one best match... Prefer search_entities when browsing many results'), and a clear exclusion ('Do not use when you already have a stable id/slug').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesARead-onlyInspect
Browse/search teams, players, tournaments, events, fighters with type filter and pagination.
When to use:
Typeahead / pickers
"List teams matching…"
Exploring entities without committing to one ID
UFC fighter lookup by name/nickname (uses /ufc/search + client re-rank)
Prefer over resolve_entity when the user wants a list. Prefer resolve_entity when chaining one name into a profile tool.
Do not use when: fetching a known entity profile — use team_profile or player_profile.
UFC: with q set, results are ranked (exact name > multi-token match > nickname). "Jon Jones" should return jon-jones first — never the generic P4P list.
Parallel-safe: yes. Upstream cost: 1–3. Example: { "game": "ufc", "q": "Jon Jones", "type": "fighter", "limit": 10 }
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional search text. | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| type | No | Entity type filter. Example: "team". | any |
| limit | No | Max items to return (default 20, max 50). Example: 20. | |
| cursor | No | Opaque cursor from pagination.nextCursor only. | |
| activeOnly | No | Prefer active entities when the API supports it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false), the description discloses UFC-specific ranking behavior, client-side re-ranking, the guarantee that 'Jon Jones' returns jon-jones first, parallel-safety, and upstream cost. This gives the agent behavioral expectations 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 organized into clear sections — purpose, when to use, when not to use, special behavior, and an example. Despite its length, every section earns its place and no information is redundant 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 six parameters, multiple sibling tools, and an output schema that already documents return shape, the description covers all necessary context: use cases, exclusions, alternative selection, ranking behavior, parallel-safety, cost, and a representative call example. Nothing required for correct invocation 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%, so the baseline is 3. The description adds meaning by explaining the q parameter's ranking semantics for UFC, providing a concrete example object, and clarifying that type filters and pagination are core behaviors rather than just 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 a specific verb-resource pair: 'Browse/search teams, players, tournaments, events, fighters with type filter and pagination.' It then differentiates itself from resolve_entity, team_profile, and player_profile, so an agent can immediately tell what this tool is for and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and concrete: typeahead/pickers, list requests, entity exploration, and UFC fighter lookup. It also names the preferred alternative for the opposite case ('Prefer resolve_entity when chaining one name into a profile tool') and states a negative rule with the correct sibling tool to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
standingsARead-onlyInspect
League/event standings or world/division rankings normalized to ranked rows.
When to use:
Table / playoff picture
UFC rankings; CS2 world or event standings; CDL standings; LoL league/tournament tables
Prefer over: raw standings via call_api for agent-normalized rows.
Do not use when: single team form → team_profile; live scores → live_matches. Dota has no first-class standings (may NOT_IMPLEMENTED or weak worldRanking).
Required scope keys by game:
lol: leagueId OR tournamentId
cs2: omit for world rankings; eventId for event standings
cod: optional season/stage
ufc: optional division (scope=division)
tennis: optional division (ATP or WTA tour; default ATP)
dota2: best-effort worldRanking only
Parallel-safe: yes. Upstream cost: 1–2. Example: { "game": "cod", "season": "2026", "limit": 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| page | No | Tennis only: page over the full published ranking list. With limit=5 the ATP list is 30 pages (150 ranked players); the response reports total/rankedPlayers/totalPages/hasMore. | |
| limit | No | Max items to return (default 50, max 100). Example: 50. | |
| scope | No | Interpretation depends on game; defaults sensibly per game. | |
| stage | No | Stage key (COD / LoL). | |
| cursor | No | Opaque cursor from pagination.nextCursor. UFC world scope spans every division; page with it rather than raising limit. | |
| season | No | Season key (COD). | |
| eventId | No | CS2 event id for event standings. | |
| division | No | UFC division key. | |
| leagueId | No | LoL league id for league standings. | |
| tournamentId | No | LoL/COD tournament id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, destructiveHint=false, openWorldHint), but the description adds real behavioral context: parallel-safe flag, upstream cost of 1-2, the per-game scope-key requirement table, and the notable caveat that Dota may return NOT_IMPLEMENTED or a weak worldRanking. It does not discuss rate limits or error shapes, keeping it short of 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?
Front-loaded one-line definition followed by labeled bullet groups and a concrete example call; no sentence is filler, and the routing constraints (prefer/do-not-use) appear before the parameter detail so an agent can bail out early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every 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 11-parameter, multi-game tool with an output schema already documenting return shape, the description supplies everything else needed: game-specific scope rules, pagination strategy, cost/parallelism, and the known Dota limitation. 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?
Schema coverage is 100%, so the baseline would be 3, but the description meaningfully augments it by mapping each game to the scope keys it requires (lol needs leagueId or tournamentId, cs2 omits for world vs eventId for events, tennis defaults to ATP) and by prescribing cursor paging over raising limit for UFC world scope. That is genuine 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?
States a specific resource ('league/event standings or world/division rankings normalized to ranked rows') with a clear verb-like outcome, and enumerates the concrete domains it covers (UFC rankings, CS2 world/event, CDL, LoL tables). An agent can distinguish it from sibling leaderboards and rankings_movers without opening any 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?
Explicitly enumerates when to use, names the preferred alternative ('raw standings via call_api'), and gives two named do-not-use routes with their alternatives (team_profile for single team form, live_matches for live scores). This is a full routing decision tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_profileARead-onlyInspect
Team/org card: identity, roster, recent matches, and form/trends/radar when available.
When to use:
Team page / "who is on this roster?"
Builder team screen sample
Prefer over: separate roster + matches + detail via call_api.
Do not use when: UFC fighters → player_profile; unknown name → resolve_entity first. Dota may return partial roster (API gap). Prefer slug for lol/cod; teamId for cs2.
Parallel-safe: yes. Upstream cost: 2–4. Example: { "game": "lol", "slug": "t1", "recentLimit": 10 }
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc. Tennis has players, not team rosters — use player_profile. | |
| slug | No | Team/org slug. Prefer for lol and cod orgs. Pass teamId and/or slug (at least one required). Example: "t1". | |
| view | No | Payload weight. Default summary. | summary |
| teamId | No | Team id. Prefer for cs2. Pass teamId and/or slug (at least one required). Either works for dota2. | |
| recentLimit | No | Max items to return (default 10, max 25). Example: 10. | |
| includeFormer | No | COD roster former players. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and open-world annotations, the description discloses parallel-safety, upstream cost of 2–4, the Dota partial-roster API gap, and the fact that form/trends/radar are only returned 'when available.' 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?
Every line earns its place: concise summary, direct usage conditions, clear exclusions, known caveat, cost hint, and a concrete example. The structure front-loads the core purpose and then layers decision-relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, the description covers when to use, when not to use, parameter preferences, API limitations, cost, concurrency safety, and includes an example. Combined with the output schema and rich parameter descriptions, nothing critical 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?
Although schema coverage is already 100%, the description adds valuable selection guidance: prefer slug for lol/cod, teamId for cs2, and note that at least one of teamId/slug is required. The example payload further clarifies how parameters combine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 content list: 'Team/org card: identity, roster, recent matches, and form/trends/radar when available.' It also explicitly distinguishes itself from player_profile and call_api, so an agent can tell exactly what this tool covers relative to 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?
Provides explicit 'When to use' and 'Do not use when' sections, including routing to player_profile for UFC fighters and resolve_entity for unknown names. It also names call_api as an alternative to prefer this tool over, giving clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tennis_scheduleARead-onlyInspect
One day of tennis: the day's schedule and/or the matches completed that day, across ATP and WTA.
When to use:
"What tennis is on today?"; a specific day's fixtures; results completed on a given date; building a daily digest.
Prefer over: call_api for /tennis/schedule and /tennis/matches/completed (both require ?date=, which this tool supplies and validates); live_matches (in-progress only, right now); upcoming_schedule (a forward window, not a specific day).
Do not use when: matches currently in play → live_matches; a named player's history → player_matches.
Tennis-only. 'date' defaults to today (UTC) and MUST be YYYY-MM-DD. Choose with 'include': both (default), scheduled, or completed. Both halves are fetched in parallel, so either can fail on its own without losing the other.
'limit' bounds EACH half (the completed route ignores ?limit= upstream, so the bound is applied here); scheduledCount/completedCount report how many rows the day held and *Returned how many came back. The two halves overlap: the day's list includes matches already played, so the same matchId can appear in both — see the overlap block before de-duplicating or counting.
Parallel-safe: yes. Upstream cost: 1 or 2.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Day to fetch, YYYY-MM-DD. Defaults to today (UTC). | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| limit | No | Rows per half, applied here (default 20, max 50). scheduledCount/completedCount still report the full day. | |
| include | No | both (default) | scheduled | completed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations: discloses that the two halves are fetched in parallel and can fail independently, that 'limit' is enforced locally because the upstream completed route ignores ?limit=, and that the two halves overlap so the same matchId can appear twice. It also states parallel-safety and upstream cost (1 or 2 calls).
Agents need to know what a tool does to the 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 one-line summary followed by clearly labelled when-to-use / prefer-over / do-not-use sections and then behavioral notes. Dense but every clause carries operational information; slightly long, and the overlap warning could sit closer to the limit discussion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain returns, yet it still documents scheduledCount/completedCount semantics and the duplicate-matchId hazard, plus failure independence and cost. Nothing needed to call 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?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'date' MUST be YYYY-MM-DD and defaults to today (UTC), 'limit' bounds EACH half while counts still report the full day, and 'include' selects the halves. The only gap is that the required 'game' parameter is never named — 'Tennis-only' implies the value but does not say 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?
States a specific verb+resource+scope: 'One day of tennis: the day's schedule and/or the matches completed that day, across ATP and WTA.' An agent can immediately distinguish this from upcoming_schedule, live_matches, and player_matches without opening any 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?
Explicit 'When to use', 'Prefer over' naming call_api routes and the specific query-param reason (?date=), plus 'Do not use when' routing to live_matches and player_matches. Both the positive and negative conditions are enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tournamentsARead-onlyInspect
Tennis tournament catalog: find tournaments by year, tour, level, surface, or country.
When to use:
"Which ATP 500s are on clay in 2026?"; "list the WTA 1000 events"; "what Grand Slams are in 2026?"; finding a tournament id before calling event_card.
Prefer over: event_card when you do NOT already have a tournament id (event_card needs one); call_api for /tennis/tournaments.
Do not use when: the draw bracket or a specific edition → event_card with the id this returns; the season calendar by month → event_card.
Tennis-only. Levels accept names (Grand Slam, WTA 1000, ATP 500, Challenger, ITF World Tennis Tour, Davis Cup, ...) or raw tier codes (G, M, A, C, D). A level name that starts with ATP or WTA also fixes the tour (and conflicts with a contradicting tour= argument are rejected), so "WTA 1000" cannot return ATP Masters events even though the upstream filter is not tour-aware. Note the source does not separate ATP 500 from ATP 250 — both are ATP Tour.
Parallel-safe: yes. Upstream cost: 1.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Case-insensitive name search, e.g. "open". | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| page | No | Page number (1-indexed). | |
| tour | No | ATP or WTA. | |
| year | No | Edition year, e.g. 2026. Omit for all years. | |
| level | No | Filter by level. Names: Grand Slam, Masters 1000, ATP Tour, ATP 500, ATP 250, WTA 1000, ... or codes G|M|A|C|D. | |
| limit | No | Max items to return (default 20, max 50). Example: 20. | |
| surface | No | Hard, Clay, Grass, or Carpet. | |
| countryCode | No | 3-letter IOC country code, e.g. FRA. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/non-destructive/open-world annotations, the description discloses non-obvious behaviors: a level name starting with ATP/WTA fixes the tour and contradicting tour= arguments are rejected, and the source cannot separate ATP 500 from ATP 250. It also reports parallel-safety and upstream cost, which no annotation conveys.
Agents need to know what a tool does to the 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 the one-line purpose followed by clearly labeled When-to-use, Prefer-over, and Do-not-use sections, so it is scannable. Slightly longer than necessary, with the level examples repeated ("WTA 1000" appears in both the usage and semantics blocks).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema already documents the return shape and annotations cover the safety profile, so the description is free to focus on selection guidance, which it does thoroughly, including domain caveats an agent could not infer 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%, so the structured fields are already documented and baseline is 3. The description earns above baseline by explaining semantics the schema does not: that level accepts names or raw tier codes (G/M/A/C/D), and the level/tour interaction rule that would otherwise be invisible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Tennis tournament catalog: find tournaments") plus the exact filterable dimensions, and explicitly distinguishes itself from siblings event_card and call_api. An agent can tell instantly what this returns versus the bracket/edition 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?
Gives concrete when-to-use example queries, names the alternatives (event_card, call_api) with the condition that selects them ("when you do NOT already have a tournament id"), and adds an explicit do-not-use section redirecting bracket and calendar needs to event_card. This is the full when/when-not/alternative triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upcoming_scheduleARead-onlyInspect
Upcoming matches/events for one game, with game-specific filters.
When to use:
"What's on this week?"
Calendar UI; team next matches
Prefer over: live_matches for not-yet-started fixtures.
Do not use when: only in-progress matches needed → live_matches.
Filter support (unsupported params are ignored with meta.warnings — do not assume filtering worked):
lol: hours, team (slug), league (slug)
cs2: team, from, to (ISO); hours not applied upstream
cod: team, tournamentId
dota2: limit/cursor primarily; team may be client-filtered where data allows
ufc: hours / from / to applied client-side after bout expansion (API has no hours); event shells labeled by event name; bouts use fighters[] corners
Parallel-safe: yes. Upstream cost: 1–2. Example: { "game": "lol", "hours": 72, "team": "t1", "limit": 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO-8601 end bound. | |
| from | No | ISO-8601 start bound. | |
| game | Yes | Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: "cs2". | |
| team | No | Team id or slug filter. | |
| hours | No | Horizon in hours when from/to not set (default 72). Example: 48. | |
| limit | No | Max items to return (default 20, max 50). Example: 20. | |
| cursor | No | Opaque cursor from pagination.nextCursor only. | |
| league | No | League id or slug filter. | |
| tournamentId | No | Tournament id filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true if the tool succeeded |
| data | No | Result payload when ok is true; null on error |
| meta | Yes | |
| error | No | |
| partial | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive, and the description adds substantial behavioral context beyond that: unsupported params are silently ignored with meta.warnings, per-game filter application varies, 'hours not applied upstream' for cs2, client-side filtering for dota2/ufc, parallel safety, and upstream cost. These are critical operational details not derivable from 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 longer than average but every section earns its place: purpose, usage context, exclusions, per-game filter caveats, parallel safety, cost, and an example. The bulleted structure keeps it scannable and the critical filter caveat is front-loaded before the per-game breakdown.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-game tool with 9 parameters, varying filter support, and an output schema available, this description is complete. It covers what the tool returns conceptually, when to use it, when not to, per-game filter limitations, ignored-parameter behavior, and performance characteristics. Return-value details are appropriately left to the 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?
Although schema coverage is 100%, the description adds meaning the schema cannot convey: which parameters are actually honored per game, which are ignored, and which are applied client-side rather than upstream. The worked example '{"game": "lol", "hours": 72, "team": "t1", "limit": 20}' further clarifies intended 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 opens with a specific verb and resource: 'Upcoming matches/events for one game, with game-specific filters.' It immediately differentiates from the sibling 'live_matches' by stating 'Prefer over: live_matches for not-yet-started fixtures,' so an agent can tell which tool matches the requested 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?
Usage guidance is explicit: 'When to use' bullets cover calendar UI and team next-match queries, and 'Do not use when: only in-progress matches needed → live_matches' provides a direct exclusion and alternative. This is exactly the kind of when-versus-sibling guidance an agent needs.
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.
2 tool updates
- Changed
call_api3 fields changed- removed
Input schema / properties / bodyJsonRemoved value: -{ - "description": "Stringified JSON body for POST only (rare).", - "type": "string" -} - changed
Input schema / properties / method / descriptionPrevious value: -"HTTP method. Prefer GET. Example: \"GET\"."New value: +"HTTP method. GET only: call_api is read-only. Example: \"GET\"." - changed
Input schema / properties / method / enumPrevious value: -[ - "GET", - "POST" -]New value: +[ + "GET" +]
- Changed
cs2_team_map_stats2 fields changed- changed
Input schema / properties / teamId / descriptionPrevious value: -"Team ID or slug (e.g. \"hltv-team-4608\", \"cs2-team-4608\", or \"natus-vincere\"). Required."New value: +"Team ID or slug (e.g. \"cs2-team-4608\" or \"natus-vincere\"). Required." - changed
Input schema / properties / teamId / examplesPrevious value: -[ - "hltv-team-4608" -]New value: +[ + "cs2-team-4608" +]
2 tool updates
- Changed
match_details1 field changed- changed
Input schema / properties / sections / descriptionPrevious value: -"Explicit section list; defaults to base+playerStats+gamesOrMaps+media. \"odds\" is opt-in: UFC returns moneyline summarised per fighter with bookmaker count, best and median American price and implied probability plus a count of every other market (closing lines for a finished fight come back with currentlyOffered=false rather than being omitted); tennis returns the same bookmaker/market/outcome projection that tennis_odds serves, including oddsAvailable=false when no book is quoting. Odds exist for UFC and tennis only."New value: +"Explicit section list; defaults to base+playerStats+gamesOrMaps+media. \"odds\" is opt-in: UFC returns moneyline summarised per fighter with bookmaker count, best and median American price and implied probability plus a count of every other market (closing lines for a finished fight come back with currentlyOffered=false rather than being omitted). Tennis odds were withdrawn alongside the /tennis/odds/* routes, so for any other game the section reports NOT_IMPLEMENTED. Odds exist for UFC only."
- Removed
tennis_odds
1 tool update
- Changed
standings1 field changed- added
Input schema / properties / pageAdded value: +{ + "description": "Tennis only: page over the full published ranking list. With limit=5 the ATP list is 30 pages (150 ranked players); the response reports total/rankedPlayers/totalPages/hasMore.", + "minimum": 1, + "type": "integer" +}
8 tool updates
- Changed
event_card2 fields changed- added
Input schema / properties / drawMaxMatchesAdded value: +{ + "description": "Tennis only. Cap the total matches carried in draw.rounds. The round list is filled from the business end backwards (Final, SF, QF, …) so a small cap keeps the decisive rounds and drops the early ones; draw.truncated and draw.omitted report what happened. Omit for the complete bracket.", + "maximum": 500, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max bouts/matches on the card (default 20, max 50)."New value: +"Max bouts/matches on the card (default 20, max 50). For a tennis draw this bounds the flat `bouts` list; the bracket in `draw.rounds` is returned whole by default, because a truncated bracket is not a bracket. Use drawMaxMatches to bound it."
- Changed
match_details1 field changed- changed
Input schema / properties / sections / descriptionPrevious value: -"Explicit section list; defaults to base+playerStats+gamesOrMaps+media. \"odds\" (UFC) is opt-in: moneyline summarised per fighter with bookmaker count, best and median American price and implied probability, plus a count of every other market. Closing lines for a finished fight come back with currentlyOffered=false rather than being omitted."New value: +"Explicit section list; defaults to base+playerStats+gamesOrMaps+media. \"odds\" is opt-in: UFC returns moneyline summarised per fighter with bookmaker count, best and median American price and implied probability plus a count of every other market (closing lines for a finished fight come back with currentlyOffered=false rather than being omitted); tennis returns the same bookmaker/market/outcome projection that tennis_odds serves, including oddsAvailable=false when no book is quoting. Odds exist for UFC and tennis only."
- Added
player_matches - Added
player_rankings_history - Added
player_stats - Added
tennis_odds - Added
tennis_schedule - Added
tournaments
21 tool updates
- Added
cs2_clutches - Added
cs2_live_scoreboard - Added
cs2_opening_duels - Added
cs2_roster_transfers - Added
cs2_round_economy - Added
cs2_team_map_stats - Added
cs2_utility_leaderboard - Added
cs2_veto_sequence - Added
h2h_matrix - Added
leaderboard_aces - Added
leaderboard_break_conversion - Added
leaderboard_break_points_saved - Added
leaderboard_comeback_wins - Added
leaderboard_deciding_set_record - Added
leaderboard_finals_record - Added
leaderboard_first_serve_won - Added
leaderboard_return_games_won - Added
leaderboard_tiebreak_win_pct - Changed
match_preview1 field changed- added
Input schema / properties / surfaceAdded value: +{ + "description": "Optional tennis H2H surface filter: Hard, Clay, or Grass. Ignored for other games.", + "examples": [ + "Clay" + ], + "type": "string" +}
- Added
player_form - Added
rankings_movers
2 tool updates
- Changed
event_card2 fields changed- removed
Input schema / properties / includeBoutsRemoved value: -{ - "default": true, - "description": "Include bout/match list (default true).", - "type": "boolean" -} - added
Input schema / properties / includeMatchesAdded value: +{ + "default": true, + "description": "Include the bout/match list, or the tennis draw bracket (default true).", + "type": "boolean" +}
- Changed
team_profile2 fields changed- changed
Input schema / properties / game / descriptionPrevious value: -"Game title: lol | cs2 | dota2 | cod | ufc | tennis. Example: \"cs2\"."New value: +"Game title: lol | cs2 | dota2 | cod | ufc. Tennis has players, not team rosters — use player_profile." - changed
Input schema / properties / game / enumPrevious value: -[ - "lol", - "cs2", - "dota2", - "cod", - "ufc", - "tennis" -]New value: +[ + "lol", + "cs2", + "dota2", + "cod", + "ufc" +]
1 tool update
- Changed
standings1 field changed- added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque cursor from pagination.nextCursor. UFC world scope spans every division; page with it rather than raising limit.", + "type": "string" +}
1 tool update
- Changed
match_details2 fields changed- changed
Input schema / properties / sections / descriptionPrevious value: -"Explicit section list; defaults to base+playerStats+gamesOrMaps+media."New value: +"Explicit section list; defaults to base+playerStats+gamesOrMaps+media. \"odds\" (UFC) is opt-in: moneyline summarised per fighter with bookmaker count, best and median American price and implied probability, plus a count of every other market. Closing lines for a finished fight come back with currentlyOffered=false rather than being omitted." - changed
Input schema / properties / sections / items / enumPrevious value: -[ - "base", - "playerStats", - "gamesOrMaps", - "timeline", - "liveState", - "media", - "advanced" -]New value: +[ + "base", + "playerStats", + "gamesOrMaps", + "timeline", + "liveState", + "media", + "advanced", + "odds" +]
16 tool updates
- First observed
api_health - First observed
call_api - First observed
event_card - First observed
head_to_head - First observed
list_capabilities - First observed
list_routes - First observed
live_matches - First observed
match_details - First observed
match_preview - First observed
match_summary - First observed
player_profile - First observed
resolve_entity - First observed
search_entities - First observed
standings - First observed
team_profile - First observed
upcoming_schedule
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT- AlicenseNot gradedqualityBmaintenanceAnalyze LinkedIn & email outreach campaigns, track pipeline performance, and review lead conversations for RevOps, Sales Managers, and SDR teams.Apache 2.0
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.1129 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.