mediathek-mcp
Searches and retrieves ZDF programmes through the German Mediathek (MediathekViewWeb) API, enabling search by title/topic/description, browsing the newest ZDF broadcasts, listing all episodes of a ZDF show, and fetching full programme details including direct MP4 video URLs (low/standard/HD), subtitle URLs, broadcast times, durations and website links.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mediathek-mcp show me the latest ZDF heute journal episodes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mediathek-mcp πΊ
mcp-name: io.github.mohammad-abbasi-sh/mediathek-mcp
Unofficial read-only MCP server for the German Mediathek via the free MediathekViewWeb API β search the programmes of ARD, ZDF, 3sat, ARTE, Phoenix, tagesschau24, KiKA and the regional channels. No key, no login.
Built by Mohammad Abbasi as part of the "Germany MCP factory" (Sepehr-style pipeline). Not affiliated with MediathekView, ARD or ZDF.
For AI agents
Add to your MCP client config (stdio):
{
"mcpServers": {
"mediathek": {
"command": "uvx",
"args": ["mediathek-mcp==0.1.1"]
}
}
}Or run locally: python -m mediathek_mcp.server (needs mcp<2, httpx).
Related MCP server: mcp-tvmaze
Tools
Tool | Description |
| Search programmes by title, topic or description β |
| Newest programmes across all channels, newest first β |
| Newest programmes of one channel β |
| All episodes of one show/series β |
| Full detail of one programme: all video URLs (low/standard/HD), subtitle URL, website link β |
| Channels in the film list (curated list β the API has no channel-list endpoint) |
Example output (mediathek_search_programmes / "Tagesschau"):
{"query": "Tagesschau", "channel": null, "total_results": 8823, "count": 3,
"film_list_updated": "2026-11-09T10:19:00+00:00", "programmes": [
{"id": "+sU90jI0m7KCrRqsj5aYEh9Owg7tr+3K9IRl39v+A8o=",
"channel": "tagesschau24", "topic": "tagesschau in 100 Sekunden",
"title": "tagesschau in 100 Sekunden",
"description": "tagesschau in 100 Sekunden",
"broadcast": "2026-11-09T04:43:00+00:00", "duration_seconds": 170,
"duration": "2:50",
"video_url": "https://tagesschau-progressive.ard-mcdn.de/video/2026/1109/TV-20261109-0445-5500.webxl.h264.mp4",
"video_url_hd": "https://tagesschau-progressive.ard-mcdn.de/video/2026/1109/TV-20261109-0445-5500.webxxl.h264.mp4",
"video_url_low": "https://tagesschau-progressive.ard-mcdn.de/video/2026/1109/TV-20261109-0257-3000.webm.h264.mp4",
"subtitle_url": "", "website_url": "https://www.ardmediathek.de/video/...",
"size_bytes": 40894464},
...]}Notes:
The film list holds ~700,000 programmes and is updated several times a day; results are newest first.
"Latest broadcasts" searches the most common letter across title/topic/description β the API returns nothing for an empty query and has no wildcard, so this is effectively the newest programmes.
Channel filtering in
mediathek_search_programmesis applied client-side over the newest 50 text matches (the API has no AND query);mediathek_by_channelqueries the channel directly.total_resultsis capped at 10,000 by the API for very broad queries.Video URLs are direct MP4 links (low / standard / HD);
subtitle_urlis empty when no subtitles exist.Data: MediathekViewWeb public API β no key, no login, read-only.
Development
python3 -m venv .venv && .venv/bin/pip install "mcp<2" httpx pytest
.venv/bin/python -m pytest tests/ -qtests/test_domain.pyβ offline, parses real captured API fixtures (19 tests)tests/test_live.pyβ cautious live requests against mediathekviewweb.de (6 tests)
Tests: 25/25 green (19 offline + 6 live, 2026-11-09).
License
MIT
Built by Mohammad Abbasi β Almanibama Β· mabbasi.ir
Available Tools
7 toolsmediathek_by_channelA
Newest programmes of one channel, newest first. channel: e.g. "ZDF", "ARD", "3sat", "ARTE.DE", "PHOENIX" (see mediathek_list_channels). limit: 1..50 (default 10).
Inputs: channel (required), limit. Returns: result
mediathek_by_topicA
All episodes of one show/series (topic), newest first. topic: e.g. "heute journal" or "Tagesschau". limit: 1..50 (default 10).
Inputs: topic (required), limit. Returns: result
mediathek_healthA
Check whether mediathekviewweb.de is reachable right now.
Returns status ok (HTTP 200), blocked (HTTP 403/429 β bot wall or rate limit) or error, plus the HTTP status and the probed URL. One polite request; it does not fetch any listings.
Inputs: no named parameters. Returns: result
mediathek_latest_broadcastsA
Newest programmes across all channels, newest first. limit: 1..50 (default 10).
Inputs: limit. Returns: result
mediathek_list_channelsB
Channels in the MediathekView film list (curated list β the API has no channel-list endpoint).
Inputs: no named parameters. Returns: result
mediathek_programme_detailA
Full detail of one programme: all video URLs (low/standard/HD), subtitle URL and website link. title: exact programme title, e.g. "heute journal vom 8. November 2026 (S2026/E333)". channel: optional, e.g. "ZDF", to disambiguate same-named titles.
Inputs: title (required), channel. Returns: result
mediathek_search_programmesA
Search Mediathek programmes by title, topic or description. query: free text, e.g. "Tagesschau" or "Tatort". channel: optional, e.g. "ZDF" (see mediathek_list_channels). limit: 1..50 (default 10).
Inputs: query (required), limit, channel. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 7 tools
Each tool has a clear primary purpose: free-text search, latest listings, channel filtering, topic/series listing, programme detail, channel enumeration, and health check. There is some overlap between search_programmes and by_topic since both can retrieve items by show/topic, and between latest_broadcasts and by_channel, but the descriptions make the intended distinctions reasonably clear.
All tools use a consistent mediathek_ prefix and snake_case naming, making the set easy to scan. The suffixes mix grammatical patterns (search_programmes, latest_broadcasts, by_channel, programme_detail), but they remain readable and internally predictable.
Seven tools is well-scoped for a read-only media browsing server, with each tool covering a distinct browsing mode plus a health probe. No tool feels redundant or superfluous.
The surface covers the core read-only lifecycle: discovery via search/latest/channel/topic, detail retrieval with media URLs, channel listing, and availability checking. Minor gaps include no pagination beyond the 50-item limit and no date-range filtering, but agents can work around these.
Maintenance
Related MCP Connectors
MRVN: German public tenders, MaStR energy units and EV charging stations via your RapidAPI key.
Search 77k public-sector open data APIs across 10 countries. Read-only, no API key.
YouTube discovery, transcripts, library search, and monitors with API keys or OAuth.
Search public procurement notices from 17 sources across Germany, the EU and the UK. Read-only.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables querying TV programming data from Tunarr XMLTV feeds, including viewing channel listings, current and upcoming schedules, and searching for programmes by title or description.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching TV show metadata, episodes, and schedules via the TVMaze API with no authentication required.303 npmMIT
- AlicenseAqualityBmaintenanceEnables read-only access to German news headlines, section and regional feeds, latest videos, keyword search, and full article text via official RSS feeds. No API key or login is required.7MIT
- AlicenseAqualityBmaintenanceEnables read-only search and retrieval of German open-data datasets, publishers, recent updates, and resource details from govdata.deβs CKAN API without authentication.6MIT