io.github.bartokulus/openfoot-mcp
Football fixtures, standings, lineups, live events and shot-level xG across 75 competitions.
What can you do with io.github.bartokulus/openfoot-mcp?
- High-frequency live polling across many competitions. A monthly quota is the wrong shape for it — a per-day or per-second plan elsewhere will cost you less.
- Leagues outside the deep-coverage list above.
- You need a contractual SLA, uptime credits or a named support contact. Not offered at these prices.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
openfoot-mcpclaude mcp add openfoot-mcp -e 'OPENFOOT_API_KEY=<your openfoot_api_key>' -- npx -y openfoot-mcp@0.1.2
{
"mcpServers": {
"openfoot-mcp": {
"command": "npx",
"args": [
"-y",
"openfoot-mcp@0.1.2"
],
"env": {
"OPENFOOT_API_KEY": "<your openfoot_api_key>"
}
}
}
}
Environment variables
OPENFOOT_API_KEYrequired secret OpenFoot API key. Free tier at https://openfootapi.com/pricing
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
openfoot-mcp
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.
Install
npx openfoot-mcp
Set your API key in the environment. Free tier: 5,000 requests/month. Get a key at openfootapi.com/pricing.
Claude Desktop / Claude Code
{
"mcpServers": {
"openfoot": {
"command": "npx",
"args": ["-y", "openfoot-mcp"],
"env": { "OPENFOOT_API_KEY": "of_live_..." }
}
}
}
Cursor / Windsurf / any stdio MCP client
Same block, in that client's MCP config file.
Tools
| 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.
Coverage, stated honestly
The catalogue lists 120 competitions. Depth is not uniform, and the catalogue is wider than the deep coverage.
- Deepest: Bundesliga, 2. Bundesliga, DFB Pokal, Superliga României
- Expanded European: Eredivisie, Primeira Liga, Süper Lig, Pro League, Scottish Premiership
- Historical / analytics only: Premier League, La Liga, Serie A, Ligue 1 (xG is Understat-derived)
Call openfoot_competitions and check your league before you build on it.
Quota behaviour
- Free: 5,000 requests/month, 60 req/min. Developer $14/month: 250,000 requests/month, 100 req/min, includes xG, shot maps, lineups, live events and fair odds. Pro $39/month: 2,000,000/month, 250 req/min.
- No overage billing. When the quota is spent the API returns 429; this server surfaces that as a
quota_or_rate_limiterror rather than an empty result. - Quota resets on the 1st of the month, UTC.
- Every request is metered, including 404s and empty results.
When this is the wrong tool
- High-frequency live polling across many competitions. A monthly quota is the wrong shape for it — a per-day or per-second plan elsewhere will cost you less.
- Leagues outside the deep-coverage list above.
- You need a contractual SLA, uptime credits or a named support contact. Not offered at these prices.
Development
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.
Frequently asked questions
What is io.github.bartokulus/openfoot-mcp?
Football fixtures, standings, lineups, live events and shot-level xG across 75 competitions.
How do I install io.github.bartokulus/openfoot-mcp?
It runs on your machine. In Claude Code: claude mcp add openfoot-mcp -e 'OPENFOOT_API_KEY=<your openfoot_api_key>' -- npx -y openfoot-mcp@0.1.2. For other clients, paste the JSON configuration from this page into their MCP settings.
Does io.github.bartokulus/openfoot-mcp need an API key?
Yes. It expects OPENFOOT_API_KEY, which you set in its configuration.
Is io.github.bartokulus/openfoot-mcp open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains io.github.bartokulus/openfoot-mcp?
It is published by bartokulus. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.