Football fixtures, standings, lineups, live events and shot-level xG across 75 competitions.
MCP server for the OpenFootAPI football intelligence API. Gives an LLM client real football data — fixtures, standings, lineups, live events, shot-level xG with pitch coordinates, and model-derived fair odds — instead of a hallucinated scoreline.
15 tools, 1 prompt. Node ≥ 20, no build step.
npx openfoot-mcp
Set your API key in the environment. Free tier: 5,000 requests/month. Get a key at openfootapi.com/pricing.
{
"mcpServers": {
"openfoot": {
"command": "npx",
"args": ["-y", "openfoot-mcp"],
"env": { "OPENFOOT_API_KEY": "of_live_..." }
}
}
}
Same block, in that client's MCP config file.
| Tool | What it returns |
|---|---|
openfoot_competitions | Supported competitions, season metadata, data source and licence per competition |
openfoot_search | Free-text team/competition name → stable IDs |
openfoot_matches | Fixtures and results, filtered by date / competition / team / status / season / round, cursor-paginated |
openfoot_standings | Standings table for a competition and season |
openfoot_match_lineups | Starting XI, bench, formation |
openfoot_match_events | Goals, cards, substitutions, commentary timeline |
openfoot_match_xg | One entry per shot: pitch coordinates + xG value |
openfoot_match_context | Derived context — form, head-to-head, pre-computed signals |
openfoot_league_xg | League xG table: xG for, xG against, over/under-performance vs actual goals |
openfoot_odds | Bookmaker benchmark + implied fair probabilities. Informational, not betting advice |
openfoot_quota | Remaining monthly quota — this call does not consume quota |
openfoot_health | Reachability check. Works without an API key |
Prompt: scout_team_form — resolve a team, pull its last 5 matches, read the xG behind the results.
Start with openfoot_search to resolve IDs. Guessing IDs wastes quota: 404s and empty results are metered like any other request.
The catalogue lists 120 competitions. Depth is not uniform, and the catalogue is wider than the deep coverage.
Call openfoot_competitions and check your league before you build on it.
quota_or_rate_limit error rather than an empty result.npm install
npm run smoke # boots the server over stdio, lists tools, calls health
npm run smoke works without an API key: openfoot_health returns live status, and a key-gated tool returns a readable missing_api_key error so you can tell "not configured" from "broken".
MIT.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y openfoot-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-bartokulus-openfoot-mcp": {
"command": "npx",
"args": [
"-y",
"openfoot-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceopenfoot-mcpnpmio.github.bartokulus/openfoot-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.