Skip to main content
Glama

footballcharts-mcp

Server Details

Tables, results, fixtures, goal timing, season projections: 93 football leagues incl. lower tiers

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
ddevetak/footballcharts-mcp
GitHub Stars
6
Server Listing
footballcharts-mcp

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation4/5

Each tool targets a distinct resource (fixtures, results, one match, league table, team, projection, etc.), so boundaries are mostly clear. Minor overlap exists between get_goal_timing (league-wide goal periods) and get_team (which also includes a team's goal timing), and between get_fixtures/get_results/get_match, but descriptions differentiate them well.

Naming Consistency4/5

Eight of ten tools use a clear get_ verb_noun pattern (get_fixtures, get_match, get_team), with list_leagues and about_football_charts as sensible deviations. All names are snake_case and readable, so consistency is high with only minor stylistic variation.

Tool Count5/5

Ten tools is well-scoped for a football data/model API, with each tool covering a distinct slice of the domain (leagues, fixtures, results, match, team, table, projection, timing, track record, metadata). No tool feels redundant or missing by count.

Completeness5/5

The surface covers the full lifecycle of the model's outputs: discovering leagues, viewing upcoming and finished matches, inspecting single matches and teams, standings, goal-timing breakdowns, season projections, and the public calibration record. Known exclusions (live scores, player data, odds) are explicitly stated rather than missing gaps.

Available Tools

10 tools
about_football_chartsAbout this sourceA
Read-onlyIdempotent
Inspect

Returns a summary of the football-charts.com source: the leagues and data it covers (93 leagues, including lower divisions), what it does not hold (live scores, player data, bookmaker odds), the league-key and season-string formats, how the model probabilities are produced, and the free-tier limits. No parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
whatYes
notesYes
toolsYes
coversYes
not_heldYes
free_tierYes
get_a_keyYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the safety profile is covered. The description adds useful behavioral context beyond that: it discloses what data is absent (live scores, player data, bookmaker odds) and that free-tier limits exist, which helps set expectations. It does not discuss return structure, though an output schema exists.

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

Conciseness4/5

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

The description is a single dense sentence that front-loads the core purpose before enumerating covered topics. Every listed item is substantive, though the long enumeration makes it slightly heavy for a zero-parameter meta tool.

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

Completeness5/5

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

Given the tool is a read-only informational endpoint with zero parameters and an existing output schema, the description is complete: it tells the agent what topics the summary covers, what is explicitly excluded, and that free-tier limits are addressed. Nothing needed to select or invoke the tool 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?

The tool takes zero parameters, and the description explicitly states 'No parameters.' With an empty schema and 100% schema coverage, this baseline score is appropriate; no additional parameter meaning is needed or expected.

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 (returns a summary) and resource (the football-charts.com source), then enumerates the exact content covered: leagues, exclusions, key/season formats, model probabilities, and free-tier limits. This clearly differentiates it from data-returning siblings like get_fixtures and list_leagues, which fetch records rather than source metadata.

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

Usage Guidelines3/5

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

The description makes the tool's purpose clear enough that an agent can infer it should be called to learn about the source, but it never states when to use this versus alternatives or any prerequisites. There is no explicit guidance such as calling it before list_leagues or when coverage questions arise.

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

get_fixturesUpcoming fixturesA
Read-onlyIdempotent
Inspect

Returns the upcoming matches of one league, earliest first: kick-off date and time, teams, a match slug, and the model's calibrated probabilities (home and away win, over/under goal lines, both teams to score, half-time lines; the draw probability is 1 - home - away) with team attack and defence ratings. The probabilities come from a baseline statistical model of past results (no injuries, motivation or weather) and are not bookmaker prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
leagueNo
matchesNo
attributionNoCite as "Data by football-charts.com"

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare the safe read-only, idempotent profile, but the description goes well beyond them: it discloses the data provenance (baseline statistical model of past results), the exclusions (no injuries, motivation or weather), that values are not bookmaker prices, and the draw-probability derivation (1 - home - away). This is exactly the behavioral context an agent needs to interpret the numbers correctly.

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?

Two sentences, front-loaded with the primary return value before the caveats. Dense but every clause carries information (ordering, fields, probability caveats); the probability enumeration is slightly list-heavy but justified for a data-return tool.

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

Completeness5/5

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

With a rich output schema, an existing schema-documented parameter, and full annotations covering the safety profile, the description needs only to add interpretation context, which it does via the model provenance and draw-probability rule. Nothing required to invoke or interpret the tool is 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 description coverage is 100%, so the league parameter is fully documented in the schema (key format, examples, 'not the display name'). The description adds only the constraint that fixtures are scoped to 'one league', so the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Returns the upcoming matches of one league, earliest first') plus the exact payload contents. The scope ('upcoming', single league, chronological ordering) cleanly separates it from siblings like get_results and get_league_table without needing to name them.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'upcoming matches' and the fact that it takes a single league key suggest when it applies, but there is no explicit when-to-use guidance or named alternative (e.g. get_results for past matches, list_leagues for discovering keys). An agent can infer the right context but nothing routes it definitively.

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

get_goal_timingGoal timingA
Read-onlyIdempotent
Inspect

Returns goals per 15-minute period (0-15 to 90+) for every team in one league season, with each team's peak period or periods (ties are listed together), share of late goals and share of first-half goals, plus league totals and the league's most active period. team limits the result to teams whose name contains the given text.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoTeam name substring, e.g. 'Flamengo' — returns that team's row only
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.
seasonNoSeason string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
noteNo
statsNo
leagueNo
seasonNo
time_binsNo
attributionNoCite as "Data by football-charts.com"
team_filterNo
team_not_foundNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description goes beyond them by disclosing output semantics: the 0-15 to 90+ bucketing, that ties for peak period are listed together, and that the team filter is a substring match on name. It does not address rate limits or tier constraints (those live in the schema), but the added behavioral context is genuine.

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?

Two sentences, front-loaded with the primary output description before the filter clause. It is dense and runs long but every clause contributes information about the returned shape. Minor loss of structure from packing many output facets into a single sentence.

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 spelled out, and annotations carry the safety profile. The description covers scope, granularity, tie handling and the filter, which is enough for correct invocation. It omits any pointer to list_leagues for obtaining league/season keys, though the schema supplies that reference.

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 league keys, season formats and the team substring filter in detail. The description restates the team filter behavior ('limits the result to teams whose name contains the given text') but adds no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Returns) and a precisely scoped resource: goals bucketed per 15-minute period, per team, across one league season, including peak periods, late-goal share, first-half share and league totals. This is clearly differentiable from siblings like get_league_table or get_season_projection without opening any schema.

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

Usage Guidelines3/5

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

There is no explicit when-to-use or when-not-to-use guidance and no named alternative (e.g. versus get_league_table or get_results). Usage is only implicit in the described output, so an agent must infer the scenario rather than being routed to it.

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

get_league_tableLeague tableA
Read-onlyIdempotent
Inspect

Returns the standings of one league season: one row per team with position, played, wins, draws, losses, goals, points and last-five form, plus expected points and a luck category (how far results run ahead of or behind the underlying performance). view='luck' orders the same rows by over- or under-performance and view='goals' by goals scored; the default orders by points. Without a season, returns the current season.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoRow order; default 'classic' (by points)
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.
seasonNoSeason string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season.

Output Schema

ParametersJSON Schema
NameRequiredDescription
viewNo
tableNo
leagueNo
seasonNo
attributionNoCite as "Data by football-charts.com"
season_stateNo'in_season' or 'finished'
current_seasonNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds genuinely new behavioral context beyond the annotations: the exact column set returned, what the luck category means (results running ahead of/behind underlying performance), and the free-tier constraint ('serves the current and previous season'). It stops short of describing pagination or result-size behavior.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary return shape before the view and season modifiers. Every clause carries information: the row schema, the two non-default orderings, the default, and the season fallback. No 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?

An output schema exists, so return-value documentation is not required, and annotations cover the safety profile. Given that, the description supplies everything else an agent needs: what a row contains, the meaning of the luck metric, how each view reorders rows, and the free-tier season limit.

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

Parameters4/5

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

Schema coverage is 100% and the schema itself defines all three parameters well, so the baseline is 3. The description goes further by explaining what each view ordering actually means ('luck' orders by over-/under-performance, 'goals' by goals scored, default by points) and by clarifying the season-omission behavior, adding semantics beyond the schema's terse field descriptions.

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

Purpose5/5

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

States a specific verb and resource ('Returns the standings of one league season') and enumerates the row shape (position, played, wins, draws, losses, goals, points, form, expected points, luck category). This makes it immediately distinguishable from siblings like get_results, get_fixtures, and get_season_projection, which cover different slices of data.

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

Usage Guidelines4/5

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

Explains the decision between the three view values (luck, goals, default by points) and states that omitting season yields the current season, plus points the agent at list_leagues for valid league and season keys. It stops short of explicitly saying when to reach for this tool over sibling tools such as get_season_projection or get_track_record, so no exclusion guidance is present.

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-onlyIdempotent
Inspect

Returns one match in full, identified by its slug ('country/league-slug/YYYY-MM-DD-home-vs-away', as listed in the slug field of upcoming fixtures): the complete model probability block (calibrated and raw), team ratings, first-goal-time histograms for both sides, recent form and, once played, the score, half-time score and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesMatch slug as listed in upcoming fixtures, e.g. 'england/premier-league/2026-09-05-brentford-vs-sunderland'

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchYes
attributionNoCite as "Data by football-charts.com"

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description usefully notes conditional behavior ('once played, the score, half-time score and status'), implying a pre-match vs post-match return shape, but adds little on error handling or what happens for an invalid slug.

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?

One front-loaded sentence with verb+resource first, then the payload enumeration. Dense but every clause carries information; the trailing list of returned fields is long but not padded.

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 return list is bonus rather than a necessity, and annotations cover the safety profile. For a one-param read tool this is sufficient; only explicit routing guidance against the sibling detail/listing tools 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?

With a single required parameter and 100% schema coverage the baseline is 3, but the description goes beyond the schema's example by spelling out the slug composition ('country/league-slug/YYYY-MM-DD-home-vs-away'), which clarifies field ordering and format that the bare example only illustrates.

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 (Returns) and resource (one match), and enumerates the payload: probability block, team ratings, goal-time histograms, form, and post-match score/status. This clearly separates it from list-oriented siblings like get_fixtures and get_results.

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

Usage Guidelines3/5

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

It implicitly tells the agent where the identifier comes from ('as listed in the slug field of upcoming fixtures'), which sketches a workflow, but never states when to prefer this over get_fixtures, get_results, or get_team, nor any exclusion. Usage is implied rather than explicit.

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

get_resultsMatch resultsA
Read-onlyIdempotent
Inspect

Returns the finished matches of one league season in chronological order: date, teams, full-time and half-time score, first-goal minute and a goalless flag. team keeps the matches where either side's name contains the given text (case-insensitive); last=N keeps only the N most recent matches. Contains no odds.

ParametersJSON Schema
NameRequiredDescriptionDefault
lastNoKeep only the N latest matches of the season, e.g. 5 for recent form (default: all)
teamNoTeam name substring, e.g. 'Liverpool'
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.
seasonNoSeason string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countNo
leagueNo
seasonNo
matchesNo
attributionNoCite as "Data by football-charts.com"
season_stateNo'in_season' or 'finished'
current_seasonNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds genuinely new behavioral facts: results are ordered chronologically, team matching is case-insensitive and applies to either side, and odds are absent from the payload.

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

Conciseness5/5

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

Three dense sentences with the primary purpose front-loaded, then filter semantics, then the exclusion. No filler or redundant restatement of the tool name.

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

Completeness4/5

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

For a read-only list tool with a rich schema (100% coverage, output schema present) and full annotations, the description covers scope, ordering, filtering and content exclusions adequately. Data-availability limits (free tier, season default) live in the schema rather than the description, so nothing essential is missing, though the description could have surfaced the current/previous-season constraint.

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 beyond the schema: 'team' matches either side's name (not just one) and the match is case-insensitive, which the schema's 'Team name substring' does not convey. It restates 'last=N' semantics already present in the schema, so it is not 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?

States a specific verb and resource with scope: 'Returns the finished matches of one league season in chronological order', then enumerates the returned fields. The 'finished matches' scope cleanly separates it from get_fixtures (scheduled) and get_match (single match) without needing to name them.

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?

Gives clear context for how the filters are meant to be used ('team keeps matches where either side's name contains the text', 'last=N keeps only the N most recent') and an explicit exclusion ('Contains no odds'), which steers the agent away from this tool for betting data. It stops short of naming an alternative tool or stating when-not-to-use beyond the odds exclusion.

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

get_season_projectionSeason projectionA
Read-onlyIdempotent
Inspect

Returns how one league's current season is projected to finish, from 10,000 Monte Carlo simulations refreshed daily: for each team the probabilities of winning the title, finishing in the top four and finishing in the bottom three, current points, mean final points, a 10th-90th percentile points range, a finishing-position matrix, and the change since the previous run. Covers the current season only; returns a note when no projection exists for the league yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoSet when no projection exists for the league yet
projectionNo
attributionNoCite as "Data by football-charts.com"

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds genuinely non-structured context: the 10,000-simulation Monte Carlo methodology, a daily refresh cadence, and the explicit no-data response. It does not mention latency, payload size, or rate limits, so it stops short of a 5.

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

Conciseness4/5

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

Purpose and data-freshness framing are front-loaded, and the scope caveat is placed last where it belongs. The middle run-on enumeration of every returned field is long and partly redundant with the output schema, which costs a point but does not obscure the core message.

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 and 100% parameter coverage, the description only needed to add scope, freshness, and failure-mode context — and it does exactly that (current season only, daily refresh, note when no projection exists). Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'league' parameter is already documented with concrete examples ('premier', 'spain1', 'wgermany1') plus the warning that it is not the display name. The description adds no parameter-level 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?

States a specific verb and resource ('Returns how one league's current season is projected to finish') and immediately frames it as a forward-looking simulation, which separates it from siblings like get_league_table (actual standings) and get_results. An agent can tell what this produces 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?

The description gives scope boundaries ('Covers the current season only') and an edge-case behavior ('returns a note when no projection exists'), which implies when the tool is applicable. However, it never states when to prefer this over get_league_table, get_track_record, or any other sibling, so the routing decision is left to inference.

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

get_teamTeam pageA
Read-onlyIdempotent
Inspect

Returns one team's season in one league: its table row (with expected points and luck category), the full match log (date, opponent, home or away, score, half-time score, first-goal minute, outcome), goals per 15-minute period, the first-goal distribution, and season averages of match statistics (shots, shots on target, possession, corners, xG) where the league has them. team is a lower-case slug with hyphens, e.g. 'arsenal' or 'manchester-city'.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam slug, e.g. 'arsenal', 'manchester-city' (from the table's team names, lower-case, spaces as hyphens)
leagueYesLeague key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.
seasonNoSeason string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season.

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugNo
teamNo
statsNoPer-match averages over this season, computed from stored match statistics; null where the league has none
leagueNo
seasonNo
matchesNo
rankingNoThe team's table row
seasonsNo
attributionNoCite as "Data by football-charts.com"
first_goal_binsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: some season statistics only exist "where the league has them", and it clarifies the slug format the caller must supply. It stops short of stating rate limits or pagination (presumably not applicable).

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 in the first clause, and the long enumeration is a single sentence that each element of which maps to real returned data. The trailing slug-format sentence is somewhat redundant with the schema, slightly lowering efficiency.

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 an output schema present, the description need not explain return values, and annotations cover the safety profile, so the remaining burden is light. The detailed payload summary plus the league-dependent data caveat make it complete for a read tool; only explicit sibling routing is absent.

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 team, league, and season semantics are already fully documented there, including the slug convention and season defaults. The description's slug example ('arsenal' or 'manchester-city') merely restates the schema, adding no new meaning, 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?

States a specific verb and resource scoped precisely: "Returns one team's season in one league". It then enumerates the payload (table row, match log, 15-minute goal periods, first-goal distribution, season stat averages), which cleanly separates it from get_league_table (whole table), get_match (single match), and get_results (scorelines).

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?

There is no explicit when-to-use statement or exclusion relative to get_league_table, get_match, or get_results. Usage is only implied by the enumerated contents — an agent can infer this is the per-team deep-dive, but the description never says so or names an alternative.

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

get_track_recordModel calibration recordA
Read-onlyIdempotent
Inspect

Returns the public calibration record of the model: every probability published before kick-off and scored after the result, with count, hit rate, Brier score and reliability buckets (predicted probability against observed frequency), overall and by question type (match result, total goals over 2.5 and 3.5, half-time goals over 1.5, both teams to score), plus the 50 most recent scored predictions. Misses are included. days sets the lookback window (default 90).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLookback window in days (default 90)

Output Schema

ParametersJSON Schema
NameRequiredDescription
attributionNoCite as "Data by football-charts.com"
track_recordYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description adds meaningful behavior beyond them: 'Misses are included' signals there is no survivorship bias in the sample, the reliability-bucket definition is spelled out, and the 50-prediction cap on recent entries is disclosed. No auth or rate-limit context, so not a 5.

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

Conciseness4/5

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

One dense sentence, front-loading the returned artifact before the breakdown and the parameter. The enumeration of question types (match result, over 2.5/3.5, HT over 1.5, BTTS) is borderline verbose since an output schema exists, but each item earns its place as scope definition.

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 detailed — yet the description goes further and explains what the numbers mean (Brier score, reliability buckets) and that misses are retained, which is exactly the interpretive context an agent needs. The only gap is that it never frames the purpose for which an agent should call it.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'days' parameter's schema text ('Lookback window in days (default 90)') is identical to the description's wording. The description adds no semantics — no format hints, no effect of the window on results — so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — returns the model's public calibration record — and enumerates the exact contents (count, hit rate, Brier score, reliability buckets, by question type). This is unmistakably different from every sibling tool, which serve football fixtures/results/tables rather than model-scoring metadata.

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: an agent can infer this is for auditing model accuracy, but the description never says when to reach for it (e.g. before trusting a prediction) or whether any sibling overlaps. No alternatives or exclusions are named, leaving the agent to infer the context.

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

list_leaguesList leaguesA
Read-onlyIdempotent
Inspect

Returns every league covered (93 across 42 countries) with its league key, display name, country and the seasons available, newest first. Other tools take these league keys and season strings. Season format depends on the competition: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues. No parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
leaguesYes
attributionNoCite as "Data by football-charts.com"
season_windowNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety and side-effect profile is covered. The description adds real behavioral context beyond that: the result set is exhaustive (93 leagues / 42 countries), ordered newest-first, and takes no parameters. It stops short of describing pagination or output shape, but that is minor given the output schema.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what is returned and how many, followed by the downstream-key relationship and the season-format detail. Every sentence carries distinct information with no redundancy.

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

Completeness5/5

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

For a no-parameter enumeration tool with an output schema already defining the return shape, the description covers scope, ordering, and the cross-tool contract for keys and season strings. An agent has everything needed to call it and to use its output correctly.

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?

With zero parameters, the baseline is 4. The description goes further by documenting the season string format used by consuming tools ('2026-2027' for winter-calendar, '2026' for summer-calendar), which adds meaning an agent would otherwise have to guess.

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 ('Returns every league covered') and enumerates exactly what each entry contains: league key, display name, country, and available seasons. This is clearly distinguishable from siblings like get_league_table or get_fixtures, which operate on a single league rather than enumerating all of them.

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

Usage Guidelines4/5

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

The description situates the tool in a workflow: 'Other tools take these league keys and season strings,' making it clear this is a discovery/lookup call that feeds downstream tools. It does not state explicit exclusions or when-not-to-use conditions, so it falls short of a 5.

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

Tool Schema Changelog

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

  1. 9 tool updates
    • Changedget_fixtures1 field changed
      • changedOutput schema / properties / matches / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "away_team": {
        -          "type": "string"
        -        },
        -        "country": {
        -          "$ref": "#/properties/league"
        -        },
        -        "home_team": {
        -          "type": "string"
        -        },
        -        "league": {
        -          "$ref": "#/properties/league"
        -        },
        -        "match_date": {
        -          "$ref": "#/properties/league"
        -        },
        -        "model_predictions": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "properties": {
        -                "dc_v2": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": true,
        -                      "properties": {
        -                        "calibrated": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": true,
        -                              "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        -                              "properties": {
        -                                "away": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "btts_yes": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "expected_away_goals": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "expected_home_goals": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "expected_ht_goals": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "home": {},
        -                                "ht_over_0.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "ht_over_1.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "over_0.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "over_1.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "over_2.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "over_3.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                },
        -                                "over_4.5": {
        -                                  "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Use these. Calibrated on settled matches."
        -                        },
        -                        "computed_at": {
        -                          "$ref": "#/properties/league"
        -                        },
        -                        "data_through": {
        -                          "$ref": "#/properties/league",
        -                          "description": "Last match date the model has seen"
        -                        },
        -                        "model": {
        -                          "$ref": "#/properties/league"
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "real_league_name": {
        -          "$ref": "#/properties/league"
        -        },
        -        "slug": {
        -          "description": "Input to get_match",
        -          "type": "string"
        -        },
        -        "status": {
        -          "$ref": "#/properties/league"
        -        },
        -        "time": {
        -          "$ref": "#/properties/league"
        -        }
        -      },
        -      "required": [
        -        "slug",
        -        "home_team",
        -        "away_team"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "away_team": {
        +          "type": "string"
        +        },
        +        "country": {},
        +        "home_team": {
        +          "type": "string"
        +        },
        +        "league": {},
        +        "match_date": {},
        +        "model_predictions": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dc_v2": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": true,
        +                      "properties": {
        +                        "calibrated": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": true,
        +                              "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        +                              "properties": {
        +                                "away": {},
        +                                "btts_yes": {},
        +                                "expected_away_goals": {},
        +                                "expected_home_goals": {},
        +                                "expected_ht_goals": {},
        +                                "home": {},
        +                                "ht_over_0.5": {},
        +                                "ht_over_1.5": {},
        +                                "over_0.5": {},
        +                                "over_1.5": {},
        +                                "over_2.5": {},
        +                                "over_3.5": {},
        +                                "over_4.5": {}
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Use these. Calibrated on settled matches."
        +                        },
        +                        "computed_at": {},
        +                        "data_through": {
        +                          "description": "Last match date the model has seen"
        +                        },
        +                        "model": {}
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "real_league_name": {},
        +        "slug": {
        +          "description": "Input to get_match",
        +          "type": "string"
        +        },
        +        "status": {},
        +        "time": {}
        +      },
        +      "required": [
        +        "slug",
        +        "home_team",
        +        "away_team"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_goal_timing6 fields changed
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "bins": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": {
        -                "type": "number"
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Goals per bin: '0-15','15-30','30-45','45+','46-60','60-75','75-90','90+'"
        -        },
        -        "first_half_pct": {
        -          "$ref": "#/properties/data/anyOf/0/items/properties/late_share_pct"
        -        },
        -        "late_share_pct": {
        -          "description": "% of goals from 75′ on"
        -        },
        -        "peak_bins": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Bin(s) with most goals — ties are listed; report a tie as a tie"
        -        },
        -        "peak_goals": {
        -          "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        -        },
        -        "team": {
        -          "type": "string"
        -        },
        -        "total": {
        -          "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        -        }
        -      },
        -      "required": [
        -        "team"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "bins": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "type": "number"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Goals per bin: '0-15','15-30','30-45','45+','46-60','60-75','75-90','90+'"
        +        },
        +        "first_half_pct": {},
        +        "late_share_pct": {
        +          "description": "% of goals from 75′ on"
        +        },
        +        "peak_bins": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Bin(s) with most goals — ties are listed; report a tie as a tie"
        +        },
        +        "peak_goals": {},
        +        "team": {
        +          "type": "string"
        +        },
        +        "total": {}
        +      },
        +      "required": [
        +        "team"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / note / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / season / $ref
        Removed value: -"#/properties/league"
      • changedOutput schema / properties / stats / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "late_goals": {
        -        "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        -      },
        -      "match_count": {
        -        "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        -      },
        -      "most_active_period": {
        -        "$ref": "#/properties/league"
        -      },
        -      "total_goals": {}
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "late_goals": {},
        +      "match_count": {},
        +      "most_active_period": {},
        +      "total_goals": {}
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / team_filter / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / team_not_found / $ref
        Removed value: -"#/properties/league"
    • Changedget_league_table5 fields changed
      • removedOutput schema / properties / current_season / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / season / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / season_state / $ref
        Removed value: -"#/properties/league"
      • changedOutput schema / properties / table / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "avg_goals_conceded": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/avg_goals_scored"
        -        },
        -        "avg_goals_scored": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/expected_points"
        -        },
        -        "clean_sheets": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "drawn": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "expected_points": {
        -          "description": "Points the underlying numbers say the team should have"
        -        },
        -        "expected_position": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "goal_difference": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "goals_against": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "goals_for": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "last_5_form": {
        -          "$ref": "#/properties/league",
        -          "description": "Latest results as letters, e.g. 'WWDLW'"
        -        },
        -        "last_5_points": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "lost": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "luck_category": {
        -          "$ref": "#/properties/league",
        -          "description": "'lucky' | 'fair' | 'unlucky'"
        -        },
        -        "luck_difference": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/expected_points",
        -          "description": "points − expected_points; positive = ahead of the numbers"
        -        },
        -        "over_25_percentage": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/avg_goals_scored"
        -        },
        -        "played": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "points": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        },
        -        "position": {},
        -        "team": {
        -          "type": "string"
        -        },
        -        "won": {
        -          "$ref": "#/properties/table/anyOf/0/items/properties/position"
        -        }
        -      },
        -      "required": [
        -        "team"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "avg_goals_conceded": {},
        +        "avg_goals_scored": {},
        +        "clean_sheets": {},
        +        "drawn": {},
        +        "expected_points": {
        +          "description": "Points the underlying numbers say the team should have"
        +        },
        +        "expected_position": {},
        +        "goal_difference": {},
        +        "goals_against": {},
        +        "goals_for": {},
        +        "last_5_form": {
        +          "description": "Latest results as letters, e.g. 'WWDLW'"
        +        },
        +        "last_5_points": {},
        +        "lost": {},
        +        "luck_category": {
        +          "description": "'lucky' | 'fair' | 'unlucky'"
        +        },
        +        "luck_difference": {
        +          "description": "points − expected_points; positive = ahead of the numbers"
        +        },
        +        "over_25_percentage": {},
        +        "played": {},
        +        "points": {},
        +        "position": {},
        +        "team": {
        +          "type": "string"
        +        },
        +        "won": {}
        +      },
        +      "required": [
        +        "team"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / view / $ref
        Removed value: -"#/properties/league"
    • Changedget_match13 fields changed
      • removedOutput schema / properties / match / properties / away_score / $ref
        Removed value: -"#/properties/match/properties/home_score"
      • removedOutput schema / properties / match / properties / away_team / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / country / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / home_team / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / ht_result / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / label / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / league / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / match_date / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / match_status / $ref
        Removed value: -"#/properties/match/properties/slug"
      • changedOutput schema / properties / match / properties / model_predictions / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "dc_v2": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {
        -              "calibrated": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": true,
        -                    "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        -                    "properties": {
        -                      "away": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "btts_yes": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "expected_away_goals": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "expected_home_goals": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "expected_ht_goals": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "home": {},
        -                      "ht_over_0.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "ht_over_1.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "over_0.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "over_1.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "over_2.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "over_3.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      },
        -                      "over_4.5": {
        -                        "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Use these. Calibrated on settled matches."
        -              },
        -              "computed_at": {
        -                "$ref": "#/properties/match/properties/slug"
        -              },
        -              "data_through": {
        -                "$ref": "#/properties/match/properties/slug",
        -                "description": "Last match date the model has seen"
        -              },
        -              "model": {
        -                "$ref": "#/properties/match/properties/slug"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "dc_v2": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "calibrated": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": true,
        +                    "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        +                    "properties": {
        +                      "away": {},
        +                      "btts_yes": {},
        +                      "expected_away_goals": {},
        +                      "expected_home_goals": {},
        +                      "expected_ht_goals": {},
        +                      "home": {},
        +                      "ht_over_0.5": {},
        +                      "ht_over_1.5": {},
        +                      "over_0.5": {},
        +                      "over_1.5": {},
        +                      "over_2.5": {},
        +                      "over_3.5": {},
        +                      "over_4.5": {}
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Use these. Calibrated on settled matches."
        +              },
        +              "computed_at": {},
        +              "data_through": {
        +                "description": "Last match date the model has seen"
        +              },
        +              "model": {}
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / match / properties / real_league_name / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / season / $ref
        Removed value: -"#/properties/match/properties/slug"
      • removedOutput schema / properties / match / properties / time / $ref
        Removed value: -"#/properties/match/properties/slug"
    • Changedget_results5 fields changed
      • removedOutput schema / properties / current_season / $ref
        Removed value: -"#/properties/league"
      • changedOutput schema / properties / matches / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "awayTeam": {
        -          "type": "string"
        -        },
        -        "date": {
        -          "$ref": "#/properties/league"
        -        },
        -        "first_goal_time": {
        -          "$ref": "#/properties/count",
        -          "description": "Minute of the first goal; null when goalless"
        -        },
        -        "first_goal_time_extra": {
        -          "$ref": "#/properties/count",
        -          "description": "Stoppage-time minutes added to first_goal_time"
        -        },
        -        "goalless": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "homeTeam": {
        -          "type": "string"
        -        },
        -        "ht_result": {
        -          "$ref": "#/properties/league",
        -          "description": "Half-time 'home:away'"
        -        },
        -        "score": {
        -          "$ref": "#/properties/league",
        -          "description": "Full-time 'home:away', e.g. '3:0'"
        -        },
        -        "time": {
        -          "$ref": "#/properties/league"
        -        }
        -      },
        -      "required": [
        -        "homeTeam",
        -        "awayTeam"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "awayTeam": {
        +          "type": "string"
        +        },
        +        "date": {},
        +        "first_goal_time": {
        +          "description": "Minute of the first goal; null when goalless"
        +        },
        +        "first_goal_time_extra": {
        +          "description": "Stoppage-time minutes added to first_goal_time"
        +        },
        +        "goalless": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "homeTeam": {
        +          "type": "string"
        +        },
        +        "ht_result": {
        +          "description": "Half-time 'home:away'"
        +        },
        +        "score": {
        +          "description": "Full-time 'home:away', e.g. '3:0'"
        +        },
        +        "time": {}
        +      },
        +      "required": [
        +        "homeTeam",
        +        "awayTeam"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / note / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / season / $ref
        Removed value: -"#/properties/league"
      • removedOutput schema / properties / season_state / $ref
        Removed value: -"#/properties/league"
    • Changedget_season_projection2 fields changed
      • removedOutput schema / properties / note / $ref
        Removed value: -"#/properties/projection/anyOf/0/properties/league"
      • changedOutput schema / properties / projection / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "deltas_vs_prev": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "bottom3": {
        -                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -                },
        -                "title": {
        -                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -                },
        -                "top4": {
        -                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Change since the previous run"
        -      },
        -      "expected_remaining": {
        -        "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -      },
        -      "league": {},
        -      "n_sims": {},
        -      "partial_schedule": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "run_date": {
        -        "$ref": "#/properties/projection/anyOf/0/properties/league"
        -      },
        -      "scheduled_remaining": {
        -        "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -      },
        -      "season": {
        -        "$ref": "#/properties/projection/anyOf/0/properties/league"
        -      },
        -      "teams": {
        -        "additionalProperties": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "bottom1": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -            },
        -            "bottom2": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -            },
        -            "bottom3": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title",
        -              "description": "Relegation-zone probability (bottom three)"
        -            },
        -            "gd_now": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -            },
        -            "mean_pts": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -            },
        -            "p10_pts": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -            },
        -            "p90_pts": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -            },
        -            "played": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -            },
        -            "position_matrix": {
        -              "anyOf": [
        -                {
        -                  "items": {
        -                    "type": "number"
        -                  },
        -                  "type": "array"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Probability of finishing 1st…last"
        -            },
        -            "pts_now": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        -            },
        -            "title": {},
        -            "top4": {
        -              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "description": "Keyed by team name",
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "teams"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "deltas_vs_prev": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "bottom3": {},
        +                "title": {},
        +                "top4": {}
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Change since the previous run"
        +      },
        +      "expected_remaining": {},
        +      "league": {},
        +      "n_sims": {},
        +      "partial_schedule": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "run_date": {},
        +      "scheduled_remaining": {},
        +      "season": {},
        +      "teams": {
        +        "additionalProperties": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "bottom1": {},
        +            "bottom2": {},
        +            "bottom3": {
        +              "description": "Relegation-zone probability (bottom three)"
        +            },
        +            "gd_now": {},
        +            "mean_pts": {},
        +            "p10_pts": {},
        +            "p90_pts": {},
        +            "played": {},
        +            "position_matrix": {
        +              "anyOf": [
        +                {
        +                  "items": {
        +                    "type": "number"
        +                  },
        +                  "type": "array"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Probability of finishing 1st…last"
        +            },
        +            "pts_now": {},
        +            "title": {},
        +            "top4": {}
        +          },
        +          "type": "object"
        +        },
        +        "description": "Keyed by team name",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "teams"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_team7 fields changed
      • changedOutput schema / properties / first_goal_bins / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "count": {
        -          "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -        },
        -        "time": {
        -          "$ref": "#/properties/team"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "count": {},
        +        "time": {}
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / league / $ref
        Removed value: -"#/properties/team"
      • changedOutput schema / properties / matches / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "away": {
        -          "$ref": "#/properties/team"
        -        },
        -        "date": {
        -          "$ref": "#/properties/team"
        -        },
        -        "first_goal_time": {
        -          "$ref": "#/properties/team"
        -        },
        -        "home": {
        -          "$ref": "#/properties/team"
        -        },
        -        "ht": {
        -          "$ref": "#/properties/team"
        -        },
        -        "outcome": {
        -          "$ref": "#/properties/team",
        -          "description": "'W' | 'D' | 'L'"
        -        },
        -        "score": {
        -          "$ref": "#/properties/team"
        -        },
        -        "time": {
        -          "$ref": "#/properties/team"
        -        },
        -        "venue": {
        -          "$ref": "#/properties/team",
        -          "description": "'H' or 'A'"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "away": {},
        +        "date": {},
        +        "first_goal_time": {},
        +        "home": {},
        +        "ht": {},
        +        "outcome": {
        +          "description": "'W' | 'D' | 'L'"
        +        },
        +        "score": {},
        +        "time": {},
        +        "venue": {
        +          "description": "'H' or 'A'"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / ranking / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "avg_goals_conceded": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "avg_goals_scored": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/expected_points"
        -      },
        -      "clean_sheets": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "drawn": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "expected_points": {
        -        "description": "Points the underlying numbers say the team should have"
        -      },
        -      "expected_position": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "goal_difference": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "goals_against": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "goals_for": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "last_5_form": {
        -        "$ref": "#/properties/team",
        -        "description": "Latest results as letters, e.g. 'WWDLW'"
        -      },
        -      "last_5_points": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "lost": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "luck_category": {
        -        "$ref": "#/properties/team",
        -        "description": "'lucky' | 'fair' | 'unlucky'"
        -      },
        -      "luck_difference": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/expected_points",
        -        "description": "points − expected_points; positive = ahead of the numbers"
        -      },
        -      "over_25_percentage": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "played": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "points": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "position": {},
        -      "team": {
        -        "type": "string"
        -      },
        -      "won": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      }
        -    },
        -    "required": [
        -      "team"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "avg_goals_conceded": {},
        +      "avg_goals_scored": {},
        +      "clean_sheets": {},
        +      "drawn": {},
        +      "expected_points": {
        +        "description": "Points the underlying numbers say the team should have"
        +      },
        +      "expected_position": {},
        +      "goal_difference": {},
        +      "goals_against": {},
        +      "goals_for": {},
        +      "last_5_form": {
        +        "description": "Latest results as letters, e.g. 'WWDLW'"
        +      },
        +      "last_5_points": {},
        +      "lost": {},
        +      "luck_category": {
        +        "description": "'lucky' | 'fair' | 'unlucky'"
        +      },
        +      "luck_difference": {
        +        "description": "points − expected_points; positive = ahead of the numbers"
        +      },
        +      "over_25_percentage": {},
        +      "played": {},
        +      "points": {},
        +      "position": {},
        +      "team": {
        +        "type": "string"
        +      },
        +      "won": {}
        +    },
        +    "required": [
        +      "team"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / season / $ref
        Removed value: -"#/properties/team"
      • removedOutput schema / properties / slug / $ref
        Removed value: -"#/properties/team"
      • changedOutput schema / properties / stats / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "corners_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "matches_with_stats": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/position"
        -      },
        -      "possession_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "shots_against_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "shots_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "shots_on_target_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "xg_against_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      },
        -      "xg_avg": {
        -        "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "corners_avg": {},
        +      "matches_with_stats": {},
        +      "possession_avg": {},
        +      "shots_against_avg": {},
        +      "shots_avg": {},
        +      "shots_on_target_avg": {},
        +      "xg_against_avg": {},
        +      "xg_avg": {}
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_track_record5 fields changed
      • changedOutput schema / properties / track_record / properties / accuracy / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "brier": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate",
        -        "description": "Brier score over scored probabilities; lower is better, 0.25 = coin flip"
        -      },
        -      "buckets": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "avg_prob": {
        -                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        -                },
        -                "hi": {
        -                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        -                },
        -                "hit_rate": {
        -                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        -                },
        -                "lo": {
        -                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        -                },
        -                "n": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "n": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "brier": {
        +        "description": "Brier score over scored probabilities; lower is better, 0.25 = coin flip"
        +      },
        +      "buckets": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avg_prob": {},
        +                "hi": {},
        +                "hit_rate": {},
        +                "lo": {},
        +                "n": {}
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "n": {}
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / track_record / properties / by_question / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": {
        -      "$ref": "#/properties/track_record/properties/summary/anyOf/0"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "correct": {},
        +        "hit_rate": {
        +          "description": "correct / (correct + incorrect)"
        +        },
        +        "incorrect": {},
        +        "n": {
        +          "description": "Scored predictions"
        +        },
        +        "void": {
        +          "description": "Postponed or abandoned; not scored"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / track_record / properties / pending / $ref
        Removed value: -"#/properties/track_record/properties/summary/anyOf/0/properties/n"
      • changedOutput schema / properties / track_record / properties / recent / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "away_team": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "home_team": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "league": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "line": {
        -          "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -        },
        -        "match_date": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "model_prob": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        -        },
        -        "outcome": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug",
        -          "description": "'correct' | 'incorrect' | 'void'"
        -        },
        -        "question": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "result_score": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "side": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "slug": {}
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "away_team": {},
        +        "home_team": {},
        +        "league": {},
        +        "line": {},
        +        "match_date": {},
        +        "model_prob": {},
        +        "outcome": {
        +          "description": "'correct' | 'incorrect' | 'void'"
        +        },
        +        "question": {},
        +        "result_score": {},
        +        "side": {},
        +        "slug": {}
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / track_record / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "correct": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -      },
        -      "hit_rate": {
        -        "description": "correct / (correct + incorrect)"
        -      },
        -      "incorrect": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        -      },
        -      "n": {
        -        "description": "Scored predictions"
        -      },
        -      "void": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n",
        -        "description": "Postponed or abandoned; not scored"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "correct": {},
        +      "hit_rate": {
        +        "description": "correct / (correct + incorrect)"
        +      },
        +      "incorrect": {},
        +      "n": {
        +        "description": "Scored predictions"
        +      },
        +      "void": {
        +        "description": "Postponed or abandoned; not scored"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_leagues1 field changed
      • removedOutput schema / properties / season_window / $ref
        Removed value: -"#/properties/leagues/items/properties/url"
  2. 8 tool updates
    • Changedabout_football_charts7 fields changed
      • addedOutput schema / properties / covers
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / do_not_use_for
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / how_to_answer_well
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / properties / not_held
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / use_this_source_when
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "what",
        -  "use_this_source_when",
        -  "do_not_use_for",
        -  "how_to_answer_well",
        -  "free_tier",
        -  "get_a_key",
        -  "tools"
        -]New value: +[
        +  "what",
        +  "covers",
        +  "not_held",
        +  "notes",
        +  "free_tier",
        +  "get_a_key",
        +  "tools"
        +]
    • Changedget_fixtures1 field changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
    • Changedget_goal_timing2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
      • changedInput schema / properties / season / description
        Previous value: -"Season string exactly as list_leagues returns it: winter-calendar leagues look like '2026-2027', summer-calendar leagues (Brazil, Sweden, Norway, Japan…) like '2026'. Omit for the current season. The free tier serves the current and previous season only."New value: +"Season string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season."
    • Changedget_league_table2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
      • changedInput schema / properties / season / description
        Previous value: -"Season string exactly as list_leagues returns it: winter-calendar leagues look like '2026-2027', summer-calendar leagues (Brazil, Sweden, Norway, Japan…) like '2026'. Omit for the current season. The free tier serves the current and previous season only."New value: +"Season string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season."
    • Changedget_match1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Match slug from get_fixtures, e.g. 'england/premier-league/2026-09-05-brentford-vs-sunderland'"New value: +"Match slug as listed in upcoming fixtures, e.g. 'england/premier-league/2026-09-05-brentford-vs-sunderland'"
    • Changedget_results2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
      • changedInput schema / properties / season / description
        Previous value: -"Season string exactly as list_leagues returns it: winter-calendar leagues look like '2026-2027', summer-calendar leagues (Brazil, Sweden, Norway, Japan…) like '2026'. Omit for the current season. The free tier serves the current and previous season only."New value: +"Season string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season."
    • Changedget_season_projection1 field changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
    • Changedget_team2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."New value: +"League key as listed by list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name."
      • changedInput schema / properties / season / description
        Previous value: -"Season string exactly as list_leagues returns it: winter-calendar leagues look like '2026-2027', summer-calendar leagues (Brazil, Sweden, Norway, Japan…) like '2026'. Omit for the current season. The free tier serves the current and previous season only."New value: +"Season string as listed by list_leagues: '2026-2027' for winter-calendar leagues, '2026' for summer-calendar leagues (Brazil, Sweden, Norway, Japan…). Omit for the current season. The free tier serves the current and previous season."
  3. 2 tool updates
    • Changedget_season_projection7 fields changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/projection/anyOf/0/properties/league",
        +  "description": "Set when no projection exists for the league yet"
        +}
      • removedOutput schema / properties / projection / additionalProperties
        Removed value: -true
      • addedOutput schema / properties / projection / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "deltas_vs_prev": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "bottom3": {
        +                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +                },
        +                "title": {
        +                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +                },
        +                "top4": {
        +                  "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Change since the previous run"
        +      },
        +      "expected_remaining": {
        +        "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +      },
        +      "league": {},
        +      "n_sims": {},
        +      "partial_schedule": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "run_date": {
        +        "$ref": "#/properties/projection/anyOf/0/properties/league"
        +      },
        +      "scheduled_remaining": {
        +        "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +      },
        +      "season": {
        +        "$ref": "#/properties/projection/anyOf/0/properties/league"
        +      },
        +      "teams": {
        +        "additionalProperties": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "bottom1": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +            },
        +            "bottom2": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +            },
        +            "bottom3": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title",
        +              "description": "Relegation-zone probability (bottom three)"
        +            },
        +            "gd_now": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +            },
        +            "mean_pts": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +            },
        +            "p10_pts": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +            },
        +            "p90_pts": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +            },
        +            "played": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +            },
        +            "position_matrix": {
        +              "anyOf": [
        +                {
        +                  "items": {
        +                    "type": "number"
        +                  },
        +                  "type": "array"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Probability of finishing 1st…last"
        +            },
        +            "pts_now": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/n_sims"
        +            },
        +            "title": {},
        +            "top4": {
        +              "$ref": "#/properties/projection/anyOf/0/properties/teams/additionalProperties/properties/title"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "description": "Keyed by team name",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "teams"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projection / properties
        Removed value: -{
        -  "deltas_vs_prev": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": {
        -          "additionalProperties": true,
        -          "properties": {
        -            "bottom3": {
        -              "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -            },
        -            "title": {
        -              "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -            },
        -            "top4": {
        -              "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "object"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "description": "Change since the previous run"
        -  },
        -  "expected_remaining": {
        -    "$ref": "#/properties/projection/properties/n_sims"
        -  },
        -  "league": {},
        -  "n_sims": {},
        -  "partial_schedule": {
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "run_date": {
        -    "$ref": "#/properties/projection/properties/league"
        -  },
        -  "scheduled_remaining": {
        -    "$ref": "#/properties/projection/properties/n_sims"
        -  },
        -  "season": {
        -    "$ref": "#/properties/projection/properties/league"
        -  },
        -  "teams": {
        -    "additionalProperties": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "bottom1": {
        -          "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -        },
        -        "bottom2": {
        -          "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -        },
        -        "bottom3": {
        -          "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title",
        -          "description": "Relegation-zone probability (bottom three)"
        -        },
        -        "gd_now": {
        -          "$ref": "#/properties/projection/properties/n_sims"
        -        },
        -        "mean_pts": {
        -          "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -        },
        -        "p10_pts": {
        -          "$ref": "#/properties/projection/properties/n_sims"
        -        },
        -        "p90_pts": {
        -          "$ref": "#/properties/projection/properties/n_sims"
        -        },
        -        "played": {
        -          "$ref": "#/properties/projection/properties/n_sims"
        -        },
        -        "position_matrix": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "type": "number"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Probability of finishing 1st…last"
        -        },
        -        "pts_now": {
        -          "$ref": "#/properties/projection/properties/n_sims"
        -        },
        -        "title": {},
        -        "top4": {
        -          "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "description": "Keyed by team name",
        -    "type": "object"
        -  }
        -}
      • removedOutput schema / properties / projection / required
        Removed value: -[
        -  "teams"
        -]
      • removedOutput schema / properties / projection / type
        Removed value: -"object"
      • removedOutput schema / required
        Removed value: -[
        -  "projection"
        -]
    • Changedget_track_record8 fields changed
      • changedOutput schema / properties / track_record / properties / accuracy / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "brier": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/pl",
        -        "description": "Brier score over settled probabilities; lower is better, 0.25 = coin flip"
        -      },
        -      "buckets": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "avg_prob": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -                },
        -                "hi": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -                },
        -                "hit_rate": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -                },
        -                "lo": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -                },
        -                "n": {
        -                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "n": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "brier": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate",
        +        "description": "Brier score over scored probabilities; lower is better, 0.25 = coin flip"
        +      },
        +      "buckets": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "avg_prob": {
        +                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        +                },
        +                "hi": {
        +                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        +                },
        +                "hit_rate": {
        +                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        +                },
        +                "lo": {
        +                  "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        +                },
        +                "n": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "n": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / track_record / properties / by_market
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ]
        -}
      • addedOutput schema / properties / track_record / properties / by_question
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / track_record / properties / pending / description
        Previous value: -"Leans published but not yet settled"New value: +"Published but not yet scored"
      • changedOutput schema / properties / track_record / properties / recent / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "market": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "model_prob": {
        -          "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -        },
        -        "outcome": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug",
        -          "description": "'won' | 'lost' | 'void'"
        -        },
        -        "pl": {
        -          "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        -        },
        -        "result_score": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "side": {
        -          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        -        },
        -        "slug": {}
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "away_team": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "home_team": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "league": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "line": {
        +          "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +        },
        +        "match_date": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "model_prob": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/line"
        +        },
        +        "outcome": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug",
        +          "description": "'correct' | 'incorrect' | 'void'"
        +        },
        +        "question": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "result_score": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "side": {
        +          "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +        },
        +        "slug": {}
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / track_record / properties / recent / description
        Previous value: -"The 50 most recent graded predictions"New value: +"The 50 most recent scored predictions"
      • removedOutput schema / properties / track_record / properties / signals_only
        Removed value: -{
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / track_record / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "hit_rate": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/pl"
        -      },
        -      "lost": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -      },
        -      "n": {},
        -      "pl": {
        -        "description": "Profit/loss in units at flat 1-unit stakes"
        -      },
        -      "void": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -      },
        -      "won": {
        -        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "correct": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +      },
        +      "hit_rate": {
        +        "description": "correct / (correct + incorrect)"
        +      },
        +      "incorrect": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/correct"
        +      },
        +      "n": {
        +        "description": "Scored predictions"
        +      },
        +      "void": {
        +        "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n",
        +        "description": "Postponed or abandoned; not scored"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  4. 2 tool updates
    • Changedget_team1 field changed
      • addedOutput schema / properties / stats
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "corners_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "matches_with_stats": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +        },
        +        "possession_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "shots_against_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "shots_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "shots_on_target_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "xg_against_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        },
        +        "xg_avg": {
        +          "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Per-match averages over this season, computed from stored match statistics; null where the league has none"
        +}
    • Changedget_track_record1 field changed
      • changedOutput schema / properties / track_record / properties / recent / description
        Previous value: -"The 50 most recent graded leans"New value: +"The 50 most recent graded predictions"
  5. 10 tool updates
    • Changedabout_football_charts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "do_not_use_for": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "free_tier": {
        +      "type": "string"
        +    },
        +    "get_a_key": {
        +      "type": "string"
        +    },
        +    "how_to_answer_well": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "tools": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "use_this_source_when": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "what": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "what",
        +    "use_this_source_when",
        +    "do_not_use_for",
        +    "how_to_answer_well",
        +    "free_tier",
        +    "get_a_key",
        +    "tools"
        +  ],
        +  "type": "object"
        +}
    • Changedget_fixtures1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "count": {},
        +    "league": {},
        +    "matches": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "away_team": {
        +                "type": "string"
        +              },
        +              "country": {
        +                "$ref": "#/properties/league"
        +              },
        +              "home_team": {
        +                "type": "string"
        +              },
        +              "league": {
        +                "$ref": "#/properties/league"
        +              },
        +              "match_date": {
        +                "$ref": "#/properties/league"
        +              },
        +              "model_predictions": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "dc_v2": {
        +                        "anyOf": [
        +                          {
        +                            "additionalProperties": true,
        +                            "properties": {
        +                              "calibrated": {
        +                                "anyOf": [
        +                                  {
        +                                    "additionalProperties": true,
        +                                    "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        +                                    "properties": {
        +                                      "away": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "btts_yes": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "expected_away_goals": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "expected_home_goals": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "expected_ht_goals": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "home": {},
        +                                      "ht_over_0.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "ht_over_1.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "over_0.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "over_1.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "over_2.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "over_3.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      },
        +                                      "over_4.5": {
        +                                        "$ref": "#/properties/matches/anyOf/0/items/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                      }
        +                                    },
        +                                    "type": "object"
        +                                  },
        +                                  {
        +                                    "type": "null"
        +                                  }
        +                                ],
        +                                "description": "Use these. Calibrated on settled matches."
        +                              },
        +                              "computed_at": {
        +                                "$ref": "#/properties/league"
        +                              },
        +                              "data_through": {
        +                                "$ref": "#/properties/league",
        +                                "description": "Last match date the model has seen"
        +                              },
        +                              "model": {
        +                                "$ref": "#/properties/league"
        +                              }
        +                            },
        +                            "type": "object"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "real_league_name": {
        +                "$ref": "#/properties/league"
        +              },
        +              "slug": {
        +                "description": "Input to get_match",
        +                "type": "string"
        +              },
        +              "status": {
        +                "$ref": "#/properties/league"
        +              },
        +              "time": {
        +                "$ref": "#/properties/league"
        +              }
        +            },
        +            "required": [
        +              "slug",
        +              "home_team",
        +              "away_team"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_goal_timing2 fields changed
      • changedInput schema / properties / team / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "data": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "bins": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "number"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Goals per bin: '0-15','15-30','30-45','45+','46-60','60-75','75-90','90+'"
        +              },
        +              "first_half_pct": {
        +                "$ref": "#/properties/data/anyOf/0/items/properties/late_share_pct"
        +              },
        +              "late_share_pct": {
        +                "description": "% of goals from 75′ on"
        +              },
        +              "peak_bins": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Bin(s) with most goals — ties are listed; report a tie as a tie"
        +              },
        +              "peak_goals": {
        +                "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        +              },
        +              "team": {
        +                "type": "string"
        +              },
        +              "total": {
        +                "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        +              }
        +            },
        +            "required": [
        +              "team"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "league": {},
        +    "note": {
        +      "$ref": "#/properties/league"
        +    },
        +    "season": {
        +      "$ref": "#/properties/league"
        +    },
        +    "stats": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "late_goals": {
        +              "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        +            },
        +            "match_count": {
        +              "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
        +            },
        +            "most_active_period": {
        +              "$ref": "#/properties/league"
        +            },
        +            "total_goals": {}
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "team_filter": {
        +      "$ref": "#/properties/league"
        +    },
        +    "team_not_found": {
        +      "$ref": "#/properties/league"
        +    },
        +    "time_bins": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_league_table5 fields changed
      • addedInput schema / properties / view / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "classic",
        +      "luck",
        +      "goals"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / view / description
        Previous value: -"Ranking view; default 'classic'"New value: +"Row order; default 'classic' (by points)"
      • removedInput schema / properties / view / enum
        Removed value: -[
        -  "classic",
        -  "luck",
        -  "goals"
        -]
      • removedInput schema / properties / view / type
        Removed value: -"string"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "current_season": {
        +      "$ref": "#/properties/league"
        +    },
        +    "league": {},
        +    "season": {
        +      "$ref": "#/properties/league"
        +    },
        +    "season_state": {
        +      "$ref": "#/properties/league",
        +      "description": "'in_season' or 'finished'"
        +    },
        +    "table": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "avg_goals_conceded": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/avg_goals_scored"
        +              },
        +              "avg_goals_scored": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/expected_points"
        +              },
        +              "clean_sheets": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "drawn": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "expected_points": {
        +                "description": "Points the underlying numbers say the team should have"
        +              },
        +              "expected_position": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "goal_difference": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "goals_against": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "goals_for": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "last_5_form": {
        +                "$ref": "#/properties/league",
        +                "description": "Latest results as letters, e.g. 'WWDLW'"
        +              },
        +              "last_5_points": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "lost": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "luck_category": {
        +                "$ref": "#/properties/league",
        +                "description": "'lucky' | 'fair' | 'unlucky'"
        +              },
        +              "luck_difference": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/expected_points",
        +                "description": "points − expected_points; positive = ahead of the numbers"
        +              },
        +              "over_25_percentage": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/avg_goals_scored"
        +              },
        +              "played": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "points": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              },
        +              "position": {},
        +              "team": {
        +                "type": "string"
        +              },
        +              "won": {
        +                "$ref": "#/properties/table/anyOf/0/items/properties/position"
        +              }
        +            },
        +            "required": [
        +              "team"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "view": {
        +      "$ref": "#/properties/league"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_match1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "match": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "away_score": {
        +          "$ref": "#/properties/match/properties/home_score"
        +        },
        +        "away_team": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "country": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "fgt_a": {
        +          "anyOf": [
        +            {
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Away side first-goal-time histogram"
        +        },
        +        "fgt_h": {
        +          "anyOf": [
        +            {
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Home side first-goal-time histogram"
        +        },
        +        "home_score": {},
        +        "home_team": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "ht_result": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "label": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "league": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "match_date": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "match_status": {
        +          "$ref": "#/properties/match/properties/slug",
        +          "description": "'scheduled' before kick-off; 'ft' when finished"
        +        },
        +        "model_predictions": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "dc_v2": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": true,
        +                      "properties": {
        +                        "calibrated": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": true,
        +                              "description": "Probabilities 0–1. The draw is NOT a field: draw = 1 − home − away.",
        +                              "properties": {
        +                                "away": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "btts_yes": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "expected_away_goals": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "expected_home_goals": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "expected_ht_goals": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "home": {},
        +                                "ht_over_0.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "ht_over_1.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "over_0.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "over_1.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "over_2.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "over_3.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                },
        +                                "over_4.5": {
        +                                  "$ref": "#/properties/match/properties/model_predictions/anyOf/0/properties/dc_v2/anyOf/0/properties/calibrated/anyOf/0/properties/home"
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Use these. Calibrated on settled matches."
        +                        },
        +                        "computed_at": {
        +                          "$ref": "#/properties/match/properties/slug"
        +                        },
        +                        "data_through": {
        +                          "$ref": "#/properties/match/properties/slug",
        +                          "description": "Last match date the model has seen"
        +                        },
        +                        "model": {
        +                          "$ref": "#/properties/match/properties/slug"
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "real_league_name": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "season": {
        +          "$ref": "#/properties/match/properties/slug"
        +        },
        +        "slug": {},
        +        "time": {
        +          "$ref": "#/properties/match/properties/slug"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "match"
        +  ],
        +  "type": "object"
        +}
    • Changedget_results7 fields changed
      • addedInput schema / properties / last / anyOf
        Added value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / last / description
        Previous value: -"Return only the N most recent matches (default: all)"New value: +"Keep only the N latest matches of the season, e.g. 5 for recent form (default: all)"
      • removedInput schema / properties / last / maximum
        Removed value: -500
      • removedInput schema / properties / last / minimum
        Removed value: -1
      • removedInput schema / properties / last / type
        Removed value: -"integer"
      • changedInput schema / properties / team / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "count": {},
        +    "current_season": {
        +      "$ref": "#/properties/league"
        +    },
        +    "league": {},
        +    "matches": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "awayTeam": {
        +                "type": "string"
        +              },
        +              "date": {
        +                "$ref": "#/properties/league"
        +              },
        +              "first_goal_time": {
        +                "$ref": "#/properties/count",
        +                "description": "Minute of the first goal; null when goalless"
        +              },
        +              "first_goal_time_extra": {
        +                "$ref": "#/properties/count",
        +                "description": "Stoppage-time minutes added to first_goal_time"
        +              },
        +              "goalless": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "homeTeam": {
        +                "type": "string"
        +              },
        +              "ht_result": {
        +                "$ref": "#/properties/league",
        +                "description": "Half-time 'home:away'"
        +              },
        +              "score": {
        +                "$ref": "#/properties/league",
        +                "description": "Full-time 'home:away', e.g. '3:0'"
        +              },
        +              "time": {
        +                "$ref": "#/properties/league"
        +              }
        +            },
        +            "required": [
        +              "homeTeam",
        +              "awayTeam"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "note": {
        +      "$ref": "#/properties/league"
        +    },
        +    "season": {
        +      "$ref": "#/properties/league"
        +    },
        +    "season_state": {
        +      "$ref": "#/properties/league",
        +      "description": "'in_season' or 'finished'"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_season_projection1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "projection": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "deltas_vs_prev": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "bottom3": {
        +                    "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +                  },
        +                  "title": {
        +                    "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +                  },
        +                  "top4": {
        +                    "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Change since the previous run"
        +        },
        +        "expected_remaining": {
        +          "$ref": "#/properties/projection/properties/n_sims"
        +        },
        +        "league": {},
        +        "n_sims": {},
        +        "partial_schedule": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "run_date": {
        +          "$ref": "#/properties/projection/properties/league"
        +        },
        +        "scheduled_remaining": {
        +          "$ref": "#/properties/projection/properties/n_sims"
        +        },
        +        "season": {
        +          "$ref": "#/properties/projection/properties/league"
        +        },
        +        "teams": {
        +          "additionalProperties": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "bottom1": {
        +                "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +              },
        +              "bottom2": {
        +                "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +              },
        +              "bottom3": {
        +                "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title",
        +                "description": "Relegation-zone probability (bottom three)"
        +              },
        +              "gd_now": {
        +                "$ref": "#/properties/projection/properties/n_sims"
        +              },
        +              "mean_pts": {
        +                "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +              },
        +              "p10_pts": {
        +                "$ref": "#/properties/projection/properties/n_sims"
        +              },
        +              "p90_pts": {
        +                "$ref": "#/properties/projection/properties/n_sims"
        +              },
        +              "played": {
        +                "$ref": "#/properties/projection/properties/n_sims"
        +              },
        +              "position_matrix": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "type": "number"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Probability of finishing 1st…last"
        +              },
        +              "pts_now": {
        +                "$ref": "#/properties/projection/properties/n_sims"
        +              },
        +              "title": {},
        +              "top4": {
        +                "$ref": "#/properties/projection/properties/teams/additionalProperties/properties/title"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "description": "Keyed by team name",
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "teams"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "projection"
        +  ],
        +  "type": "object"
        +}
    • Changedget_team1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "first_goal_bins": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "count": {
        +                "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +              },
        +              "time": {
        +                "$ref": "#/properties/team"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "league": {
        +      "$ref": "#/properties/team"
        +    },
        +    "matches": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "away": {
        +                "$ref": "#/properties/team"
        +              },
        +              "date": {
        +                "$ref": "#/properties/team"
        +              },
        +              "first_goal_time": {
        +                "$ref": "#/properties/team"
        +              },
        +              "home": {
        +                "$ref": "#/properties/team"
        +              },
        +              "ht": {
        +                "$ref": "#/properties/team"
        +              },
        +              "outcome": {
        +                "$ref": "#/properties/team",
        +                "description": "'W' | 'D' | 'L'"
        +              },
        +              "score": {
        +                "$ref": "#/properties/team"
        +              },
        +              "time": {
        +                "$ref": "#/properties/team"
        +              },
        +              "venue": {
        +                "$ref": "#/properties/team",
        +                "description": "'H' or 'A'"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "ranking": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "avg_goals_conceded": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +            },
        +            "avg_goals_scored": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/expected_points"
        +            },
        +            "clean_sheets": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "drawn": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "expected_points": {
        +              "description": "Points the underlying numbers say the team should have"
        +            },
        +            "expected_position": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "goal_difference": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "goals_against": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "goals_for": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "last_5_form": {
        +              "$ref": "#/properties/team",
        +              "description": "Latest results as letters, e.g. 'WWDLW'"
        +            },
        +            "last_5_points": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "lost": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "luck_category": {
        +              "$ref": "#/properties/team",
        +              "description": "'lucky' | 'fair' | 'unlucky'"
        +            },
        +            "luck_difference": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/expected_points",
        +              "description": "points − expected_points; positive = ahead of the numbers"
        +            },
        +            "over_25_percentage": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/avg_goals_scored"
        +            },
        +            "played": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "points": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            },
        +            "position": {},
        +            "team": {
        +              "type": "string"
        +            },
        +            "won": {
        +              "$ref": "#/properties/ranking/anyOf/0/properties/position"
        +            }
        +          },
        +          "required": [
        +            "team"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The team's table row"
        +    },
        +    "season": {
        +      "$ref": "#/properties/team"
        +    },
        +    "seasons": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "slug": {
        +      "$ref": "#/properties/team"
        +    },
        +    "team": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_track_record5 fields changed
      • addedInput schema / properties / days / anyOf
        Added value: +[
        +  {
        +    "maximum": 365,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / days / maximum
        Removed value: -365
      • removedInput schema / properties / days / minimum
        Removed value: -1
      • removedInput schema / properties / days / type
        Removed value: -"integer"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "track_record": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "accuracy": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "brier": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/pl",
        +                  "description": "Brier score over settled probabilities; lower is better, 0.25 = coin flip"
        +                },
        +                "buckets": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "additionalProperties": true,
        +                        "properties": {
        +                          "avg_prob": {
        +                            "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                          },
        +                          "hi": {
        +                            "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                          },
        +                          "hit_rate": {
        +                            "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                          },
        +                          "lo": {
        +                            "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                          },
        +                          "n": {
        +                            "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "n": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "by_market": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "$ref": "#/properties/track_record/properties/summary/anyOf/0"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "pending": {
        +          "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n",
        +          "description": "Leans published but not yet settled"
        +        },
        +        "recent": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "market": {
        +                    "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +                  },
        +                  "model_prob": {
        +                    "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                  },
        +                  "outcome": {
        +                    "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug",
        +                    "description": "'won' | 'lost' | 'void'"
        +                  },
        +                  "pl": {
        +                    "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/hit_rate"
        +                  },
        +                  "result_score": {
        +                    "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +                  },
        +                  "side": {
        +                    "$ref": "#/properties/track_record/properties/recent/anyOf/0/items/properties/slug"
        +                  },
        +                  "slug": {}
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The 50 most recent graded leans"
        +        },
        +        "signals_only": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "summary": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "hit_rate": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/pl"
        +                },
        +                "lost": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +                },
        +                "n": {},
        +                "pl": {
        +                  "description": "Profit/loss in units at flat 1-unit stakes"
        +                },
        +                "void": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +                },
        +                "won": {
        +                  "$ref": "#/properties/track_record/properties/summary/anyOf/0/properties/n"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Whole window"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "track_record"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_leagues1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "attribution": {
        +      "description": "Cite as \"Data by football-charts.com\"",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "count": {},
        +    "leagues": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "country": {
        +            "type": "string"
        +          },
        +          "league": {
        +            "description": "The key to pass as `league`",
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "seasons": {
        +            "description": "Newest first; exact strings for `season`",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "url": {}
        +        },
        +        "required": [
        +          "league",
        +          "name",
        +          "country",
        +          "seasons"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "season_window": {
        +      "$ref": "#/properties/leagues/items/properties/url"
        +    }
        +  },
        +  "required": [
        +    "leagues"
        +  ],
        +  "type": "object"
        +}
  6. 10 tool updates
    • First observedabout_football_charts
    • First observedget_fixtures
    • First observedget_goal_timing
    • First observedget_league_table
    • First observedget_match
    • First observedget_results
    • First observedget_season_projection
    • First observedget_team
    • First observedget_track_record
    • First observedlist_leagues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides soccer match predictions and league statistics using xG data and Poisson distribution models. It enables users to forecast outcomes, analyze team performance, and view league tables across major European football leagues.
    3
    GPL 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Live football/soccer data from top European leagues, enabling queries for standings, fixtures, scorers, and team comparisons via natural language.
    6
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides football analytics tools including player scouting, comparisons, market-value filters, expected-goals tables, match-by-match form, team attacking profiles, match search, shot maps, and more for 10 leagues.
    6
    GPL 3.0
  • A
    license
    A
    quality
    B
    maintenance
    Provides football fixtures, real results, and bet settlement with odds arithmetic, enabling AI agents to devig markets, evaluate prices, and settle picks without an API key.
    7
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.