Skip to main content
Glama

footballcharts-mcp

Season projection

get_season_projection
Read-onlyIdempotent

How one league's CURRENT season is projected to finish: 10,000 Monte Carlo simulations refreshed daily, per team the title, top-four and relegation (bottom3) probabilities, points now, mean final points, a 10th–90th percentile points range and a full finishing-position matrix, plus the change since the previous run. Use for forward-looking questions — who wins the league, who goes down, how safe a position is, likely final points. Use get_league_table for where things stand NOW and get_fixtures for individual match probabilities. Always the current season; there is no season parameter. Example: "Can Hull stay up?" → get_season_projection premier, read projection.teams.Hull.bottom3.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
leagueYesLeague key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectionYes
attributionNoCite as "Data by football-charts.com"

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema 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"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover readOnly, openWorld, idempotent, and non-destructive hints, so the bar is lower. The description adds useful behavioral context: 10,000 Monte Carlo simulations refreshed daily and the 'change since the previous run' output. It also discloses the current-season-only behavior, which is not obvious from the schema. No contradiction with annotations.

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

Conciseness4/5

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

The description is dense but well-structured: it front-loads the core purpose, then usage, then alternatives, then a concrete example. Every sentence contributes either capabilities, routing, or a limitation. It is slightly long, but the complexity of the tool justifies it.

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 tool with an output schema, the description goes beyond the minimum by summarizing the key output fields and giving a path-style example ('projection.teams.Hull.bottom3'). It also explains the current-season constraint and points to sibling tools for adjacent questions. The agent has everything needed to select and call this tool 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?

Schema coverage is 100%, so baseline is 3, but the description adds a concrete example call ('get_season_projection premier') and explains the league parameter convention via examples. It also clarifies there is no season parameter, which prevents the agent from inventing one. This is a meaningful addition over the schema alone.

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

Purpose5/5

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

The description states a specific verb+resource: 'How one league's CURRENT season is projected to finish' and enumerates the exact outputs (title, top-four, relegation probabilities, points ranges, finishing-position matrix). It also distinguishes itself from siblings by explicitly naming get_league_table and get_fixtures and their different purposes. This makes the tool's role unmistakable.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'forward-looking questions — who wins the league, who goes down, how safe a position is, likely final points.' It clearly says to use get_league_table for current standings and get_fixtures for individual match probabilities, and it states the limitation 'Always the current season; there is no season parameter.' This fully routes the agent to the correct tool.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.7/5.0
Disambiguation5/5

Each tool targets a clearly distinct resource or query type: fixtures, results, match details, standings, team profiles, goal timing, projections, track record, and league enumeration. Descriptions include explicit cross-references to related tools, eliminating boundary confusion.

Naming Consistency4/5

The dominant pattern is get_ + noun, which is consistent and predictable. list_leagues and about_football_charts are deliberate exceptions that fit their meta/enumeration purposes, but they do break the otherwise uniform convention.

Tool Count5/5

Ten tools is well-scoped for a football data and model-probability server. Each tool covers a meaningful slice of the domain without redundancy or bloat.

Completeness5/5

The tool surface covers the full read-only workflow: discovering leagues, viewing tables, fixtures, results, single matches, team deep-dives, goal timing, season projections, and model credibility. No obvious dead ends or missing operations for the stated purpose.