Verbinde deinen KI-Assistenten direkt mit aktuellen Nachrichten.
Ein produktionsreifer Model Context Protocol (MCP)-Server, der die öffentliche Tagesschau-API nutzt.
Sprache:
- 🇩🇪 Deutsch
- 🇬🇧 English
- Was ist dieses Projekt?
- Features
- Projektstruktur
- Schnellstart Lokal (Claude Desktop)
- Remote / Docker-Deployment
- Konfigurationsreferenz
- Verfügbare Tools
- Verfügbare Ressourcen
- Entwicklung
- Tests
- Makefile-Referenz
- Fehlerbehebung
- Lizenz & Danksagung
Dieser MCP-Server verbindet die ARD/Tagesschau-API mit deinem KI-Assistenten (Claude, Open Claw u.a.).
Sobald verbunden, kann der Assistent z.B folgende Anfragen beantworten:
- „Was sind die aktuellen Schlagzeilen?"
- „Zeig mir die neuesten Wirtschaftsnachrichten."
- „Suche nach Artikeln über Ukraine."
- „Welche Regionalnachrichten gibt es aus Bayern?"
Die API stammt von Tagesschau.
| Live-Nachrichten | Aktuelle Meldungen, kategorisiert, regional, in Echtzeit |
| Volltextsuche | Über alle verfügbaren Artikel |
| Livestreams | Alle Tagesschau-Kanäle mit HLS-URLs |
| Dual-Transport | stdio lokal; streamable_http für Remote und Docker |
| Docker | Multi-Stage-Build, Nicht-Root-User, Health-Checks, Limits |
| 124 Tests | Unit-Tests (< 0,3 s) + Live-Integrationstests |
| Makefile | make test, make lint, make docker-build |
| Keine Secrets | Öffentliche API, kein API-Schlüssel nötig |
ARD_MCP/
├── src/
│ └── ard_mcp/
│ ├── __init__.py # Paket-Metadaten
│ ├── config.py # Umgebungsvariablen
│ ├── client.py # Async HTTP (httpx) + Fehlerbehandlung
│ ├── validators.py # Validierung
│ ├── formatters.py # Markdown-Output
│ ├── tools.py # MCP-Tool-Logik
│ ├── resources.py # MCP-Ressourcen-Logik
│ └── server.py # FastMCP + run()
├── tests/
│ ├── conftest.py # Fixtures, Mock-Daten
│ ├── test_client.py # Client-Tests
│ ├── test_formatters.py # Formatter-Tests
│ ├── test_tools.py # Tool-Tests
│ └── test_resources.py # Ressourcen-Tests
├── main.py # Einstiegspunkt
├── pyproject.toml # Abhängigkeiten, Config
├── uv.lock # Dependency-Lock
├── Dockerfile # Produktions-Image
├── docker-compose.yml # Docker-Deployment
├── .env.example # Konfigurationsvorlage
├── Makefile # Entwickler-Tools
├── CHANGELOG.md # Versionshistorie
├── CONTRIBUTING.md # Beiträge
└── README.md # Diese Datei
Der stdio-Transport startet den Server als Subprocess. Es muss kein Port angegeben werden.
- macOS / Linux / Windows (WSL2)
- Python 3.12+
- uv
- Claude Desktop
git clone https://github.com/Jakolo121/ard_mcp_server.git
cd ard_mcp_server
uv syncuv run python -c "from ard_mcp.server import mcp; print('OK!', mcp.name)"
# Erwartete Ausgabe: OK! Tagesschau News APIWir nehmen hier Claude Desktop als Beispiel, bei anderen Assistenten die entsprechende Konfig bearbeiten
Öffne die Claude-Konfigurationsdatei:
| Betriebssystem | Pfad |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Eintrag hinzufügen (Pfad anpassen):
"tagesschau": {
"command": "uv",
"args": [
"--directory",
"/absoluter/pfad/zu/ard_mcp_server",
"run",
"ard-mcp"
]
},Die Application neustarten oder die MCP-Server neu laden, je nach Application
Frage KI-Assistenten:
„Was sind die aktuellen Tagesschau-Nachrichten?"
Der streamable_http-Transport nutzt HTTP. Geeignet für Server, Cloud-VMs oder Multi-Client-Setup. Stateless! Legacy sse wird noch supportet!
- Docker 24+
- Docker Compose v2+
cp .env.example .env
# Bei Bedarf editieren (Port, Log-Level etc.)docker compose up --build -dOder:
make docker-build
make docker-runDer Server läuft auf http://localhost:8000.
docker compose logs ard-mcp
docker compose psOder:
make docker-logs "tagesschau": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8000/mcp"]
},Für externe Server: localhost durch IP oder Domain ersetzen, Port 8000 freigeben.
docker compose down
docker compose up --build -dAlle Einstellungen kommen aus Umgebungsvariablen oder .env.
| Variable | Standard | Beschreibung |
|---|---|---|
TRANSPORT |
stdio |
stdio oder streamable_http |
PORT |
8000 |
HTTP-Port (nur streamable_http) |
LOG_LEVEL |
INFO |
DEBUG, INFO, WARNING, ERROR |
Dein Assistent kann diese aufrufen.
Top-Meldungen abrufen.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
limit |
int | 10 | Maximale Ergebnisse |
Nach Kategorie filtern.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
ressort |
str | — | inland ausland wirtschaft sport video investigativ wissen |
limit |
int | 10 | Maximale Ergebnisse |
Ressort-Strings werden automatisch zu Kleinbuchstaben normalisiert —
"Inland","INLAND"und"inland"sind gleichwertig.
Regionalnachrichten.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
region_id |
int | — | 1=BW · 2=BY · 3=BE · 4=BB · 5=HB · 6=HH · 7=HE · 8=MV · 9=NI · 10=NRW · 11=RLP · 12=SL · 13=SN · 14=ST · 15=SH · 16=TH |
ressort |
str | None | Optionaler Kategorie-Filter |
limit |
int | 10 | Maximale Ergebnisse |
Volltextsuche.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
search_text |
str | — | Suchanfrage |
page_size |
int | 10 | Ergebnisse pro Seite (max 30) |
result_page |
int | 0 | Seitenversatz (0-basiert) |
Kombinierte Abfrage — Region + Kategorie.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
regions |
str | None | Region-ID (1–16) |
ressort |
str | None | Kategorie-Filter |
limit |
int | 10 | Maximale Ergebnisse |
Live-Kanäle mit Stream-URLs.
(Keine Parameter)
URIs, die MCP-Clients lesen können.
| URI | Beschreibung |
|---|---|
tagesschau://homepage |
Top-Meldungen |
tagesschau://news/{ressort} |
Nachrichten nach Kategorie |
tagesschau://regional/{region_id} |
Regionalnachrichten |
tagesschau://search/{search_text} |
Suchergebnisse |
tagesschau://channels |
Kanäle & Streams |
git clone https://github.com/Jakolo121/ard_mcp_server.git
cd ard_mcp_server
uv sync --extra devServer starten:
uv run ard-mcpOder:
make runJedes Modul hat eine Aufgabe:
| Modul | Aufgabe |
|---|---|
config.py |
Umgebungsvariablen lesen |
client.py |
HTTP + Fehlerbehandlung |
validators.py |
Eingabevalidierung |
formatters.py |
API-Dicts zu Markdown |
tools.py |
Tool-Logik (validieren, aufrufen, formatieren) |
resources.py |
Ressourcen-Logik |
server.py |
FastMCP, Handler, Startup |
- Funktion in
tools.pyhinzufügen - Mit
@mcp.tool()inserver.pyregistrieren - Tests in
tests/test_tools.pyschreiben
uv run pytest
uv run pytest -v
uv run pytest tests/test_formatters.pyOder:
make testuv run pytest -m integration
uv run pytest -m integration -vuv run pytest -m ""Oder:
make test-alluv run pylint src/ard_mcp/
uv run pytestOder:
make check124 passed in X s ← Unit-Tests
23 selected ← Integrationstests
make test # Unit-Tests (~0,3 s)
make test-all # Unit- + Integrationstests
make lint # pylint
make check # lint + Tests (für CI)
make run # stdio-Server
make run-http # HTTP-Server
make docker-build # Docker bauen
make docker-run # docker compose up
make docker-stop # docker compose down
make docker-logs # Logs folgen
make clean # __pycache__ etc. löschen- Pfad in
claude_desktop_config.jsonist absolut? uv run python main.pystartet fehlerlos?- Claude komplett beenden, neu öffnen (Cmd+Q, nicht einfach fenster schließen)
docker compose logs ard-mcpOder:
make docker-logsHäufig: falscher TRANSPORT (in Docker muss es streamable_http sein), oder Port belegt.
Die Tagesschau-API limitiert manchmal. Das ist normal, der Server meldet einen Fehler, statt abzustürzen. Später nochmal versuchen.
uv sync --extra dev
uv run pytest(Nicht bare pytest verwenden)
Apache License 2.0.
Nachrichteninhalte: ARD / Tagesschau öffentliche Rundfunkdaten, persönliche Nutzung und Forschung.
Danke an AndreasFischer1985 für die Tagesschau-API.