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
Available Tools
16 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. Prefer GET. Example: "GET". | GET |
| bodyJson | No | Stringified JSON body for POST only (rare). | |
| 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 mark it read-only/open-world/non-destructive; the description adds path validation behavior, PATH_NOT_ALLOWED errors, parallel-safety guidance, and upstream cost of 1. This goes well beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than average, the description is tightly organized with labeled sections and no filler. The opening one-liner, usage bullets, path constraints, safety notes, and example each add distinct value in a scannable order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema exists, and annotations cover safety/open-world behavior, so the description need not explain return values. It covers when to invoke, when not to, path constraints, error behavior, rate-limit caution, and a full call example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented with descriptions and examples. The description adds a concrete usage example and emphasizes the path allowlist, but most parameter-level meaning is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific framing: 'Power escape hatch: allowlisted Cito REST call with unshaped raw JSON in data.raw.' It names the exact action, target resource, and output shape, and positions itself against curated siblings as the long-tail fallback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 lists three use cases (long-tail paths, debugging payloads, user knows an OpenAPI path) and gives a direct exclusion: 'Do not use when: a curated tool covers the outcome.' It also names curated job categories to prefer and adds rate-limit caution.
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 — ufc.com 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). | |
| eventIdOrSlug | No | Event or tournament id/slug. Prefer over q when known. Required unless q is given. Example: "ufc-300". | |
| 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?
The annotations only declare readOnly, openWorld, and destructive-safe, so the description carries the behavioral burden. It adds card ordering, bout/corner field details, the CORS/proxiedImageUrl caveat, parallel-safety, upstream cost, the extra includeStandings call, and tennis draw behavior—far beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: definition, use cases, return behavior, CORS warning, alternative routing, exclusions, tennis path, and a concrete example. It is front-loaded with the core identity and organized so an agent can scan it efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a composite, multi-game tool with six parameters and many siblings, the description is complete: it covers selection criteria, alternative tools, exclusions, field semantics, cost, safety, parallel execution, and special tennis behavior. Since an output schema exists, return-value documentation is not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful behavior beyond it: q resolves within the tool and should defer to resolve_entity for disambiguation; includeMatches includes the tennis draw bracket; includeStandings joins divisional rank onto corners and costs an extra upstream call. These are the kind of side effects an agent cannot infer from 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 opens with 'COMPOSITE event / fight-night card: identity, bout or match list, optional standings snippet,' which clearly names the resource and scope. It also distinguishes itself from siblings by pointing to match_preview for one bout, match_summary for recaps, live_matches for live-only, and standings for pure tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' section lists concrete scenarios, including UFC fight nights, CS2 event hubs, and tournament overviews. 'Prefer over' and 'Do not use when' explicitly route the agent to alternatives and state exclusion conditions, and the tennis guidance adds platform-specific handling.
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.
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" (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. | |
| 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?
Beyond the readOnly/openWorld annotations, the description discloses non-obvious behavior: section precedence ('If sections[] is non-empty it wins'), per-game requirements ('LoL liveState/advanced require gameId'), opt-in odds, parallel safety, and upstream cost range. These are exactly the behavioral details an agent needs to call it correctly and safely.
Agents need to know what a tool does to the world before calling 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 scannable labeled blocks (When to use, Prefer, Do not use, Section selection, Parallel-safe), front-loading the core purpose and then diving into edge cases. No filler: every sentence conveys a distinct, decision-relevant fact, and the JSON example at the end is a useful concrete anchor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, an output schema, and sibling alternatives, the description covers the purpose, usage boundaries, parameter interplay, special cases, and cost behavior. The presence of an output schema means the return-format burden is lifted, and the description fills all selection and invocation gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, yet the description still adds semantic value by explaining how the booleans interact with sections[], which sections are defaults, that odds are opt-in, and what gameId is needed for. The example input further clarifies parameter usage in context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Deep match package: optional timelines, advanced stats, live state/snapshots, full map/game tree, media inventory,' which names the exact resource and scope of the tool. It also explicitly contrasts with match_summary, giving the agent a clear way to distinguish this tool from a key sibling before inspecting 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 'When to use' bullets list concrete analyst and live-window scenarios, and the description explicitly states when to prefer match_summary and when to avoid this tool ('first-pass live board (use live_matches + match_summary)'). This is textbook alternative selection guidance.
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. 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). | |
| 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 already declare readOnlyHint=true and destructiveHint=false, so the description is not required to restate safety. It adds useful behavioral context beyond annotations: it is a composite tool, parallel-safe, with an upstream cost of 4–8, and it returns pre-match briefing content. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with a dense summary line, clear usage bullets, explicit exclusions, and a compact example. Every section adds decision-relevant information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with a high-coverage schema, an output schema, and strong annotations, the description covers the essential context: what it returns, when to use it, when not to use it, how it compares to siblings, and a realistic invocation example. Nothing critical for an agent 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 concrete example invocation and clarifies the composite relationship between sides, H2H, and recent form, but it does not substantially elaborate on individual parameters beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'COMPOSITE pre-match briefing' and enumerates the content: sides, roster/form snippets, H2H stub, event context. It clearly differentiates from siblings by explicitly labeling this as pre-match and directing completed matches to match_summary and live matches to 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 description provides explicit 'When to use' bullets, a 'Prefer over' note, a 'Prefer match_summary when...' instruction, and a 'Do not use when' exclusion. This gives an agent unambiguous decision criteria for selecting this tool over alternatives.
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_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.
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)
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". | |
| 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 declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context beyond that: 'Parallel-safe: yes. Upstream cost: 1–2,' the Dota limitation ('may NOT_IMPLEMENTED or weak worldRanking'), and the pagination caveat ('UFC world scope spans every division; page with it rather than raising limit'). These are exactly the kind of behavioral traits an agent needs and that structured annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense with no filler: every section earns its place, from purpose and alternatives to per-game scope, parallel-safety, cost, and an example. It uses clear section headers and bullets, keeping the content scannable. Despite its length, it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-game standings tool with 10 parameters, the description is remarkably complete: it covers use cases, exclusions, per-game parameter requirements, known limitations, operational traits (parallel-safety, cost), pagination guidance, and a concrete example. Since an output schema exists, return-value documentation is unnecessary. Nothing an agent needs 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?
Although the schema already achieves 100% description coverage, the description adds critical cross-parameter semantics that the schema cannot express: game-dependent required keys (lol: leagueId OR tournamentId; cs2: omit for world rankings; eventId for event standings; dota2: best-effort worldRanking only). It also adds usage nuance for cursor and limit in the UFC pagination note. This goes well beyond the baseline for high schema coverage and meaningfully improves parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'League/event standings or world/division rankings normalized to ranked rows.' It names the resource (standings/rankings), the output format (normalized rows), and immediately distinguishes from siblings via 'Prefer over: raw standings via call_api' and 'Do not use when: single team form → team_profile; live scores → live_matches.' An agent can confidently tell this apart from the listed alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and structured: a 'When to use' bullet list covers table/playoff picture and per-game use cases, a 'Do not use when' section names exact alternatives (team_profile for single-team form, live_matches for live scores), and a per-game 'Required scope keys' section tells the agent exactly which parameters to provide for each game. This is comprehensive, actionable routing guidance.
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.
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. Dates show when Glama detected each change.
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
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
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 gradedqualityCmaintenanceEnables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.MIT
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.11961MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct job, and the descriptions explicitly separate temporal states (live vs upcoming vs preview vs recap vs deep-dive) and interaction modes (one-best resolve vs browse search, curated tool vs raw escape hatch). Even the match/event families are carefully tiered so an agent should rarely misselect.
Names are readable and grouped into recognizable families like list_*, match_*, and *_profile, but the overall convention is mixed: verb-prefixed names like resolve_entity and call_api sit alongside noun-phrase names like event_card, match_summary, and standings. Consistent snake_case prevents chaos, but there is no uniform verb_noun pattern.
16 tools is at the upper edge of the ideal range, but the server spans multiple games and several composite read workflows, so each tool has a distinct purpose. It feels slightly heavy but not bloated.
The set covers health, discovery, entity resolution, profiles, standings, schedules, live matches, previews, recaps, and deep-dive match data, with call_api as an escape hatch for long-tail routes. Notable omissions like a standalone historical results search and some per-game upstream gaps keep it from a perfect score.