Skip to main content
Glama

Match detail

get_match
Read-only

Retrieve a match by ID with live score and minute, plus readable goals and cards; search nearby dates when the ID is absent and flag degraded state.

Instructions

One match by its id, with live score/minute overlaid when it's in play, and, for a match in play or finished, the provider's goals and cards it could read (minute, kind, side, the player when named; match.events in data), never a claim that the list is every goal. Off the World Cup the id is looked for from yesterday to 14 days ahead: window names the provider days searched when it was not there (not found in that span, not "no such match"), and degraded with a match means its state could not be refreshed. Optional prediction-market enrichment carries marketComplete; false means the read was incomplete, not that no signal exists. Get the id from get_today or get_live; to find a team's match without an id, use get_next_fixture. tz/lang/flavor affect formatting.

Input Schema

NameRequiredDescriptionDefault
idYesMatch id
tzNoIANA timezone for kickoff times, e.g. America/Mexico_City
langNoLocale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English
flavorNoCommentary flair: off, subtle, full (default: full)
competitionNoThe competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition

Output Schema

NameRequiredDescriptionDefault
matchYes
servedNoThe shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed
sourceNo
windowNoOff the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match
partialNoPresent when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss
degradedNo
competitionNoThe competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen
unknownTeamNoPresent (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole
unsupportedNoPresent (true) when this is not available for this competition yet; an empty result then means "unsupported", not "none found"
inapplicableNoPresent (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)
marketSignalNo
noCompetitionNoPresent (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)
marketCompleteNoFalse when optional market enrichment did not check this fixture
rosterEvidenceNoWith unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)
betweenEditionsNoPresent when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play
rosterIncompleteNoPresent (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name
responseTruncatedNo
responseTruncationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.13.1
    • changedInput schema / properties / lang / description
      Previous value: -"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt or fr (no other value is supported). Without it, or when it is empty, the server's CLAUDINHO_LANG when that is exactly one of the four, else en. The market copy, a few notes and the disclaimer stay English"
  2. Changed14 schema fields changedv0.12.0
    • addedInput schema / properties / competition
      Added value: +{
      +  "description": "The competition: an alias such as premier-league, or an ESPN slug such as eng.1 (list_competitions lists the aliases). Without it: the server's CLAUDINHO_COMPETITION, else the user's saved choice (claudinho follow); with none, the answer is noCompetition",
      +  "type": "string"
      +}
    • changedInput schema / properties / lang / description
      Previous value: -"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"New value: +"Locale for dates, list titles, match status and stage words, a match timeline's kind words (Goal, Yellow card…), the empty and outage sentences, provider attribution, and commentary: en, es, pt, fr (the market copy, a few notes and the disclaimer stay English; other locales fall back to en)"
    • addedOutput schema / properties / betweenEditions
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when the competition is between editions: the edition named by label ended on ended (the provider's calendar day, YYYY-MM-DD, the season end it states), and nothing in the read is scheduled or in play",
      +  "properties": {
      +    "ended": {
      +      "type": "string"
      +    },
      +    "label": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "ended"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / competition
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "alias": {
      +          "type": "string"
      +        },
      +        "chosenBy": {
      +          "enum": [
      +            "flag",
      +            "env",
      +            "saved"
      +          ],
      +          "type": "string"
      +        },
      +        "experimental": {
      +          "const": true,
      +          "type": "boolean"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "slug": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "slug",
      +        "name",
      +        "chosenBy"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The competition this answer is for: its ESPN slug, its alias, its name, where the choice came from (flag: the competition argument; env: the server's CLAUDINHO_COMPETITION; saved: the user's saved choice, claudinho follow), and experimental for a slug the supported table does not hold; null with noCompetition when nothing is chosen"
      +}
    • addedOutput schema / properties / inapplicable
      Added value: +{
      +  "const": true,
      +  "description": "Present (true) when this competition has no such thing at all (a league season with no knockout tie has no knockout tree)",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / match / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "away": {
      -        "$ref": "#/properties/match/anyOf/0/properties/home"
      -      },
      -      "group": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "home": {
      -        "additionalProperties": true,
      -        "properties": {
      -          "code": {
      -            "type": "string"
      -          },
      -          "flag": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kickoff": {
      -        "type": "string"
      -      },
      -      "minute": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "score": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": true,
      -            "properties": {
      -              "away": {
      -                "type": "number"
      -              },
      -              "home": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "shootout": {
      -        "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
      -      },
      -      "stage": {
      -        "type": "string"
      -      },
      -      "status": {
      -        "type": "string"
      -      },
      -      "venue": {
      -        "type": "string"
      -      },
      -      "winnerCode": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "away": {
      +        "$ref": "#/properties/match/anyOf/0/properties/home"
      +      },
      +      "events": {
      +        "items": {
      +          "additionalProperties": true,
      +          "properties": {
      +            "added": {
      +              "type": "number"
      +            },
      +            "minute": {
      +              "type": "number"
      +            },
      +            "player": {
      +              "type": "string"
      +            },
      +            "side": {
      +              "type": "string"
      +            },
      +            "teamCode": {
      +              "type": "string"
      +            },
      +            "type": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "group": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "home": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "flag": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "kickoff": {
      +        "type": "string"
      +      },
      +      "minute": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "score": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "away": {
      +                "type": "number"
      +              },
      +              "home": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "shootout": {
      +        "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
      +      },
      +      "stage": {
      +        "type": "string"
      +      },
      +      "stageLabel": {
      +        "type": "string"
      +      },
      +      "status": {
      +        "type": "string"
      +      },
      +      "venue": {
      +        "type": "string"
      +      },
      +      "winnerCode": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / noCompetition
      Added value: +{
      +  "const": true,
      +  "description": "Present (true) when no competition is chosen (no competition argument, no server CLAUDINHO_COMPETITION, no saved choice): nothing was read, competition is null, and the text says what to do (pass competition, or the user runs claudinho follow <alias>)",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / partial
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when the provider sent records that could not be used: what is returned is what was read, and may not be the whole answer (absence is not elimination). omitted is how many provider records were left out, when known; they may have lain outside what was asked for, so the count is a bound, not a loss",
      +  "properties": {
      +    "omitted": {
      +      "exclusiveMinimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / rosterEvidence
      Added value: +{
      +  "description": "With unknownTeam: the evidence it rests on, the competition's table and span (table) or the World Cup's bundled nations (bundle)",
      +  "enum": [
      +    "table",
      +    "bundle"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / rosterIncomplete
      Added value: +{
      +  "const": true,
      +  "description": "Present (true) when the competition's roster could not be read whole and the name could not be resolved without it (no match, or only by a code or a partial name); not an outage: ask with the club's full name",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / served
      Added value: +{
      +  "description": "The shown fixtures whose record the provider's window held; a shown fixture not among them is the bundled schedule's row, its live state unconfirmed",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / unknownTeam
      Added value: +{
      +  "const": true,
      +  "description": "Present (true) when the roster the competition has holds no team by that name: the bundled nations on the World Cup; the table read whole and the next 14 days' fixtures elsewhere (a claim about that evidence, not the whole competition: a club out in a qualifying round is in no table). Never stated when the table or the span could not be read whole",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / unsupported
      Added value: +{
      +  "const": true,
      +  "description": "Present (true) when this is not available for this competition yet; an empty result then means \"unsupported\", not \"none found\"",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / window
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Off the World Cup: a whole read of these provider days (YYYY-MM-DD, inclusive) did not hold the match",
      +  "properties": {
      +    "from": {
      +      "type": "string"
      +    },
      +    "to": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "from",
      +    "to"
      +  ],
      +  "type": "object"
      +}
  3. Changed3 schema fields changedv0.10.0
    • addedOutput schema / properties / marketComplete
      Added value: +{
      +  "description": "False when optional market enrichment did not check this fixture",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / responseTruncated
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / responseTruncation
      Added value: +{
      +  "type": "string"
      +}
  4. Changed2 schema fields changedv0.9.0
    • changedInput schema / properties / lang / description
      Previous value: -"Locale for formatting: en, es, pt, fr (other locales fall back to en)"New value: +"Locale for dates, provider attribution, and commentary: en, es, pt, fr (the summary scaffold stays English; other locales fall back to en)"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "degraded": {
      +      "type": "boolean"
      +    },
      +    "marketSignal": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "match": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "properties": {
      +            "away": {
      +              "$ref": "#/properties/match/anyOf/0/properties/home"
      +            },
      +            "group": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "home": {
      +              "additionalProperties": true,
      +              "properties": {
      +                "code": {
      +                  "type": "string"
      +                },
      +                "flag": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "kickoff": {
      +              "type": "string"
      +            },
      +            "minute": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "score": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": true,
      +                  "properties": {
      +                    "away": {
      +                      "type": "number"
      +                    },
      +                    "home": {
      +                      "type": "number"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "shootout": {
      +              "$ref": "#/properties/match/anyOf/0/properties/score/anyOf/0"
      +            },
      +            "stage": {
      +              "type": "string"
      +            },
      +            "status": {
      +              "type": "string"
      +            },
      +            "venue": {
      +              "type": "string"
      +            },
      +            "winnerCode": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "source": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "match"
      +  ],
      +  "type": "object"
      +}
  5. First observedv0.1.0

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say readOnly/openWorld; the description adds real behavioral context: the 14-day forward / 1-day back search window, that 'window' in the response means days searched and absence is 'not found in that span, not "no such match"', that 'degraded' means state could not be refreshed, and that the events list is explicitly not exhaustive. It also explains marketComplete=false semantics, preventing a false 'no signal' reading.

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

Conciseness3/5

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

Front-loaded with the core purpose, but the second sentence is a long multi-clause run-on stacking window, degraded, events, and market caveats together. Every clause carries information, yet the packing hurts scannability.

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 described, and the description still covers the non-obvious response semantics (window, degraded, marketComplete). Combined with 100% param coverage, an agent has what it needs; only the dense phrasing slightly undercuts usability.

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 coverage is 100% and the schema is far more detailed than the description (lang lists exact supported values and fallback chain; flavor enumerates modes). The description only offers the thin claim that 'tz/lang/flavor affect formatting', which adds little. 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 ('One match by its id') and immediately layers the scope: live score/minute overlay when in play, provider goals and cards when in play or finished. It is plainly distinguishable from get_today, get_live and get_next_fixture, which it names.

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?

Gives explicit routing: 'Get the id from get_today or get_live; to find a team's match without an id, use get_next_fixture.' That is when-to-use plus named alternatives for the main ambiguity (no id on hand).

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