Content
# aria-mcp-football
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that tells you when your favourite football teams play and where to watch in Denmark. Built for [ARIA](https://github.com/kimhjort/aria) and shareable with the community.
Data from **[TheSportsDB.com](https://www.thesportsdb.com)**. No API key required for basic use — the free public dev key (`123`) is built in.
## Data Source
| Source | What | Attribution |
|---|---|---|
| [TheSportsDB](https://www.thesportsdb.com) | Fixtures, results | Data from TheSportsDB.com |
**Danish broadcast information** is a best-effort hint built into this server. TheSportsDB does not provide broadcaster data — the hints are researched defaults for the 2025/26 season. **Rights change. Always verify at [tvsporten.dk](https://tvsporten.dk) or [tvbolden.dk](https://tvbolden.dk).**
## Install & Run
```bash
npx aria-mcp-football
```
Or install globally:
```bash
npm install -g aria-mcp-football
aria-mcp-football
```
No API key required. Optionally set `THESPORTSDB_KEY` for a premium key.
Requires Node.js 20 or later.
## Environment Variables
| Variable | Required | Description |
|---|---|---|
| `THESPORTSDB_KEY` | No | TheSportsDB API key. Defaults to `"123"` (public free dev key). Set your own or a premium key if needed. |
| `FOLLOW_TEAMS` | No | Comma-separated TheSportsDB team IDs to follow (default: `133906,133899,133610` — Denmark, AGF, Chelsea). |
| `BROADCAST_MAP_JSON` | No | JSON object overriding the Danish broadcast hint map (keys: competition name pattern, values: broadcaster string). |
## Default Followed Teams
| Team | TheSportsDB ID | Competition |
|---|---|---|
| Denmark (national men's) | 133906 | UEFA Nations League, Friendlies, qualifiers |
| AGF Aarhus | 133899 | Danish Superliga |
| Chelsea | 133610 | Premier League |
Override via `FOLLOW_TEAMS=133906,133899,133610` (or any other TheSportsDB team IDs).
## Tools
### `get_my_fixtures`
Get upcoming fixtures for all followed teams within the next N days. This is the primary tool for ARIA's daily check.
**Parameters:**
| Name | Type | Required | Description |
|---|---|---|---|
| `days` | number | No | Days ahead to look (default 14, max 60). |
**Returns:**
```json
{
"followedTeams": ["Denmark (id:133906)", "AGF (id:133899)", "Chelsea (id:133610)"],
"daysAhead": 14,
"count": 2,
"fixtures": [
{
"team": "AGF Aarhus",
"opponent": "Viborg",
"homeAway": "home",
"competition": "Danish Superliga",
"kickoffUtc": "2026-06-27T19:00:00.000Z",
"kickoffLocal": "2026-06-27T21:00:00",
"venue": "Ceres Park",
"status": "Not Started",
"danishBroadcast": "TV 2 Play / Viaplay"
}
],
"broadcastNote": "danishBroadcast is a best-effort hint. Rights change — verify at tvsporten.dk / tvbolden.dk."
}
```
---
### `get_team_fixtures`
Get upcoming fixtures or recent results for any football team by name or TheSportsDB team ID.
**Parameters:**
| Name | Type | Required | Description |
|---|---|---|---|
| `team` | string | **Yes** | Team name (e.g. `"Chelsea"`, `"AGF"`) or numeric TheSportsDB team ID. |
| `days` | number | No | Days ahead to look (default 14, max 60). Ignored when `last` is set. |
| `last` | number | No | Return the last N results instead of upcoming fixtures (max 20). |
---
### `get_results`
Get recent finished match results with scores for a followed team or all followed teams.
**Parameters:**
| Name | Type | Required | Description |
|---|---|---|---|
| `team` | string | No | Team name or ID to filter. If omitted, returns results across all followed teams. |
| `last` | number | No | Number of recent results (default 5, max 20). |
**Returns:**
```json
{
"count": 1,
"results": [
{
"team": "Chelsea",
"opponent": "Arsenal",
"homeAway": "home",
"competition": "Premier League",
"kickoffUtc": "2025-08-10T14:00:00.000Z",
"score": "2 - 1",
"outcome": "W"
}
]
}
```
---
### `live_now`
Check if any followed team is currently playing. Live scores require a premium TheSportsDB key. On the free key (`123`) this returns a structured unavailable notice:
```json
{
"status": "unavailable",
"message": "Live-resultater kræver en premium TheSportsDB-nøgle."
}
```
**Parameters:** None
---
## Danish Broadcast Hints (2025/26 defaults)
| Competition (substring match) | Danish Broadcaster |
|---|---|
| Premier League | Viaplay (1 kamp/uge på Amazon Prime Video) |
| Superliga / Superligaen | TV 2 Play / Viaplay |
| UEFA Champions League | Viaplay |
| Friendlies (national) | TV 2 / TV 2 Play |
| UEFA Nations League | TV 2 / TV 2 Play |
| World Cup Qualification | TV 2 / TV 2 Play |
| Euro Qualification | TV 2 / TV 2 Play |
| Anything else | Ukendt — tjek tvsporten.dk / tvbolden.dk |
Override the entire map via `BROADCAST_MAP_JSON='{"premier league":"MyTV"}'`.
**These are best-effort hints. Rights change. Always verify at [tvsporten.dk](https://tvsporten.dk) or [tvbolden.dk](https://tvbolden.dk).**
## ARIA MCP Config
Add to your ARIA credentials / MCP config to use with ARIA:
```json
{
"Name": "Football",
"Command": "npx",
"Args": ["-y", "aria-mcp-football"],
"Env": {}
}
```
No key is required. If you have a premium TheSportsDB key you can optionally add:
```json
{
"Name": "Football",
"Command": "npx",
"Args": ["-y", "aria-mcp-football"],
"Env": {
"THESPORTSDB_KEY": "your_premium_key_here"
}
}
```
Note: `THESPORTSDB_KEY` is **not** a secret — the default (`123`) is a public free key. Only use `secret:` prefix in ARIA if you want to protect a personal premium key.
## Development
```bash
git clone https://github.com/kimhjort/aria-mcp-football
cd aria-mcp-football
npm install
npm run build
npm test
```
Run the server:
```bash
node dist/index.js
```
## License
MIT — see [LICENSE](LICENSE).
Data from [TheSportsDB.com](https://www.thesportsdb.com).
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
markitdown
Python tool for converting files and office documents to Markdown.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
Train-in-Silence
The first Task-Aware MCP server and automated VRAM calculator for LLM...
stacklit
108,000 lines of code. 4,000 tokens of index. One command makes any repo...
AppClaw
AI-powered mobile automation agent — describe what you want in plain...