Skip to main content
Glama

footballcharts-mcp

Upcoming fixtures

get_fixtures
Read-onlyIdempotent

Upcoming matches of one league, earliest first: kick-off date and time, teams, a slug, and the model's calibrated probabilities (home/away, over/under ladders, both teams to score, half-time lines; draw = 1 − home − away) with team attack/defence ratings. Use for "who plays this weekend", kick-off times, or the chances in an upcoming match. The slug on each row is the input to get_match, which returns one fixture in full — call this first when you need one match in depth. Use get_results for matches already played. Probabilities are a baseline model from match history alone (no injuries, motivation or weather) and are not market prices or advice — say so. Example: "What are the chances of goals in Brentford v Sunderland?" → get_fixtures premier, read model_predictions.dc_v2.calibrated["over_2.5"].

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
countNo
leagueNo
matchesNo
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"
      +      ]
      +    },
      +    "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"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond read-only/idempotent annotations, the description discloses ordering, exact output contents, the source of probabilities, and limitations (no injuries/motivation/weather, not market prices). It even instructs the agent to communicate the caveat to the user.

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?

The description is front-loaded with the core purpose and output, then efficiently covers usage, alternatives, limitations, and a concrete example. Every sentence adds value; there is no filler or repetition.

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 one well-documented parameter, an output schema present, and rich annotations, the description still adds necessary usage context, sibling-routing, and model caveats. Nothing essential for selecting or invoking the tool 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?

The schema already documents the single league parameter thoroughly with examples and a note not to use display names, so schema coverage is complete. The description adds only a reinforcing example ('get_fixtures premier') rather than new parameter semantics.

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 and resource: 'Upcoming matches of one league, earliest first' with details of returned fields. It differentiates from siblings by explicitly contrasting with get_match (one match in full) and get_results (matches already played).

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?

It gives explicit use cases: 'who plays this weekend', kick-off times, and chances in an upcoming match. It also tells the agent when to use get_results instead and instructs calling get_fixtures first before get_match for in-depth match data.

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.