Skip to main content
Glama

Live football scores, fixtures and standings in your terminal and beside your coding agent, for the competition you follow: the World Cup, the Premier League, LALIGA, the Champions League and 12 more. Liga MX, Serie A, the Bundesliga, the Libertadores and the rest are in the table below. No API key, no signup, no account.

Try it

npx @claudinho/cli follow champions-league   # choose your competition once
npx @claudinho/cli today                     # today's matches, in your timezone
npx @claudinho/cli live                      # the matches in play right now

Claudinho needs Node.js 22 or later. That is the oldest line it runs on, not a security level: run a patched release of the Node 22 or 24 line.

Your league instead? follow premier-league, follow liga-mx, follow laliga: every alias is in Competitions. Add --lang es (or pt, fr) for Spanish, and pin your team with follow champions-league --team Arsenal.

Related MCP server: mcp-sports

Pick your setup

Start with the first row and add what you want. Every row but the MCP server needs the claudinho command from the first row. The plugin replaces the Claude Code statusline and the prompt hook: use the plugin or those two rows, not both.

You want

What it changes

Command

Scores in the terminal

installs the claudinho command; it keeps your choice and a cache on your machine (where)

npm i -g @claudinho/cli

The live score under your Claude Code prompt

Claude Code's statusline

claudinho init-statusline

The live score above your Claude Code prompt, a toast and a celebration on a goal, and a match pane

installs a Claude Code plugin

Claude Code plugin

Claude Code to know the live score when you ask it something

adds a prompt hook (the plugin does this too)

claudinho init-hook

The live score in Cursor's terminal agent (Cursor CLI)

Cursor CLI's statusline

claudinho init cursor

To ask your agent about football

adds an MCP server (a set of tools your agent can call)

MCP server

The statusline and the plugin's band read a local cache and never wait on the network. The plugin's match pane is different: it runs claudinho match <id>, which asks the data provider. Off-match, the prompt hook adds nothing to what the model reads.

Competitions

Nothing is followed until you choose one. claudinho follow <alias> saves your choice, and the commands, the statusline, the plugin and the MCP server follow it. Three things stay the World Cup's whatever you follow: claudinho team and the MCP tool get_team read its nations, and the MCP resource fixtures://{date} is its bundled schedule. claudinho team is refused when --competition or CLAUDINHO_COMPETITION chooses another competition. claudinho follow --list lists every alias with what it offers, claudinho follow shows your choice, and claudinho follow off forgets it.

Alias

Competition

Teams

Scores

Next

Standings

Bracket

Markets

world-cup

World Cup

nations

yes

yes

yes

yes

yes

euro

EURO

nations

yes

yes

yes

not yet

not yet

copa-america

Copa América

nations

yes

yes

yes

not yet

not yet

nations-league

UEFA Nations League

nations

yes

yes

yes

not yet

not yet

concacaf-nations-league

Concacaf Nations League

nations

yes

yes

yes

not yet

not yet

gold-cup

Gold Cup

nations

yes

yes

yes

not yet

not yet

premier-league

Premier League

clubs

yes

yes

yes

n/a

not yet

laliga

LALIGA

clubs

yes

yes

yes

n/a

not yet

serie-a

Serie A

clubs

yes

yes

yes

not yet

not yet

bundesliga

Bundesliga

clubs

yes

yes

yes

not yet

not yet

liga-mx

Liga MX

clubs

yes

yes

yes

not yet

not yet

liga-auf

Liga AUF Uruguaya

clubs

yes

yes

yes

not yet

not yet

champions-league

Champions League

clubs

yes

yes

yes

not yet

not yet

libertadores

Libertadores

clubs

yes

yes

yes

not yet

not yet

concacaf-champions-cup

Concacaf Champions Cup

clubs

yes

yes

n/a

not yet

not yet

club-world-cup

Club World Cup

clubs

yes

yes

yes

not yet

not yet

yes offered · not yet not offered yet · n/a the competition has no such thing (a league season with no knockout tie has no bracket; a knockout-only cup has no table).

One competition at a time. A pinned team belongs to its competition: pinning Arsenal in the Premier League does not follow its Champions League matches. Ask another competition for one command with --competition (claudinho --competition champions-league next Arsenal), or set CLAUDINHO_COMPETITION for a shell. Details: the CLI README.

Install

The terminal

npm i -g @claudinho/cli
claudinho follow champions-league --team Arsenal
claudinho today
claudinho next                 # your pinned team's next match, with a countdown
claudinho table
claudinho match <id>           # one match, with its goals and cards
LASK Linz 3–6 Liverpool
  Champions League
  League phase · Raiffeisen Arena (Linz), Linz, Austria
  FT · Kickoff Wed 16:45
  You'll never walk alone!

  22'  ⚽ Goal         LIV  Ronald Araújo
  24'  ⚽ Goal         LIV  Bradley Barcola
  37'  ⚽ Goal         LIV  Bradley Barcola
  51'  ⚽ Goal         LIV  Jeremie Frimpong
  63'  ⚽ Goal         LAS  Robert Ljubicic
  66'  ⚽ Goal         LIV  Bradley Barcola
  72'  ⚽ Goal         LIV  Lewis Koumas
  74'  ⚽ Goal         LAS  Florian Flecker
  77'  ⚽ Goal         LAS  Florian Flecker
  80'  🟨 Yellow card  LAS  Daniel Elfadli

Live data: ESPN
Not affiliated with FIFA, any confederation, league or club, or Anthropic.

This is a capture from Oct 14, 2026. Off the World Cup, match <id> finds a match from yesterday to 14 days ahead, so run it with a current id (claudinho today --json lists each match's id).

The commands, their options and their --json output: the CLI README. To remove it: claudinho follow off (it deletes the saved choice), then npm rm -g @claudinho/cli, then delete the cache folder (the CLI README says where it is).

Claude Code plugin

The plugin shows the live score (or the countdown to the next match) above your prompt, with the score in bold. A toast says what happened (⚽ GOAL! Liverpool · Ronald Araújo 22' · LASK Linz 0–1 Liverpool, or Full time · LASK Linz 3–6 Liverpool · Liverpool win). When your team scores, and when it wins or draws, Anthropic's Claude mascot celebrates in the band for a few seconds. With the toasts option set to all, it also celebrates any goal in a match that is not your team's. /claudinho match opens a pane with the goals and cards. The band, the toasts, the celebration and the pane speak English, Spanish, Portuguese or French (the plugin's language option). A few fixed words stay English; the plugin README lists them.

npm i -g @claudinho/cli
claudinho follow champions-league --team Arsenal   # the toasts and the mascot are for your pinned team by default
claudinho init plugin          # only if Claudinho's statusline or hook is in Claude Code's settings

claudinho init plugin removes, from Claude Code's settings, the statusline whose command is claudinho prompt and the prompt hook whose command is claudinho hook (the commands init claude, init-statusline and init-hook write by default), so the score does not show twice.

Then, in Claude Code in a terminal:

/plugin install claudinho --marketplace arturogarrido/claudinho

While a match is live, the plugin also puts the live score beside each prompt you send, so Claude knows it (from its last reading, when that reading is current and recent). Off-match it adds nothing, and the plugin's context option turns it off. The plugin reads everything from the installed CLI and never fetches anything itself. Options, the desktop app and the details: the plugin README. To get new versions on their own, turn on auto-update for the claudinho marketplace once (/plugin, the Marketplaces tab, Enable auto-update); Claude Code leaves it off by default for this marketplace. A new version then installs after a session starts, and loads in the next session you start or after /reload-plugins. To remove it: claude plugin uninstall claudinho@claudinho.

The CLI it needs. Everything above needs @claudinho/cli 0.12.0 or later. With 0.11.2 the plugin works in part: a toast is ⚽ and the hook's own English line for any score change, the celebration is a ball and a growing "GOAL!", the band's line is plain and English, the match pane says Nothing to show: the CLI's answer is not one this plugin reads., and no full time is said. The language option changes none of it. With a CLI older than 0.11.2 the band shows nothing and nothing toasts.

Claude Code without the plugin

npm i -g @claudinho/cli
claudinho init-statusline      # the live score under the prompt
claudinho init-hook            # optional: Claude knows the live score during a match

Or both at once, plus the MCP line to run: claudinho init claude. Each command backs up ~/.claude/settings.json first (to settings.json.claudinho.bak, once). Restart Claude Code to see it. To remove both: claudinho init plugin. It removes them when their commands are still claudinho prompt and claudinho hook, and keeps every other setting. Running a local build instead of the global command? init-statusline, init-hook and init-cursor-statusline take --command. From the checkout's root, after a build: node packages/cli/dist/index.js init-cursor-statusline --command "node \"$PWD/packages/cli/dist/index.js\" prompt".

Cursor CLI

Cursor CLI is Cursor's agent in the terminal. One command puts the live score in its statusline and prints the MCP config to paste:

npm i -g @claudinho/cli
claudinho init cursor

Restart your agent session to see it. export CLAUDINHO_CURSOR_META=auto adds a second line with the model and the context in use. Prefer to paste the config yourself? claudinho init cursor --print prints it. To remove it: delete the statusLine block from ~/.cursor/cli-config.json (the original is kept as cli-config.json.claudinho.bak). Cursor's prompt hook cannot pass the score to the model yet, so the score-aware hook is Claude Code only.

MCP server (any agent)

The MCP server gives your agent ten read-only tools, among them today's matches, live scores, a team's next match, standings, one match with its goals and cards, and a shareable card. It works in Claude Code, Cursor, Codex, Claude Desktop, Windsurf, Zed, VS Code, and any MCP client that runs a local (stdio) server.

claude mcp add claudinho -- npx -y @claudinho/mcp     # Claude Code
codex mcp add claudinho -- npx -y @claudinho/mcp      # Codex CLI

Most other clients, Cursor included (~/.cursor/mcp.json), take this config. Some (VS Code, Zed) put the same command and args under a key of their own: see your client's MCP docs.

{ "mcpServers": { "claudinho": { "command": "npx", "args": ["-y", "@claudinho/mcp"] } } }

Then ask mid-task. If you have not run claudinho follow, name the competition in your question.

The tools, the prompts and their fields: the MCP README.

What it does

  • Scores, fixtures, standings: today, live, next, table, match <id> with its goals and cards, and bracket for the World Cup. Kickoff times and days are in your timezone (--tz).

  • Four languages: English, Spanish, Portuguese and French (--lang), with a line of commentary on each match line (¡GOOOOL!) and a team's own rally cry when it has one (Mexico's "¿Y si sí?", Pumas' "¡Goya!", Arsenal's "COYG!"). A postponed or cancelled match gets neither. --flavor off turns it off.

  • Clubs and nations: a nation shows with its flag, a club by its name. No crests, kits or photos.

  • Shareable cards: claudinho share next --copy puts a plain-text card for the group chat on your clipboard.

  • Prediction-market odds: for World Cup matches, a "who's favored" line from Polymarket's public data, shown under today, match and on share cards only when a reliable market exists. Informational only, not betting advice. --no-markets hides it there; claudinho markets asks for the odds on purpose.

  • Honest about gaps: when the data provider sends something Claudinho cannot read, the commands and MCP tools that read it, and their share cards, say their data may be incomplete, instead of showing less as if it were all. The statusline and the hook do not.

What stays on your machine

No accounts, no telemetry, no analytics, no Claudinho server. Claudinho asks two public services for data, ESPN for scores and standings and Polymarket for World Cup market odds, with nothing about you attached. The CLI keeps your choice and a small cache on your machine (where); the MCP server writes nothing to disk. The init commands change only the settings file they name, after a one-time backup. Full policy: PRIVACY.md.

FAQ

Do I need an API key or an account? No.

Does it work offline? The World Cup's schedule ships with the package, so its fixtures work offline. Every other competition's schedule, and every live score, comes from the network.

Where does the data come from? Scores and standings from ESPN's public scoreboard (an answer from it says Live data: ESPN), market odds from Polymarket's public data. Rate limits are respected.

Why no crests, kits or player photos? Claudinho shows facts and emoji flags only (and, in the plugin's celebration, Anthropic's Claude mascot). A flag is a nation's, so a club shows by its name.

Flags show as boxed letters (CH, BA)? Some terminals (Warp, some Windows terminals) cannot draw flag emoji. Claudinho detects Warp and drops the flags: the statusline and bracket show 3-letter codes (MEX), and today, live, next, match, table, team and the hook show plain team names. Share cards keep their flags. Force it anywhere with CLAUDINHO_FLAGS=off, or keep the flags with CLAUDINHO_FLAGS=on.

Around the web

Coverage: LinuxLinks and SuperIsland's Live Football extension. Listed in the Official MCP Registry, Glama, MCP.so, cursor.directory and awesome-mcp-servers. The full record: PUBLIC_FOOTPRINT.md.

Smithery stopped accepting updates on October 17, 2026 and ends its accounts, API and CLI on October 31, so Claudinho no longer publishes a Claude Desktop bundle (.mcpb) there. A bundle installed from Smithery stays at the version it was installed with (0.11.1 or older) and gets no newer one: switch to npx -y @claudinho/mcp or the Claude Code plugin.

Why star?

Claudinho is a one-person fan project with no budget. If it earns a place in your terminal, a star helps other developers find it and puts new releases in your feed. Want to help build it? CONTRIBUTING.md has the layout, the dev loop and good first issues.

Security

Found a vulnerability? Please report it privately through GitHub's form, not a public issue. SECURITY.md has the process and the threat model.

License

MIT © 2026 Arturo Garrido.

Independent fan project. Not affiliated with FIFA, any confederation, league or club, or Anthropic.

Built while watching the games. #VibingLaVidaLoca ⚽

Available Tools

10 tools
get_bracketKnockout bracketA
Read-only

Knockout bracket from the Round of 32 through the final, with live scores overlaid. Group slots project from live standings once a group has started; winner slots need a confirmed FT result. Pass an optional stage (R32, R16, QF, SF, 3P, F) to filter one round. partial means the provider sent records that could not be used: the ties shown are the ones read, and may not be all of them. Falls back to structure-only when live data is unavailable. A league season with no knockout tie of its own (the Premier League, LaLiga) answers inapplicable: there is none to show; other club competitions answer unsupported (not offered yet).

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
stageNoKnockout round to show (omit for the full bracket)
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
viewYes
sourceNo
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedNo
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
standingsDegradedNo
responseTruncationNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond readOnlyHint/openWorldHint it discloses substantial behavior: live overlay, stage filtering, 'partial' meaning truncated/unusable records, structure-only fallback when live data is unavailable, and the inapplicable vs unsupported distinction. These are the exact failure modes an agent must anticipate.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries information (data model, partial semantics, fallback, error taxonomy). It is dense with semicolon-joined clauses that could be broken up, but no sentence is expendable.

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

Completeness5/5

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

With an output schema present, an agent needs the behavioral edge cases rather than return-value prose, and the description supplies them: partial results, structure-only fallback, and per-competition response modes. Nothing necessary for a correct call appears to be missing.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for tz, lang, flavor and competition already in the schema. The description's only parameter content repeats the stage enum values (R32…F), adding no meaning 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.

Purpose5/5

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

Opens with a specific verb+resource and scope: 'Knockout bracket from the Round of 32 through the final, with live scores overlaid.' This is clearly distinct from siblings like get_standings, get_live and get_match, so an agent can select it without opening the schema.

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

Usage Guidelines4/5

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

Explains the conditional data model (group slots project from live standings once a group has started; winner slots need a confirmed FT) and when the answer is inapplicable vs unsupported, which tells the agent what to expect per competition type. It stops short of explicitly naming a sibling alternative for the knockout-vs-league split, so not a full 5.

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

get_liveLive matchesA
Read-only

Only matches in play right now, each with current score and minute; an empty list means nothing is in play only when the read was whole (neither partial nor degraded says otherwise). Off the World Cup, betweenEditions means the competition's edition has ended and the next has not started. partial means the provider sent records that could not be used: an empty list then means no match in play could be read, not that none is. Use during matches for in-play state; for a full day's schedule including upcoming and finished, use get_today. tz/lang/flavor affect formatting only.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
countYes
sourceYes
matchesYes
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedYes
truncatedYes
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
responseTruncationNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (readOnly) and open-world access, yet the description adds substantial context they don't: empty-list semantics gated on whole vs partial/degraded reads, and the betweenEditions off-World-Cup case. The phrasing of the empty-list rule is convoluted ('nothing is in play only when the read was whole (neither partial nor degraded says otherwise)'), which slightly undercuts an otherwise rich disclosure.

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

Conciseness3/5

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

The core purpose is front-loaded and nothing is padded for length, but the parenthetical about partial/degraded reads is grammatically tangled and forces re-reading to decode the empty-list guarantee. Density here costs comprehension rather than saving words.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. The description covers what an agent actually needs to interpret results correctly: in-play scope, empty-list meaning under whole vs degraded reads, and the off-season case.

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

Parameters3/5

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

Schema coverage is 100%, so tz, lang, flavor and competition are already documented in detail far beyond what the description says. The one addition, 'tz/lang/flavor affect formatting only,' is useful for scoping their impact but marginal. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific resource and scope: matches in play right now, each with current score and minute. It distinguishes itself from get_today by naming that sibling and its different scope, so an agent can route 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.

Usage Guidelines5/5

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

Gives explicit when-to-use ('Use during matches for in-play state') and the alternative with its selection condition ('for a full day's schedule including upcoming and finished, use get_today'). The routing decision is fully specified.

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

get_market_signalPrediction-market signalA
Read-only

Read-only prediction-market signals for a match (by id), a team's current-or-next fixture, or a date (default: today). Returns market-implied percentages with attribution; complete:false means the provider read was incomplete, not that no signal exists; partial says the same of the fixture read behind the answer (the provider sent fixture records that could not be used). Shown only before and during a match: finished matches have no market read. Informational only: relay the numbers factually; do not add betting, trading, or 'value' advice, and do not invent links.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
dateNoDate as YYYY-MM-DD (default: today) for all that day's signals
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
teamNo3-letter team code, e.g. MEX; resolves to the team's in-play match when one is live, else their next fixture
flavorNoCommentary flair: off, subtle, full (default: full)
matchIdNoMatch id (most specific)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
dateNo
teamNo
countNo
signalNo
matchIdNo
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
signalsNo
completeNoFalse when the market provider did not complete every relevant read
degradedNo
truncatedNo
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
informationalOnlyYes
responseTruncatedNo
responseTruncationNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it explains what the flagged states mean (complete:false = provider read incomplete, not absence of signal; partial = unusable fixture records), when the tool is unavailable, and constrains downstream use (relay factually, no betting/trading advice, no invented links). This is exactly the extra context annotations alone 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.

Conciseness4/5

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

Selection modes are front-loaded in the opening sentence and every clause carries information (state flags, availability window, usage constraints). It is dense and runs long as one block, which slightly hurts scanability but not substance.

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

Completeness5/5

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

With an output schema present, the description correctly avoids enumerating return fields yet still explains the two status flags an agent must interpret, plus availability and usage limits. Nothing needed to call or interpret it is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: date defaults to today, matchId is the most specific selector, and team resolves to a live match or else the next fixture. It does not touch tz, lang, flavor, or competition resolution, so it stops short of a 5.

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

Purpose5/5

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

The first sentence names a specific resource (prediction-market signals), its read-only nature, and the three selection axes (match id, team, date). It is clearly separable from siblings like get_match, get_today, or get_next_fixture, which return match/fixture data rather than market reads.

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

Usage Guidelines4/5

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

It states the selection precedence ('by id', team resolving to in-play else next fixture, date defaulting to today) and a hard usage boundary: available only before and during a match, never for finished ones. It does not explicitly name a sibling tool to use instead for finished matches or non-market data, which keeps it from a 5.

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

get_matchMatch detailA
Read-only

One match by its id, with live score/minute overlaid when it's in play, and, for a match in play or finished, the provider's goals and cards it could read (minute, kind, side, the player when named; match.events in data), never a claim that the list is every goal. Off the World Cup the id is looked for from yesterday to 14 days ahead: window names the provider days searched when it was not there (not found in that span, not "no such match"), and degraded with a match means its state could not be refreshed. Optional prediction-market enrichment carries marketComplete; false means the read was incomplete, not that no signal exists. Get the id from get_today or get_live; to find a team's match without an id, use get_next_fixture. tz/lang/flavor affect formatting.

NameRequiredDescriptionDefault
idYesMatch id
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
matchYes
servedNoThe shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed
sourceNo
windowNoOff the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedNo
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
marketSignalNo
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
marketCompleteNoFalse when optional market enrichment did not check this fixture
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
responseTruncationNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say readOnly/openWorld; the description adds real behavioral context: the 14-day forward / 1-day back search window, that 'window' in the response means days searched and absence is 'not found in that span, not "no such match"', that 'degraded' means state could not be refreshed, and that the events list is explicitly not exhaustive. It also explains marketComplete=false semantics, preventing a false 'no signal' reading.

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

Conciseness3/5

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

Front-loaded with the core purpose, but the second sentence is a long multi-clause run-on stacking window, degraded, events, and market caveats together. Every clause carries information, yet the packing hurts scannability.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the description still covers the non-obvious response semantics (window, degraded, marketComplete). Combined with 100% param coverage, an agent has what it needs; only the dense phrasing slightly undercuts usability.

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

Parameters3/5

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

Schema coverage is 100% and the schema is far more detailed than the description (lang lists exact supported values and fallback chain; flavor enumerates modes). The description only offers the thin claim that 'tz/lang/flavor affect formatting', which adds little. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('One match by its id') and immediately layers the scope: live score/minute overlay when in play, provider goals and cards when in play or finished. It is plainly distinguishable from get_today, get_live and get_next_fixture, which it names.

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

Usage Guidelines5/5

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

Gives explicit routing: 'Get the id from get_today or get_live; to find a team's match without an id, use get_next_fixture.' That is when-to-use plus named alternatives for the main ambiguity (no id on hand).

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

get_next_fixtureNext fixture for a teamA
Read-only

A team's next match. World Cup: a nation's code or name (MEX, Mexico); a confirmed knockout tie is read from the live overlay, group fixtures from the bundled schedule. A club competition: a club's name or code (Arsenal, ARS), resolved against the competition's roster; its earliest match not yet finished in the 14 days ahead (in play included), with team (the club resolved), candidates when several teams match (no fixture is picked), horizon when none falls in that span, unknownTeam when neither the competition's table (read whole) nor its fixtures over those 14 days hold such a team, rosterIncomplete when the roster could not be read whole and the name (a code or a partial name) could not be resolved without it: ask again with the club's full name. partial means the provider sent records that could not be used: the answer is what was read, and no fixture then does not mean the team is out. With no team: the server's CLAUDINHO_TEAM, else the team the user pinned (claudinho follow --team ) when the request is for that team's competition; a tool error when there is neither.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
teamNoA team name or code: a club (Arsenal, ARS) or a nation (Mexico, MEX). Omit for the server's CLAUDINHO_TEAM, else the team the user pinned
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
teamYes
seasonNo
sourceYes
fixtureYes
horizonNoOff the World Cup: a whole read of this many provider days ahead held no fixture for the team
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedYes
candidatesNoTwo or more teams matched the name: no fixture is picked; ask which one
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
responseTruncationNo

TDQS

A3.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds substantial behavioral detail beyond that — the World Cup vs club resolution paths, the 14-day horizon with in-play matches included, and the meaning of candidates, horizon, unknownTeam, rosterIncomplete and partial. It even documents the tool-error condition when no team can be resolved.

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

Conciseness2/5

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

The description is a dense, colon-laden run-on that leads with the World Cup edge case rather than a clean one-line purpose, making it hard to parse. Several state names (candidates, horizon, partial, rosterIncomplete) are almost certainly output fields already covered by the output schema, so restating them here is partly redundant.

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

Completeness4/5

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

For a tool this complex with five optional parameters, the description covers the fallback chains and failure modes an agent needs to call it correctly and interpret empty results. Since an output schema exists, the missing return-shape explanation is appropriately left to that schema.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real semantics beyond the schema: it explains how a team string is resolved (nation vs club roster), that a club's earliest unfinished match within 14 days is chosen, and that a code/partial name fails with rosterIncomplete unless the full club name is used.

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

Purpose4/5

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

The opening fragment 'A team's next match' plus the detailed resolution rules make it clear this returns the upcoming fixture for a team, split by World Cup vs club competition. It never names a sibling (get_today, get_live, get_match) to differentiate scope, so an agent must infer the boundary from context alone.

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

Usage Guidelines3/5

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

Usage is implied through the 'With no team: CLAUDINHO_TEAM, else pinned team' fallback and the competition default chain, which tells the agent it can be called with zero arguments. However there is no explicit when-to-use/when-not statement and no alternative tool is ever named.

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

get_share_snippetShareable match snippetA
Read-only

A polished, copy-pasteable card (plain text) for a match (matchId), a team's next fixture (team), one standings table (group: a table key, e.g. "A", "A1", "A-B" or "LEAGUE"), the knockout bracket (bracket: true), a date (default: today), or live matches (live: true). Returns the ready-to-paste snippet plus structured data: hand the snippet text to the user verbatim. marketComplete:false is stated inside the card as an incomplete optional read; partial (on any match card, live and date included) is stated inside the card too: the provider sent records that could not be used. Off the World Cup a next card names the club resolved, and an empty card says the span searched (horizon, window) or that the competition is between editions. No links; it carries a non-affiliation disclaimer, and any market line stays informational only.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
dateNoDate as YYYY-MM-DD (default: today)
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
liveNoSnapshot of matches in play right now
teamNoA team name or code for that team's next fixture: a club (Arsenal) or a nation (MEX)
groupNoTable key for a standings card: a group letter (A), or A1, A-B, LEAGUE
styleNosocial (default, full card) or compact (one line per match)
flavorNoCommentary flair: off, subtle, full (default: full)
bracketNoKnockout bracket card (use with optional knockoutStage)
matchIdNoMatch id (most specific)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition
knockoutStageNoFilter the bracket card to one round
includeHashtagNoInclude the #VibingLaVidaLoca tag (default true)
includeMarketsNoInclude the reliable market line when available (default true)
includeInstallLineNoInclude the "Try it: …" run cue (default true)

Output Schema

NameRequiredDescription
kindYes
teamNo
viewNo
countNo
groupNo
stageNo
styleNo
servedNoThe shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed
sourceNo
tablesNo
targetNo
windowNoOff the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match
horizonNoOff the World Cup: a whole read of this many provider days ahead held no fixture for the team
matchesNo
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
snippetNo
degradedNo
truncatedNo
candidatesNoA next card for a name two or more teams match: them, and no fixture is picked
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
marketSignalsNo
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
marketCompleteNoFalse when optional market enrichment did not check every relevant fixture
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
informationalOnlyNo
responseTruncatedNo
responseTruncationNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description goes well beyond them: it explains what marketComplete:false and 'partial' mean inside the card, what an empty card states (searched horizon/window, or between-editions competition), and that there are no links plus a non-affiliation disclaimer. These are genuinely non-obvious output semantics an agent could misreport if unstated.

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

Conciseness3/5

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

The purpose is front-loaded in the first sentence, but that sentence is a long parenthetical chain that is hard to parse, and the following run-ons pack marketComplete, partial, empty-card, and disclaimer behavior into dense prose. Every fact is relevant, but the packaging costs readability.

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

Completeness4/5

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

With 15 optional parameters, a full output schema, and read-only annotations, the description covers what an agent needs: how to select a card, that the snippet must be passed through verbatim, and how to interpret the incomplete/partial/empty states. The remaining gap is the absence of any guidance on default competition resolution failures beyond the schema's mention of noCompetition.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 15 parameters, and the description largely restates them (group table key, bracket, default date today, live). The only added nuance is the enumeration of card modes in the opening sentence, which duplicates what the schema properties already convey.

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

Purpose4/5

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

The description names a specific artifact (a polished, copy-pasteable plain-text card) and enumerates the exact selectors that produce each variant (matchId, team, group, bracket, date, live), so the agent knows precisely what it gets. It is implicitly distinguished from siblings (get_match, get_standings) by returning rendered snippet text plus structured data, but no sibling is named, so differentiation is inferential rather than explicit.

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

Usage Guidelines3/5

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

Usage is conveyed indirectly: the first sentence maps each selector to a card type, which tells the agent how to drive the tool, and 'hand the snippet text to the user verbatim' tells it what to do with the result. However, there is no statement of when to prefer this over get_match/get_today/get_standings, and no exclusions or prerequisites.

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

get_standingsStandingsA
Read-only

Live cumulative standings: omit group for every table, or pass one table's key: a group letter (A–L in the World Cup), A1 for a numbered group, A-B for group B of league A, LEAGUE for a league's single table. Each table that is not a lettered group carries a label (the provider's name) and its title shows the key in parentheses. Returns ranked rows (team, played, W/D/L, goal difference, points). incomplete:true means a table could not be read and the tables returned are not the whole competition; a table with partial is missing rows. Use get_today for fixtures/scores and get_next_fixture for one team. If unavailable, the World Cup returns its roster at zero; competitions without a compatible bundled roster return no tables. Both are flagged degraded.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
groupNoTable key: a group letter (A), or A1, A-B, LEAGUE (omit for all)
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
sourceYes
tablesYes
degradedYes
incompleteNoPresent (true) when the provider sent a table that could not be read: the tables returned are not the whole competition
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
responseTruncatedNo
responseTruncationNo

TDQS

A4.4/5.0
Behavior4/5

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

Goes well beyond the readOnly/openWorld annotations by disclosing failure semantics that annotations cannot express: incomplete:true means the returned tables are not the whole competition, partial means missing rows, and a degraded World Cup roster returns zeroed rows. The only gap is that it does not say whether tables are cached/live-refreshed beyond the word "Live".

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

Conciseness4/5

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

Front-loaded with the operation and the key-routing rule, then failure modes. The middle sentence about labels and parenthesized titles is provider-detail padding that an agent rarely needs, costing some tightness.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, and annotations cover safety. The description still supplies what is missing for correct invocation: key formats, fallback behavior when a competition is unavailable, and degradation flags.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value on the one non-obvious parameter by enumerating the `group` key grammar (A, A1, A-B, LEAGUE) and explaining the resulting label/title convention. Nothing is said about tz/lang/flavor/competition beyond what the schema already covers.

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

Purpose5/5

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

States a specific verb and resource ("Live cumulative standings") with scope (all tables vs. one table) and names the two sibling tools it must not be confused with. An agent can distinguish it from get_today and get_next_fixture without reading the schema.

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

Usage Guidelines4/5

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

Explicit routing rules: omit `group` for every table, pass a table key for one, use get_today for fixtures/scores and get_next_fixture for a single team's fixture. It does not cover cases like brackets (get_bracket) or live scores (get_live), so the sibling coverage is incomplete but the core guidance is clear.

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

get_teamResolve a teamA
Read-only

The World Cup roster: resolve a nation name or 3-letter code to its FIFA code, flag, and group. Fuzzy and forgiving: accepts "Mexico", "mex", "USA", "DR Congo", "Türkiye"/"Turkey", "Holland", etc. Useful for the 3-letter code get_market_signal needs. It knows no clubs: get_next_fixture and get_share_snippet resolve a club's name themselves. Returns the single confident match (team), plus candidates (matches) when the query is ambiguous (e.g. "south" → South Africa, South Korea). Offline: reads the bundled roster, never the network.

NameRequiredDescriptionDefault
queryYesTeam name or 3-letter code, e.g. "Mexico", "MEX", "DR Congo"

Output Schema

NameRequiredDescription
teamYes
countYes
queryYes
matchesYes
responseTruncatedNo
responseTruncationNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint, openWorldHint=false), so the description's remaining burden is behavioral detail, which it supplies: offline roster reads with no network access, fuzzy/alias acceptance, and the ambiguity contract (single confident 'team' plus 'matches' candidates when the query is loose, e.g. 'south'). That ambiguity behavior is not derivable from the annotations and materially affects how an agent consumes the result.

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

Conciseness4/5

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

Front-loaded with the core action and return payload, and every subsequent sentence carries routing, alias, or ambiguity information. The 'World Cup roster' framing is mild flourish, but the text stays dense and free of filler.

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

Completeness5/5

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

For a one-param resolver, the description covers purpose, routing to and away from siblings, input tolerance, ambiguity handling, and offline behavior. An output schema exists so return structure need not be spelled out, and the description still names the 'team' and 'matches' fields anyway, leaving no gap an agent would need.

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

Parameters4/5

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

Schema coverage is 100% for the single query param, so the baseline is 3. The description goes beyond the schema's three examples by enumerating aliases and fuzzy variants ('mex', 'Türkiye'/'Turkey', 'Holland'), which tells the agent the param is forgiving and need not be normalized — real meaning the schema does not convey.

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

Purpose5/5

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

States a specific verb and resource (resolve a nation name or 3-letter code) and names exactly what it returns: FIFA code, flag, and group. It also draws a hard boundary against siblings, noting that get_next_fixture and get_share_snippet resolve club names themselves, so an agent can pick the right resolver 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.

Usage Guidelines5/5

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

Gives an explicit when-to-use ('Useful for the 3-letter code get_market_signal needs') tied to a named sibling, and an explicit when-not-to-use ('It knows no clubs'), naming the two tools that handle clubs instead. Both the positive and negative routing conditions are stated outright rather than implied.

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

get_todayToday's matchesA
Read-only

All fixtures for a date (default: today), with live score and minute overlaid on any match in play. Optional prediction-market enrichment carries marketComplete; false means the read was incomplete, not that no signal exists. Off the World Cup, betweenEditions means the competition's edition ended before that date. partial means the provider sent records that could not be used: on the World Cup a fixture may then show from the bundled schedule without its live state (the text counts them, and names no provider when none shown was served), and where no bundled schedule was merged, an empty day means no fixture could be read for it, not that none is scheduled. Use this for a whole day's card; for only in-play matches use get_live, for one team's match use get_next_fixture, for a single match's detail use get_match. Kickoffs render in tz; lang localizes the title, dates, status and stage words, the empty and outage sentences, attribution, and commentary (en/es/pt/fr); flavor sets commentary tone.

NameRequiredDescriptionDefault
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
dateNoDate as YYYY-MM-DD (default: today)
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
dateYes
countYes
servedNoThe shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed
sourceYes
matchesYes
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedYes
truncatedYes
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
marketSignalsNo
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
marketCompleteNoFalse when optional market enrichment did not check every relevant fixture
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
responseTruncationNo

TDQS

A4.2/5.0
Behavior4/5

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

Goes well past the readOnly/openWorld annotations by disclosing failure semantics: marketComplete=false means the read was incomplete, betweenEditions means the edition ended before that date, and partial/empty days can mean 'could not be read' rather than 'nothing scheduled'. This is exactly the operational context annotations don't carry; the only deduction is that heavily compressed phrasing ('the text counts them, and names no provider when none shown was served') is hard to parse on first read.

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

Conciseness3/5

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

Front-loaded correctly, but the body is one dense run-on with internal jargon (marketComplete, betweenEditions, partial) that could be broken into shorter statements. Every sentence is substantive, yet the packaging makes it slower to scan than necessary.

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

Completeness4/5

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

For an open-world, provider-backed fixture reader with an output schema, the description covers the needed edge cases: incomplete reads, edition gaps, unreadable days, and localization scope. Nothing essential about calling it correctly is missing; a cleaner breakdown of the partial/empty cases would push it to 5.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented, and the description largely restates that the schema says: tz affects kickoff rendering, lang localizes, flavor sets commentary tone. It adds little new parameter-level meaning beyond confirming the schema's story, so the baseline 3 is right.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'All fixtures for a date (default: today), with live score and minute overlaid'. The enrichment clause and the 'off the World Cup / betweenEditions' caveat make clear exactly what surface this tool returns, distinctly from get_live and get_match.

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

Usage Guidelines5/5

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

Explicitly states the selection rule: 'Use this for a whole day's card; for only in-play matches use get_live, for one team's match use get_next_fixture, for a single match's detail use get_match.' Three named alternatives with the condition that picks each.

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

list_competitionsSupported competitionsA
Read-only

The competitions Claudinho answers for, one per row: the alias every other tool's competition argument takes, the name, the teams (nation or club), the kind (league or cup), and what each surface is (scores, next, standings, bracket, markets: offered, not-offered-yet, or not-applicable), plus current: the competition this request is for. Offline: reads the supported table, never the network. Whether an edition is in season is not listed here; the reads say so (betweenEditions).

NameRequiredDescriptionDefault
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescription
currentYesThe competition this request is for (its competition argument, else the server's, else the user's saved choice), as every other tool's data carries it; null when nothing is chosen
competitionsYes
responseTruncatedNo
responseTruncationNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false; the description reinforces the offline/local-table behavior and adds a genuine scoping caveat: in-season status is deliberately absent and must come from the read tools via betweenEditions. It also enumerates the three surface states (offered, not-offered-yet, not-applicable), which is behavioral detail the annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the resource and its columns, then two short clarifying sentences about offline behavior and the in-season exclusion. The opening sentence is dense and column-heavy but every clause carries information; no filler.

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

Completeness4/5

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

An output schema exists, so the field-by-field enumeration is largely redundant, but the description compensates with the two things the schema cannot say: it is a local, network-free read, and in-season status lives elsewhere. What remains missing is explicit guidance on calling it first to resolve aliases, which is only gestured at.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both lang and competition (alias vs ESPN slug, fallback chain). The description only restates that the alias is the value other tools accept, adding marginal meaning over the schema. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose4/5

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

Names the resource precisely (the supported-competitions table) and enumerates the columns it returns: alias, name, teams, kind, per-surface availability, and the current competition. The listing verb is only implied by 'one per row', and it is clearly not any of the sibling reads (standings, bracket, market signal), so an agent can place it without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: calling out 'the alias every other tool's competition argument takes' hints this is the discovery step for valid competition values, and 'Offline: reads the supported table, never the network' tells the agent it is a cheap local lookup. There is no explicit 'call this before other tools' instruction or stated alternative to compare against.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.13.1
    • Changedget_bracket1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_live1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_market_signal1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_match1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_next_fixture1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_share_snippet1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_standings1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedget_today1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
    • Changedlist_competitions1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
  2. 9 tool updatesv0.12.0
    • Changedget_bracket11 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
    • Changedget_live14 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matches / items / properties / events
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "added": {
        +        "type": "number"
        +      },
        +      "minute": {
        +        "type": "number"
        +      },
        +      "player": {
        +        "type": "string"
        +      },
        +      "side": {
        +        "type": "string"
        +      },
        +      "teamCode": {
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matches / items / properties / home / properties / id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / matches / items / properties / stageLabel
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
    • Changedget_market_signal12 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • changedInput schema / properties / team / description
        Previous value: -"3-letter team code, e.g. MEX — resolves to the team's in-play match when one is live, else their next fixture"New value: +"3-letter team code, e.g. MEX; resolves to the team's in-play match when one is live, else their next fixture"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
    • Changedget_match14 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / match / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "away": {
        -        "$ref": "#/properties/match/anyOf/0/properties/home"
        -      },
        -      "group": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "home": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "code": {
        -            "type": "string"
        -          },
        -          "flag": {
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "id": {
        -        "type": "string"
        -      },
        -      "kickoff": {
        -        "type": "string"
        -      },
        -      "minute": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "score": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {
        -              "away": {
        -                "type": "number"
        -              },
        -              "home": {
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shootout": {
        -        "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
        -      },
        -      "stage": {
        -        "type": "string"
        -      },
        -      "status": {
        -        "type": "string"
        -      },
        -      "venue": {
        -        "type": "string"
        -      },
        -      "winnerCode": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "away": {
        +        "$ref": "#/properties/match/anyOf/0/properties/home"
        +      },
        +      "events": {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "added": {
        +              "type": "number"
        +            },
        +            "minute": {
        +              "type": "number"
        +            },
        +            "player": {
        +              "type": "string"
        +            },
        +            "side": {
        +              "type": "string"
        +            },
        +            "teamCode": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "group": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "home": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "string"
        +          },
        +          "flag": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "kickoff": {
        +        "type": "string"
        +      },
        +      "minute": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "score": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "away": {
        +                "type": "number"
        +              },
        +              "home": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shootout": {
        +        "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
        +      },
        +      "stage": {
        +        "type": "string"
        +      },
        +      "stageLabel": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "venue": {
        +        "type": "string"
        +      },
        +      "winnerCode": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / served
        Added value: +{
        +  "description": "The shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / window
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Off the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match",
        +  "properties": {
        +    "from": {
        +      "type": "string"
        +    },
        +    "to": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "from",
        +    "to"
        +  ],
        +  "type": "object"
        +}
    • Changedget_next_fixture22 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • changedInput schema / properties / team / description
        Previous value: -"3-letter team code, e.g. MEX"New value: +"A team name or code: a club (Arsenal, ARS) or a nation (Mexico, MEX). Omit for the server's CLAUDINHO_TEAM, else the team the user pinned"
      • addedInput schema / properties / team / maxLength
        Added value: +40
      • addedInput schema / properties / team / minLength
        Added value: +1
      • removedInput schema / properties / team / pattern
        Removed value: -"^[A-Za-z]{3}$"
      • removedInput schema / required
        Removed value: -[
        -  "team"
        -]
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / candidates
        Added value: +{
        +  "description": "Two or more teams matched the name: no fixture is picked; ask which one",
        +  "items": {
        +    "$ref": "#/properties/team/anyOf/1"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • changedOutput schema / properties / fixture / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "away": {
        -        "$ref": "#/properties/fixture/anyOf/0/properties/home"
        -      },
        -      "group": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "home": {
        -        "additionalProperties": true,
        -        "properties": {
        -          "code": {
        -            "type": "string"
        -          },
        -          "flag": {
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "id": {
        -        "type": "string"
        -      },
        -      "kickoff": {
        -        "type": "string"
        -      },
        -      "minute": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "score": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {
        -              "away": {
        -                "type": "number"
        -              },
        -              "home": {
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shootout": {
        -        "$ref": "#/properties/fixture/anyOf/0/properties/score/anyOf/0"
        -      },
        -      "stage": {
        -        "type": "string"
        -      },
        -      "status": {
        -        "type": "string"
        -      },
        -      "venue": {
        -        "type": "string"
        -      },
        -      "winnerCode": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "away": {
        +        "$ref": "#/properties/team/anyOf/1"
        +      },
        +      "events": {
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "added": {
        +              "type": "number"
        +            },
        +            "minute": {
        +              "type": "number"
        +            },
        +            "player": {
        +              "type": "string"
        +            },
        +            "side": {
        +              "type": "string"
        +            },
        +            "teamCode": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "group": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "home": {
        +        "$ref": "#/properties/team/anyOf/1"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "kickoff": {
        +        "type": "string"
        +      },
        +      "minute": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "score": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "away": {
        +                "type": "number"
        +              },
        +              "home": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shootout": {
        +        "$ref": "#/properties/fixture/anyOf/0/properties/score/anyOf/0"
        +      },
        +      "stage": {
        +        "type": "string"
        +      },
        +      "stageLabel": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "venue": {
        +        "type": "string"
        +      },
        +      "winnerCode": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / horizon
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Off the World Cup: a whole read of this many provider days ahead held no fixture for the team",
        +  "properties": {
        +    "days": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "days"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / season
        Added value: +{
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
      • addedOutput schema / properties / team / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "code": {
        +        "type": "string"
        +      },
        +      "flag": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / team / type
        Removed value: -"string"
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
    • Changedget_share_snippet30 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / group / description
        Previous value: -"Group letter A–L for a standings card, e.g. A"New value: +"Table key for a standings card: a group letter (A), or A1, A-B, LEAGUE"
      • changedInput schema / properties / group / pattern
        Previous value: -"^[A-La-l]$"New value: +"^[A-Za-z0-9-]{1,12}$"
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • changedInput schema / properties / team / description
        Previous value: -"3-letter team code for that team's next fixture, e.g. MEX"New value: +"A team name or code for that team's next fixture: a club (Arsenal) or a nation (MEX)"
      • addedInput schema / properties / team / maxLength
        Added value: +40
      • addedInput schema / properties / team / minLength
        Added value: +1
      • removedInput schema / properties / team / pattern
        Removed value: -"^[A-Za-z]{3}$"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / candidates
        Added value: +{
        +  "description": "A next card for a name two or more teams match: them, and no fixture is picked",
        +  "items": {
        +    "$ref": "#/properties/team/anyOf/1"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / horizon
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Off the World Cup: a whole read of this many provider days ahead held no fixture for the team",
        +  "properties": {
        +    "days": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "days"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / matches / items / properties / away / $ref
        Previous value: -"#/properties/matches/items/properties/home"New value: +"#/properties/team/anyOf/1"
      • addedOutput schema / properties / matches / items / properties / events
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "added": {
        +        "type": "number"
        +      },
        +      "minute": {
        +        "type": "number"
        +      },
        +      "player": {
        +        "type": "string"
        +      },
        +      "side": {
        +        "type": "string"
        +      },
        +      "teamCode": {
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matches / items / properties / home / $ref
        Added value: +"#/properties/team/anyOf/1"
      • removedOutput schema / properties / matches / items / properties / home / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / matches / items / properties / home / properties
        Removed value: -{
        -  "code": {
        -    "type": "string"
        -  },
        -  "flag": {
        -    "type": "string"
        -  },
        -  "name": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / matches / items / properties / home / type
        Removed value: -"object"
      • addedOutput schema / properties / matches / items / properties / stageLabel
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / served
        Added value: +{
        +  "description": "The shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / team / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "code": {
        +        "type": "string"
        +      },
        +      "flag": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / team / type
        Removed value: -"string"
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / window
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Off the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match",
        +  "properties": {
        +    "from": {
        +      "type": "string"
        +    },
        +    "to": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "from",
        +    "to"
        +  ],
        +  "type": "object"
        +}
    • Changedget_standings7 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / group / description
        Previous value: -"Group letter A–L (omit for all)"New value: +"Table key: a group letter (A), or A1, A-B, LEAGUE (omit for all)"
      • changedInput schema / properties / group / pattern
        Previous value: -"^[A-La-l]$"New value: +"^[A-Za-z0-9-]{1,12}$"
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / incomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the provider sent a table that could not be read: the tables returned are not the whole competition",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
    • Changedget_today15 fields changed
      • addedInput schema / properties / competition
        Added value: +{
        +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
      • addedOutput schema / properties / betweenEditions
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
        +  "properties": {
        +    "ended": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ended"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / competition
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "alias": {
        +          "type": "string"
        +        },
        +        "chosenBy": {
        +          "enum": [
        +            "flag",
        +            "env",
        +            "saved"
        +          ],
        +          "type": "string"
        +        },
        +        "experimental": {
        +          "const": true,
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "slug",
        +        "name",
        +        "chosenBy"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
        +}
      • addedOutput schema / properties / inapplicable
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / matches / items / properties / events
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "added": {
        +        "type": "number"
        +      },
        +      "minute": {
        +        "type": "number"
        +      },
        +      "player": {
        +        "type": "string"
        +      },
        +      "side": {
        +        "type": "string"
        +      },
        +      "teamCode": {
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matches / items / properties / home / properties / id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / matches / items / properties / stageLabel
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / noCompetition
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / partial
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
        +  "properties": {
        +    "omitted": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / rosterEvidence
        Added value: +{
        +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
        +  "enum": [
        +    "table",
        +    "bundle"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / rosterIncomplete
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / served
        Added value: +{
        +  "description": "The shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / unknownTeam
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unsupported
        Added value: +{
        +  "const": true,
        +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
        +  "type": "boolean"
        +}
    • Addedlist_competitions
  3. 9 tool updatesv0.10.0
    • Changedget_bracket2 fields changed
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_live4 fields changed
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "degraded",
        -  "source",
        -  "count",
        -  "matches"
        -]New value: +[
        +  "degraded",
        +  "source",
        +  "count",
        +  "truncated",
        +  "matches"
        +]
    • Changedget_market_signal5 fields changed
      • addedOutput schema / properties / complete
        Added value: +{
        +  "description": "False when the market provider did not complete every relevant read",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedget_match3 fields changed
      • addedOutput schema / properties / marketComplete
        Added value: +{
        +  "description": "False when optional market enrichment did not check this fixture",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_next_fixture2 fields changed
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_share_snippet5 fields changed
      • addedOutput schema / properties / count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / marketComplete
        Added value: +{
        +  "description": "False when optional market enrichment did not check every relevant fixture",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedget_standings2 fields changed
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_team2 fields changed
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_today5 fields changed
      • addedOutput schema / properties / marketComplete
        Added value: +{
        +  "description": "False when optional market enrichment did not check every relevant fixture",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncated
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / responseTruncation
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "date",
        -  "degraded",
        -  "source",
        -  "count",
        -  "matches"
        -]New value: +[
        +  "date",
        +  "degraded",
        +  "source",
        +  "count",
        +  "truncated",
        +  "matches"
        +]
  4. 9 tool updatesv0.9.0
    • Changedget_bracket2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "standingsDegraded": {
        +      "type": "boolean"
        +    },
        +    "view": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "view"
        +  ],
        +  "type": "object"
        +}
    • Changedget_live2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "type": "number"
        +    },
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "matches": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "away": {
        +            "$ref": "#/properties/matches/items/properties/home"
        +          },
        +          "group": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "home": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "code": {
        +                "type": "string"
        +              },
        +              "flag": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "kickoff": {
        +            "type": "string"
        +          },
        +          "minute": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "score": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "away": {
        +                    "type": "number"
        +                  },
        +                  "home": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "shootout": {
        +            "$ref": "#/properties/matches/items/properties/score/anyOf/0"
        +          },
        +          "stage": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "type": "string"
        +          },
        +          "venue": {
        +            "type": "string"
        +          },
        +          "winnerCode": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "degraded",
        +    "source",
        +    "count",
        +    "matches"
        +  ],
        +  "type": "object"
        +}
    • Changedget_market_signal2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "date": {
        +      "type": "string"
        +    },
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "informationalOnly": {
        +      "type": "boolean"
        +    },
        +    "matchId": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "signal": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "signals": {
        +      "items": {
        +        "$ref": "#/properties/signal/anyOf/0"
        +      },
        +      "type": "array"
        +    },
        +    "team": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "informationalOnly"
        +  ],
        +  "type": "object"
        +}
    • Changedget_match2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "marketSignal": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "match": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "away": {
        +              "$ref": "#/properties/match/anyOf/0/properties/home"
        +            },
        +            "group": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "home": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "code": {
        +                  "type": "string"
        +                },
        +                "flag": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "kickoff": {
        +              "type": "string"
        +            },
        +            "minute": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "score": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {
        +                    "away": {
        +                      "type": "number"
        +                    },
        +                    "home": {
        +                      "type": "number"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "shootout": {
        +              "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
        +            },
        +            "stage": {
        +              "type": "string"
        +            },
        +            "status": {
        +              "type": "string"
        +            },
        +            "venue": {
        +              "type": "string"
        +            },
        +            "winnerCode": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "match"
        +  ],
        +  "type": "object"
        +}
    • Changedget_next_fixture2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "fixture": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "away": {
        +              "$ref": "#/properties/fixture/anyOf/0/properties/home"
        +            },
        +            "group": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "home": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "code": {
        +                  "type": "string"
        +                },
        +                "flag": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "kickoff": {
        +              "type": "string"
        +            },
        +            "minute": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "score": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": true,
        +                  "properties": {
        +                    "away": {
        +                      "type": "number"
        +                    },
        +                    "home": {
        +                      "type": "number"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "shootout": {
        +              "$ref": "#/properties/fixture/anyOf/0/properties/score/anyOf/0"
        +            },
        +            "stage": {
        +              "type": "string"
        +            },
        +            "status": {
        +              "type": "string"
        +            },
        +            "venue": {
        +              "type": "string"
        +            },
        +            "winnerCode": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "team": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "team",
        +    "fixture",
        +    "degraded",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • Changedget_share_snippet2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "group": {
        +      "type": "string"
        +    },
        +    "informationalOnly": {
        +      "type": "boolean"
        +    },
        +    "kind": {
        +      "type": "string"
        +    },
        +    "marketSignals": {
        +      "additionalProperties": {
        +        "$ref": "#/properties/tables/anyOf/0"
        +      },
        +      "type": "object"
        +    },
        +    "matches": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "away": {
        +            "$ref": "#/properties/matches/items/properties/home"
        +          },
        +          "group": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "home": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "code": {
        +                "type": "string"
        +              },
        +              "flag": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "kickoff": {
        +            "type": "string"
        +          },
        +          "minute": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "score": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "away": {
        +                    "type": "number"
        +                  },
        +                  "home": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "shootout": {
        +            "$ref": "#/properties/matches/items/properties/score/anyOf/0"
        +          },
        +          "stage": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "type": "string"
        +          },
        +          "venue": {
        +            "type": "string"
        +          },
        +          "winnerCode": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "snippet": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "stage": {
        +      "type": "string"
        +    },
        +    "style": {
        +      "type": "string"
        +    },
        +    "tables": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/properties/tables/anyOf/0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "target": {
        +      "type": "string"
        +    },
        +    "team": {
        +      "type": "string"
        +    },
        +    "view": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/properties/tables/anyOf/0"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "kind"
        +  ],
        +  "type": "object"
        +}
    • Changedget_standings2 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "degraded": {
        +      "type": "boolean"
        +    },
        +    "source": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "tables": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/properties/tables/anyOf/0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "degraded",
        +    "source",
        +    "tables"
        +  ],
        +  "type": "object"
        +}
    • Addedget_team
    • Addedget_today
  5. 1 tool updatev0.8.15
    • Removedget_today
  6. 2 tool updatesv0.8.4
    • Addedget_bracket
    • Changedget_share_snippet2 fields changed
      • addedInput schema / properties / bracket
        Added value: +{
        +  "description": "Knockout bracket card (use with optional knockoutStage)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / knockoutStage
        Added value: +{
        +  "description": "Filter the bracket card to one round",
        +  "enum": [
        +    "R32",
        +    "R16",
        +    "QF",
        +    "SF",
        +    "3P",
        +    "F"
        +  ],
        +  "type": "string"
        +}
  7. 1 tool updatev0.5.0
    • Changedget_share_snippet1 field changed
      • addedInput schema / properties / group
        Added value: +{
        +  "description": "Group letter A–L for a standings card, e.g. A",
        +  "pattern": "^[A-La-l]$",
        +  "type": "string"
        +}
  8. 1 tool update
    • Changedget_market_signal1 field changed
      • changedInput schema / properties / team / description
        Previous value: -"3-letter team code for that team's next fixture, e.g. MEX"New value: +"3-letter team code, e.g. MEX — resolves to the team's in-play match when one is live, else their next fixture"
  9. 7 tool updatesv0.1.0
    • First observedget_live
    • First observedget_market_signal
    • First observedget_match
    • First observedget_next_fixture
    • First observedget_share_snippet
    • First observedget_standings
    • First observedget_today

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation4/5

Most tools map cleanly to distinct query surfaces: date, live matches, single match, team next fixture, standings, bracket, markets, and competition list. get_share_snippet is a cross-cutting card builder that overlaps with get_today/get_live/get_match/get_standings/get_bracket, and its market content overlaps get_market_signal, so selection is not perfectly crisp.

Naming Consistency4/5

Names are consistently snake_case and almost all use get_*; list_competitions is a natural exception. The only minor deviation is that get_today and get_live use time/adverb modifiers rather than resource nouns, but the pattern remains predictable.

Tool Count5/5

Ten tools is well-scoped for a football data server covering live scores, fixtures, match detail, standings, brackets, teams, markets, and competitions. Each tool appears to earn its place without excessive fragmentation.

Completeness4/5

The surface covers the core read-only football workflows: fixtures, live state, match detail, team lookup/next fixture, standings, bracket, market signals, competitions, and formatted sharing. Minor gaps remain, such as a team's full schedule/history beyond the next fixture and club-specific roster lookup separate from fixture resolution.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for FIFA World Cup 2026 data: matches, teams, venues, city guides, fan zones, visa info, injuries, odds, standings, bracket, and historical matchups. 18 tools, zero external API dependencies.
    18
    227 npm
    34
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Wraps TheSportsDB API to enable AI agents to query sports data through natural language.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying FIFA World Cup player and team statistics for 2010, 2014, 2018, and 2022 through natural language, providing tools for top scorers, player comparisons, team summaries, and more via a Claude-powered CLI.
    -
  • F
    license
    A
    quality
    D
    maintenance
    MCP server exposing live 2026 FIFA World Cup group standings and Round-of-32 bracket, with confidence classification and stale fallback.
    2
    -