Skip to main content
Glama

footballcharts-mcp

Match detail

get_match
Read-onlyIdempotent

One match in full: the complete model probability block (calibrated and raw, all markets), team ratings, first-goal-time histograms for both sides (fgt_h, fgt_a), recent form, and — once played — the score, half-time score and status. Use for one named fixture. slug has the form 'country/league-slug/YYYY-MM-DD-home-vs-away'; take it from a get_fixtures row rather than assembling it, because team spellings must match exactly. Use get_fixtures for a league's whole upcoming slate, get_results for scores of many matches. Probabilities are model output, not advice. Example: slug 'england/premier-league/2026-09-05-brentford-vs-sunderland'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesMatch slug from get_fixtures, e.g. 'england/premier-league/2026-09-05-brentford-vs-sunderland'

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
matchYes
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"
      +      ]
      +    },
      +    "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"
      +}
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds meaningful behavioral context on top: what data is included, the conditional nature of score/status fields (only once played), and that probabilities are model output and not advice. No contradictions 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.

Conciseness5/5

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

The description is front-loaded with the core purpose, then enumerates contents, gives routing guidance, adds a caveat, and provides a concrete example. Every sentence earns its place; there is 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.

Completeness5/5

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

Given an output schema exists, the description does not need to spell out return values. It covers what the tool returns, how to construct the slug, when to use it versus siblings, and a critical caveat about model probabilities. This is complete for correct selection and invocation.

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. The description adds value beyond the schema by specifying the slug format explicitly, providing a complete example, and warning against constructing the slug manually because team spellings must match exactly. This is more than the schema alone provides.

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: retrieving one full match record with probability data, team ratings, histograms, form, and score/status once played. It clearly distinguishes itself from siblings like get_fixtures and get_results by emphasizing that it covers one named fixture in full.

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

Usage Guidelines5/5

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

Explicitly tells the agent when to use it ('Use for one named fixture'), when to use alternatives ('Use get_fixtures for a league's whole upcoming slate, get_results for scores of many matches'), and even instructs the agent to derive the slug from get_fixtures rather than assembling it manually due to exact spelling requirements.

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.