analyse
Explore, interpret, and draw conclusions from football data. Use when the user wants to analyse match events, compare teams or players, understand tactical…
Fetch, scrape, or download football data from any source. Also handles API key setup and credential management. Use when the user wants to get data from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle, or any football data source. Also use when they ask about API
$ npx -y skills add withqwerty/nutmeg --skill acquire --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/acquireContext preview
The summary Claude sees to decide when to auto-load this skill.
Fetch, scrape, or download football data from any source. Also handles API key setup and credential management. Use when the user wants to get data from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle, or any football data source. Also use when they ask about API
name: nutmeg-acquire description: "Fetch, scrape, or download football data from any source. Also handles API key setup and credential management. Use when the user wants to get data from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle, or any football data source. Also use when they ask about API keys, authentication, setting up access to a provider, or what data is available free vs paid." argument-hint: "[what data to get]" allowed-tools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent", "AskUserQuestion", "mcp__football-docs__search_docs", "mcp__football-docs__resolve_entity"]
Help the user get football data from any source into their local environment. This includes setting up credentials for providers that require them.
Read and follow `docs/accuracy-guardrail.md` before answering any question about provider-specific facts (IDs, endpoints, schemas, coordinates, rate limits). Always use `search_docs` — never guess from training data.
Read `.nutmeg.user.md`. If it doesn't exist, tell the user to run `/nutmeg` first. Use their profile to determine preferred language and available providers.
If the user needs to set up API keys or asks "what can I access for free?", handle it here.
**Key management rules:**
**Provider access reference:**
| Source | Access | Free? | Env var | |--------|--------|-------|---------| | StatsBomb open data | GitHub / statsbombpy | Yes | — | | FBref | Web scraping (soccerdata) | Yes | — | | Understat | Web scraping (soccerdata) | Yes | — | | ClubElo | HTTP API | Yes | — | | football-data.co.uk | CSV download | Yes | — | | Transfermarkt | Web scraping | Yes (fragile) | — | | SportMonks | REST API | Free tier | `SPORTMONKS_API_TOKEN` | | Football-data.org | REST API | Free tier | `FOOTBALL_DATA_API_KEY` | | FPL | Unofficial API | Yes | — | | Opta/Perform | Feed | No | `OPTA_FEED_TOKEN` | | StatsBomb API | REST API | No | `STATSBOMB_API_KEY`, `STATSBOMB_API_PASSWORD` | | Wyscout | REST API | No | `WYSCOUT_API_KEY` | | Kaggle | Download | Yes | — | | GitHub datasets | Download | Yes | — |
When the user asks for data, determine the best source:
| Need | Best free source | Best paid source | |------|-----------------|-----------------| | Match events (pass-by-pass) | StatsBomb open data | Opta, StatsBomb API, Wyscout | | Season stats (aggregates) | FBref | SportMonks | | xG / shot data | Understat, StatsBomb open | Opta (matchexpectedgoals), StatsBomb API | | Tracking data (player positions) | None free | Second Spectrum, SkillCorner, Tracab | | Historical results | football-data.co.uk | SportMonks | | Elo ratings | ClubElo (free API) | - | | Player valuations | Transfermarkt (scraping) | - | | Cross-provider entity IDs | Reep Register (free CSV + API) | - |
Adapt to the user's language preference from `.nutmeg.user.md`.
**Python patterns:**
# StatsBomb open data
from statsbombpy import sb
events = sb.events(match_id=3788741)
# FBref via soccerdata
import soccerdata as sd
fbref = sd.FBref('ENG-Premier League', '2024')
stats = fbref.read_team_season_stats()
# Understat via soccerdata
understat = sd.Understat('ENG-Premier League', '2024')
shots = understat.read_shot_events()**R patterns:**
# StatsBomb
library(StatsBombR)
events <- get.matchFree(Matches) %>% allclean()
# FBref
library(worldfootballR)
stats <- fb_season_team_stats("ENG", "M", 2024, "standard")**JavaScript/TypeScript:**
// StatsBomb open data (direct from GitHub)
const resp = await fetch('https://raw.githubusercontent.com/statsbomb/open-data/master/data/events/{match_id}.json');
const events = await resp.json();After acquiring data, always:
When joining data from different providers (e.g. FBref stats with Transfermarkt valuations), use the **Reep Register** to map entity IDs across providers.
Use the `resolve_entity` MCP tool (from football-docs) to look up any player, team, or coach:
resolve_entity(name: "Cole Palmer") # search by name resolve_entity(provider: "transfermarkt", id: "568177") # resolve provider ID resolve_entity(qid: "Q99760796") # Wikidata QID lookup
For entity-resolution tasks that go beyond a one-off lookup, read `docs/entity-resolution-routing.md`:
matching logic;
partner material;
Returns IDs for Transfermarkt, FBref, Sofascore, Opta, Soccerway, 11v11, and more.
For bulk/offline use, download the CSV register:
If the user asks for data from an unfamiliar source: 1. Search the football-docs index: `search_docs(query="[source name]")` 2. If not found, search the web for "[source] football data API" or "[source] football dataset" 3. Evaluate: is it free? What format? What coverage? Any rate limits? 4. Guide the user through access
Always recommend caching fetched data loc
A Claude Code plugin that makes Claude an expert at football data analytics. Who it's for: Anyone who works with football data — analysts, developers, journalists, researchers, hobbyists.
Explore, interpret, and draw conclusions from football data. Use when the user wants to analyse match events, compare teams or players, understand tactical…
Brainstorm football data visualisations and chart designs. Use when the user wants ideas for how to visualise football data, needs inspiration for chart types,…
Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected threat, possession value, pressing…
Fix broken data scrapers and pipelines. Use when data acquisition fails, a scraper breaks, an API returns errors, or data format has changed. Also handles…
Learn about football analytics concepts and explore provider documentation. Use when the user asks what a metric means (xG, PPDA, expected threat, xT), wants…