Native Model Context Protocol (MCP) server for OpenFootAPI — football fixtures, standings, lineups, events timeline, shot-level xG and match context.
Strong tool coverage with 14 well-named, action-verb tools (list_, search_, get_). All tools have descriptions (avg 180 chars, within 10-1024 baseline). Input schemas present for all tools using Zod validation. However, output schemas are NOT documented, LLMs cannot predict response structure for chaining. Error handling is present but generic (returns JSON error objects without recovery guidance). Parameter descriptions are good but some lack format constraints (e.g., 'season' accepts 'YYYY/YY' but no validation shown). Tool composition is clean, each tool has one responsibility. Missing: output schema documentation, actionable error messages, and tool annotations (readOnlyHint).
List the competitions OpenFootAPI supports, with IDs, country codes, tiers and provider coverage. Use this first when you need a valid competition ID.
Health check: confirms the OpenFootAPI is operational and your connection is working.
Season-to-date cumulative xG, shots and shot accuracy for all teams in a league.
A complete pre-match or post-match dossier assembled for analysis: recent form, Elo delta, rest days, head-to-head record and model-derived fair match probabilities.
Timeline of events in a match: goals, assists, yellow/red cards, substitutions, VAR checks, plus live minute-by-minute text commentary.
Confirmed starting XI, benches and formations for a match.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining. E.g., openfoot_matches returns match objects with IDs needed by openfoot_match_lineups, but structure is invisible to the agent.
Error messages are generic JSON objects without recovery guidance. E.g., 'error: missing_api_key' with message 'OPENFOOT_API_KEY is not set' is good, but most HTTP errors (401, 403, 429) return raw body without actionable next steps for the LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Shot-level Expected Goals data with coordinates on the pitch, shot type, situation (open play, penalty, corner), outcome and cumulative xG.
List fixtures and results with scores, verified numerical live match minute (e.g. 74), addedTime (e.g. 2 for 90+2), canonical period ('1H', 'HT', '2H', 'ET', 'PEN', 'FT', null), kickoff times, status and teams. Filter by competition, team, status ('live', 'finished', 'scheduled', 'postponed', 'cancelled', 'unknown' — kickoff passed but live/final state unconfirmed upstream), date or season.
Fair match odds (win/draw/loss probabilities) and closing market odds from major sportsbooks for a match.
Check your API quota: requests used this month, remaining, and reset date.
Get top scorers, assists and player card statistics for a competition.
Search for teams or competitions by fuzzy name to find their canonical OpenFootAPI IDs.
Get the league table for a competition — rank, points, played, won, drawn, lost, goals for/against, goal difference and recent form.
Full player roster for a team including shirt numbers, positions, ages and coach.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 14 tools are read-only, but this is not declared in the schema. LLMs cannot infer safety properties and may incorrectly assume tools have side effects.
Parameter format constraints not enforced in schema. E.g., 'from' and 'to' accept strings but no regex pattern or format declaration (should be 'YYYY-MM-DD'). 'season' accepts 'YYYY/YY' but no validation. LLMs may pass invalid dates.
Result limits not enforced or documented. openfoot_matches accepts limit up to 100, but no guidance on default behavior or token cost of large result sets. openfoot_competitions and openfoot_standings have no limit parameter at all, could return hundreds of items.