matchday-mcp
Live football/soccer data from top European leagues, enabling queries for standings, fixtures, scorers, and team comparisons via natural language.
README
⚽ matchday-mcp
A Model Context Protocol server that gives any MCP client (Claude Desktop, Claude Code, …) live football/soccer data — standings, fixtures, results, top scorers and team comparisons across Europe's top leagues.
Built with TypeScript + Zod, backed by the free football-data.org API.
Ask Claude "How is Real Madrid doing this season?" or "Compare Arsenal and Liverpool's recent form" and it answers with real data through these tools.
🔗 Live playground: matchday-mcp-web.vercel.app — an interactive dashboard built with SvelteKit + Svelte 5 that runs on this server's data layer.
Demo
> get_standings { "competition": "La Liga" }
**La Liga standings — 2025**
# Team P W D L GD Pts
1 FC Barcelona 38 31 1 6 59 94
2 Real Madrid CF 38 27 5 6 42 86
3 Villarreal CF 38 22 6 10 26 72
4 Club Atlético de Madrid 38 21 6 11 18 69
...
<!-- A short GIF of the tools running inside Claude Desktop will live here. -->
Tools
| Tool | What it does |
|---|---|
get_standings |
League table for a competition (position, W/D/L, GD, points). |
get_matches |
Matches for a competition, filterable by status and matchday. |
get_top_scorers |
Top scorers for a competition. |
find_team |
Look up a club by name (country, stadium, founded year, competitions). |
get_team_matches |
A club's recent results or upcoming fixtures, with a W/D/L form string. |
compare_teams |
Compare two clubs by recent form (last 5) and W/D/L tally. |
Competitions (free tier): Premier League (PL), La Liga (PD), Bundesliga (BL1),
Serie A (SA), Ligue 1 (FL1), Eredivisie (DED), Primeira Liga (PPL), Championship (ELC),
Brazil Série A (BSA), Champions League (CL), World Cup (WC), European Championship (EC).
You can pass a competition by name ("Premier League") or code ("PL").
Quick start (Claude Desktop)
-
Get a free API token at football-data.org/client/register (takes ~1 minute).
-
Add the server to your
claude_desktop_config.json:{ "mcpServers": { "matchday": { "command": "npx", "args": ["-y", "matchday-mcp"], "env": { "FOOTBALL_DATA_TOKEN": "your_free_token_here" } } } } -
Restart Claude Desktop. Ask it about standings, fixtures, scorers or team form.
Works the same in any MCP client. In Claude Code:
claude mcp add matchday -e FOOTBALL_DATA_TOKEN=your_token -- npx -y matchday-mcp.
Development
git clone https://github.com/reiorozco/matchday-mcp.git
cd matchday-mcp
npm install
export FOOTBALL_DATA_TOKEN=your_free_token # required to hit the live API
npm run dev # run the server over stdio (tsx)
npm test # run the unit tests (no token needed — fetch is mocked)
npm run typecheck # tsc --noEmit
npm run build # bundle to dist/ with tsup
| Variable | Required | Description |
|---|---|---|
FOOTBALL_DATA_TOKEN |
yes | Free token from football-data.org. |
Design notes
- Zod-validated tools. Every tool input is described and validated with Zod, so the model gets clear schemas and bad arguments fail fast with readable errors.
- Caching + rate-limit resilience. The free tier allows 10 req/min and returns HTTP 429 when exceeded, so the client adds an in-memory TTL cache plus bounded retry/backoff.
- Lazy team index. football-data.org has no team-name search, so the client builds a
name → id index across the domestic leagues one league at a time with early exit — a
well-known club costs 1–2 requests, not a full sweep. Name resolution is ranked
(exact → starts-with → shortest name), so
"Barcelona"→ FC Barcelona, not RCD Espanyol. - Off-season aware. In the off-season the API's "current season" already points at the next, not-yet-started season (empty tables), so the default season rolls over in August.
- Pure, testable handlers. Tool logic lives in plain functions returning strings; the MCP wiring is a thin layer on top. The same data layer powers the web playground (source).
Data
Data from football-data.org. This project is not affiliated with football-data.org or any league.
License
MIT © Reinaldo Orozco
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.