From nutmeg
Teaches football analytics concepts like xG, PPDA, xT, expected threat and explores provider docs on qualifiers, coordinates, events, schemas. Use for metric explanations, learning paths, or API lookups.
npx claudepluginhub withqwerty/plugins --plugin nutmegThis skill is limited to using the following tools:
Teach football analytics concepts, recommend resources, provide a learning path, and answer questions about data provider documentation — all adapted to the user's level.
Analyzes football data to explore match events, compare teams/players, identify tactical patterns, build visualizations, and suggest questions. Adapts to user experience level.
Fetches football (soccer) data across 13 leagues: standings, schedules, match stats, xG, transfers, player profiles. CLI/Python SDK access, no API keys.
Automates College Football Data operations via Rube MCP using Composio toolkit. Discovers tools with RUBE_SEARCH_TOOLS, manages connections, executes via RUBE_MULTI_EXECUTE_TOOL.
Share bugs, ideas, or general feedback.
Teach football analytics concepts, recommend resources, provide a learning path, and answer questions about data provider documentation — all adapted to the user's level.
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.
| Metric | What it means | Intuition |
|---|---|---|
| xG (Expected Goals) | Probability a shot results in a goal (0-1) | "How good was the chance?" |
| xGOT (xG on Target) | xG adjusted for shot placement in the goal | "How good was the finish?" |
| xA (Expected Assists) | xG of the shot that resulted from a pass | "How good was the chance created?" |
| xT (Expected Threat) | Value added by moving the ball to a more dangerous area | "How much did this pass/carry increase goal threat?" |
| PSxG (Post-Shot xG) | Same as xGOT. StatsBomb terminology. |
| Metric | What it means |
|---|---|
| PPDA | Passes allowed per defensive action. Lower = more pressing |
| High press | Defensive actions in the opponent's defensive third |
| Counterpressure | Immediate defensive reaction after losing the ball |
| Build-up | How a team progresses the ball from defence to attack |
| Possession value | How much each action contributes to scoring probability |
| Metric | What it means |
|---|---|
| Progressive pass | Pass that moves the ball significantly toward the opponent's goal |
| Key pass | Pass directly leading to a shot |
| Assist | Pass directly leading to a goal |
| Through ball | Pass played into space behind the defence |
| Switch of play | Long pass crossing the centre of the pitch |
| Pass completion % | Successful passes / total passes (misleading in isolation) |
| Metric | What it means |
|---|---|
| Shots per 90 | Shot volume normalised by playing time |
| Conversion rate | Goals / shots (noisy, small sample issues) |
| Big chance | High-xG opportunity (typically xG > 0.3) |
| Shot on target % | Shots on target / total shots |
| Metric | What it means |
|---|---|
| Tackles won | Successful tackle attempts |
| Interceptions | Reading and intercepting opponent passes |
| Clearances | Defensive clearances (often under pressure) |
| Blocks | Blocking shots or passes |
| Aerial duels won | Headers contested and won |
Always normalise player stats per 90 minutes, not per match:
per_90 = (raw_stat / minutes_played) * 90
Why: a player with 2 goals in 180 minutes (per 90: 1.0) is performing the same as one with 1 goal in 90 minutes. Per-match stats penalise part-time players.
Minimum sample: ~900 minutes (10 full matches) before per-90 stats are meaningful.
| Resource | What it is |
|---|---|
| StatsBomb open data | Free event data, best starting point |
| Friends of Tracking (YouTube) | University-level video lectures on football analytics |
| McKay Johns (YouTube) | Python football analytics tutorials |
| FBref | Free season stats, powered by StatsBomb data |
| The Athletic | Journalism with analytics focus |
| OptaPro Forum | Annual analytics conference (talks online) |
| StatsBomb Conference | Annual conference with published research |
| r/socceranalytics | Reddit community |
| Football Analytics Slack | Community workspace |
When the user asks about provider-specific details — event types, qualifier IDs, coordinate systems, API schemas, field mappings — use the football-docs MCP tools.
Use search_docs with the user's query. Add a provider filter if they're asking about a specific provider.
Examples:
search_docs(query="headed goal qualifier", provider="opta")search_docs(query="xG expected goals", provider="statsbomb")search_docs(query="shot data free", provider="free-sources")Use compare_providers when the user wants to understand differences.
Examples:
compare_providers(topic="pass event types", providers=["opta", "statsbomb"])compare_providers(topic="xG expected goals")Use list_providers to show what documentation is indexed and its coverage.
When comparing providers, also search for kloppy's mapping documentation. kloppy defines how each provider's events map to a canonical model, which helps the user understand what maps cleanly between providers, what information is lost in translation, and what becomes a GenericEvent (unmapped).