Skip to main content
Glama

footballcharts-mcp

Goal timing

get_goal_timing
Read-onlyIdempotent

Goals per 15-minute bin (0-15 … 90+) for every team in a league season, each with peak_bins (the bin or bins with most goals — ties are listed; report a tie as a tie), late_share_pct and first_half_pct, plus league totals and the most active period. Use for "when does X score", late goals, fast starters, who concedes early, or which period a league's goals fall in. Pass team (name substring) for one team only. For one team's timing next to its match log get_team is more direct. Answer from peak_bins, never by eyeballing the bins. Example: "When does Flamengo score most?" → get_goal_timing brazil1, team="Flamengo".

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
teamNoTeam name substring, e.g. 'Flamengo' — returns that team's row only
leagueYesLeague key from list_leagues, e.g. 'premier' (England), 'spain1', 'brazil1', 'sweden1', 'wgermany1' (women). Not the display name.
seasonNoSeason string exactly as list_leagues returns it: winter-calendar leagues look like '2026-2027', summer-calendar leagues (Brazil, Sweden, Norway, Japan…) like '2026'. Omit for the current season. The free tier serves the current and previous season only.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataNo
noteNo
statsNo
leagueNo
seasonNo
time_binsNo
attributionNoCite as "Data by football-charts.com"
team_filterNo
team_not_foundNo

Schema Changelog

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

  1. Changed2 schema fields changed
    • changedInput schema / properties / team / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • 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"
      +      ]
      +    },
      +    "data": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "bins": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {
      +                      "type": "number"
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Goals per bin: '0-15','15-30','30-45','45+','46-60','60-75','75-90','90+'"
      +              },
      +              "first_half_pct": {
      +                "$ref": "#/properties/data/anyOf/0/items/properties/late_share_pct"
      +              },
      +              "late_share_pct": {
      +                "description": "% of goals from 75′ on"
      +              },
      +              "peak_bins": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Bin(s) with most goals — ties are listed; report a tie as a tie"
      +              },
      +              "peak_goals": {
      +                "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
      +              },
      +              "team": {
      +                "type": "string"
      +              },
      +              "total": {
      +                "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
      +              }
      +            },
      +            "required": [
      +              "team"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "league": {},
      +    "note": {
      +      "$ref": "#/properties/league"
      +    },
      +    "season": {
      +      "$ref": "#/properties/league"
      +    },
      +    "stats": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "properties": {
      +            "late_goals": {
      +              "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
      +            },
      +            "match_count": {
      +              "$ref": "#/properties/stats/anyOf/0/properties/total_goals"
      +            },
      +            "most_active_period": {
      +              "$ref": "#/properties/league"
      +            },
      +            "total_goals": {}
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "team_filter": {
      +      "$ref": "#/properties/league"
      +    },
      +    "team_not_found": {
      +      "$ref": "#/properties/league"
      +    },
      +    "time_bins": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "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?

Annotations already cover read-only and idempotent safety, so no contradiction exists. The description adds real behavioral context beyond annotations: ties in peak_bins are listed and must be reported as ties, the tool returns league totals and the most active period, and the agent is explicitly warned not to eyeball bins. This materially changes how the agent should interpret and use the result.

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 front-loads the output shape and purpose, then gives use cases, parameter guidance, an alternative tool, and an example in a compact, ordered flow. Every sentence contributes: none repeats the name or annotations, and the example concretizes invocation.

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, the description does not need to enumerate return fields exhaustively, and it provides the essential invocation context: output semantics, tie handling, use cases, one-team vs. league-wide behavior, alternative routing, and a worked example. It is complete for an agent to select and invoke the tool correctly.

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%, so the baseline is 3. The description reinforces that team is a substring and can be used to return one team's row, and it gives a concrete example mapping league='brazil1' and team='Flamengo'. It adds modest practical color but does not uncover semantics absent from the schema.

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: it computes goals per 15-minute bin for every team in a league season, with named derived fields (peak_bins, late_share_pct, first_half_pct) plus league totals. It also names the exact sibling alternative (get_team) for the one-team-plus-match-log case, removing ambiguity. The title and name align with a clear goal-timing analysis tool.

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?

Usage is explicitly scoped: it says to use this tool for 'when does X score', late goals, fast starters, early conceders, or league scoring periods. It also gives an exclusion by noting that get_team is more direct when one team's timing is needed next to its match log, and it instructs the agent to answer from peak_bins rather than raw bins.

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.