Skip to main content
Glama

footballcharts-mcp

Season projection

get_season_projection
Read-onlyIdempotent

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.

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema 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"
      +  }
      +]
  2. Changed1 schema 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."
  3. Changed7 schema 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"
      -]
  4. 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"
      +}
  5. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.