Skip to main content

football-data-mcp

A football analytics toolkit for Claude (and similar LLM tools) — player scouting, comparisons, market-value filters, expected-goals tables, match-by-match form, team attacking profiles, match search, shot maps, and more.

Built on top of ScraperFC by Owen Seymour.


What it does

Combines player and match statistics into one dataset you can explore in conversation with Claude.

Coverage: 10 leagues · 3 seasons (2023-24, 2024-25, 2025-26) · 18,800+ player records

Season stats (one row per player per season):

Kind of data Where it’s available
Goals, assists, minutes, shots, cards All 10 leagues
Expected goals (xG), expected assists (xAG) All 10 leagues — Understat model in top five; SofaScore model elsewhere (xg_source / xag_source columns)
Non-penalty xG, build-up xG, xG chain Top five leagues only (Understat; not comparable to SofaScore xG)
Advanced passing & chance creation Top five + Netherlands + Portugal — not Championship or European cups
Player ratings, duels, dribbles, big chances, and 80+ other performance metrics All 10 leagues
Market value, contract end date, height, nationality Domestic leagues — weakest for Champions League and Europa League

Match-by-match stats (optional extra step when collecting data):

Kind of data Where it’s available
Last N games, form, ratings, shot locations, team xG for/against All 10 leagues (after match data is collected)
League tables ranked by xG (home / away / overall) Top five leagues only

Leagues covered

All leagues include three seasons: 2023-24, 2024-25, and 2025-26.

League Season-level data Match-by-match
England Premier League Full — xG, build-up, advanced passing, ratings, market value Yes
Spain La Liga Full Yes
Germany Bundesliga Full Yes
Italy Serie A Full Yes
France Ligue 1 Full Yes
Netherlands Eredivisie Strong — xG, advanced passing, ratings, market value (no build-up xG) Yes
Portugal Primeira Liga Strong Yes
England EFL Championship Basic — ratings and core stats; lighter xG; market value often available Yes
UEFA Champions League Basic — ratings and core stats; no market value Yes
UEFA Europa League Basic — ratings and core stats; no market value Yes

Full = goals and minutes, full xG suite including build-up, advanced passing metrics, player ratings, and market value.

Strong = same as Full except build-up xG.

Basic = goals, minutes, player ratings, and xG-style metrics; limited advanced passing; European cups lack market value.

Market value and contract data are most complete for the eight main domestic leagues (all except Championship and the two European cups).


The 10 tools

Once connected, Claude can answer questions using 10 built-in tools (leaner responses; pass team with player names when names collide).

Season-level player data

Tool What you can ask
get_player "Show me Salah's season stats" (defaults to All Competitions row)
get_eafc_player_attributes "What are Saka's EA FC pace and shooting ratings?"
scout_position "Top 10 forwards in the Bundesliga by goals" (use position codes F/M/D/GK)
compare_players "Compare Salah 2024-25 vs Haaland 2025-26" (per-player season in subjects)
get_team_stats "Arsenal's league table and average xG this season" (defaults to All Competitions)
compare_teams "Compare Liverpool and Man City on standings and xG" (each team can use a different season)

Match-by-match analytics

Requires match data to be collected first. Works across all 10 leagues. Resolve fixtures with home team + away team + season (optional league).

Tool What you can ask
get_match Lean overview: score, possession, xG, shots, big chances for one fixture
get_match_player_stats All players in one match — ratings, goals, xG per player
get_player_match_stats One player over a date range or matchdays — pass start_date/end_date or match_days; optional include_summary for form aggregates
get_match_shots Shot map for a match; add player to filter to one player's shots

Setup

Everything runs on your computer: download the stats, then connect Claude Desktop or Cursor so it can answer questions using the 10 tools.

1. Install

pip install football-data-mcp

That installs two commands you can run from any folder:

  • collect-data — downloads and builds the dataset
  • soccer-mcp — starts the connection Claude and Cursor use

Working on the code? Clone this repo and run pip install -e . in the project folder instead.

2. Collect the data

First-time full download takes a while (some sites open a headless browser in the background).

Stats are collected from Understat, SofaScore, ClubElo, Transfermarkt, and Capology (see CHANGELOG.md for recent pipeline changes).

The unified player file also uses the REEP (Robust Entity Exchange Protocol) crosswalk (data/reference/reep_people.csv) to link player IDs across sources when names differ — for example matching Understat season rows to SofaScore dribble/passing stats, and SofaScore IDs to EA FC / SoFIFA attributes.

collect-data

Useful shortcuts:

# Only refresh one part of the data
collect-data --sofascore-only
collect-data --understat-only
collect-data --transfermarkt-only

# Extra: league xG tables, match shots, line-ups
collect-data --understat-tables-only
collect-data --understat-matches-only

# Rebuild the merged player file from files you already downloaded
collect-data --rebuild-only
collect-data --rebuild-only --export-csv   # also write a spreadsheet copy

3. Connect Claude Desktop or Cursor

Add the data connection to your app’s config. After pip install, soccer-mcp should be on your PATH (same program as python3 -m soccer_server).

Claude Desktop (macOS config file):

~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "soccer-data": {
      "command": "soccer-mcp"
    }
  }
}

Cursor — ~/.cursor/mcp.json or .cursor/mcp.json in a project:

{
  "mcpServers": {
    "soccer-data": {
      "command": "soccer-mcp"
    }
  }
}

If the app cannot find soccer-mcp, use the full path from which soccer-mcp as "command", or:

"command": "python3",
"args": ["-m", "soccer_server"]

Quit and reopen Claude or Cursor after saving. You should see all 10 tools after step 2 has finished downloading data.


Contributing

This project builds on ScraperFC. Bug fixes to the underlying scrapers are contributed back upstream — if you find something broken in a scraper, consider opening an issue or PR there too.

For issues specific to the pipeline (collect_data package / collect-data / collect_data.py) or the MCP server (soccer_server package / soccer-mcp / python -m soccer_server), open an issue here.


Credits

Metadata

Release files for football-data-mcp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for football-data-mcp 0.3.0
File Size Uploaded
football_data_mcp-0.3.0.tar.gz 187.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for football-data-mcp 0.3.0
File Interpreter ABI Platform
football_data_mcp-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 364.8 kB

Release files / football_data_mcp-0.3.0.tar.gz

Download URL football_data_mcp-0.3.0.tar.gz
Size 187.7 kB
Tags Source
SHA-256 checksum
How to use checksums
93afc08bd3d4cfcdf19454fbc4d50ea60a89b8ade74b842daf2eb480bce6796b
BLAKE2b-256 checksum
How to use checksums
19da5e1bd2042a96c027e54f90a18f1586df7c9b91478fdfd358cfc5f2ab7e5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 3, 2026.

Transparency log

Release files / football_data_mcp-0.3.0-py3-none-any.whl

Download URL football_data_mcp-0.3.0-py3-none-any.whl
Size 177.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
48fb2319d9e94182ad043239b8a6ae84160f5156eca3a2a42cf1daad85018dc4
BLAKE2b-256 checksum
How to use checksums
8350f4011481456c563fb7dddd1da3727a409c357c410de37088d54b9671d602
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page