The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Al Jazeera 360 listing page.
Connect any AI assistant to Al Jazeera 360's streaming catalog — search, browse, and retrieve Arabic video content with direct watch links.
An MCP (Model Context Protocol) server that gives AI tools like Claude, ChatGPT, Gemini, and Cursor real-time access to Al Jazeera 360's full content library: documentaries, investigative programs, talk shows, podcasts, and original productions.
⚠️ Unofficial community project. Not affiliated with, endorsed by, or sponsored by Al Jazeera Media Network. It uses the platform's publicly accessible API and links back to
aljazeera360.comfor all content.
A hosted instance is live on Cloudflare. Add this to your MCP client config and you're done:
First request after idle takes a few seconds (container cold start) — subsequent requests are fast.
Then ask your assistant: "What's trending on Al Jazeera 360?" — or in Arabic: "ايه أحدث حلقات الدحيح؟"
Ask your AI assistant questions like:
The AI connects to this server, fetches real data from Al Jazeera 360, and returns actual video titles, descriptions, durations, and direct watch links to aljazeera360.com.
The server ships with two tool profiles:
| Profile | Tools | For whom | How |
|---|---|---|---|
| Core (default) | 8 discovery tools | End users asking AI assistants about content | Works out of the box |
| Full | All 24 tools (+ SEO & analytics) | Content teams, SEO analysts | Set AJ360_ENABLE_SEO_TOOLS=1 |
A small default toolset keeps AI tool selection fast and accurate. Enable the full profile only if you need the SEO/analytics tools.
| Tool | What It Does |
|---|---|
list_sections | Lists all 15 sections/channels available on the platform |
get_trending_content | Returns featured and most-watched content from the homepage |
browse_section | Browses all content within a specific section (e.g., Documentaries, Podcasts) |
get_video_details | Returns full metadata for a video: title, description, duration, quality (up to 4K), watch URL |
get_series_details | Returns series info with all available seasons |
get_season_episodes | Lists all episodes within a specific season |
search_videos | Full-text search across all content (Arabic & English), with optional content type filter |
get_latest_episodes | Returns the most recently published episodes from any section |
AJ360_ENABLE_SEO_TOOLS=1)| Tool | What It Does |
|---|---|
generate_seo_content | Generates optimized Arabic titles, descriptions, and keywords for a video |
generate_sitemap | Generates a Google Search Console-ready Video XML Sitemap (paginated) |
audit_metadata_quality | Audits catalog health — missing descriptions, thumbnails, and categories (paginated) |
get_trending_topics | Extracts the top trending keywords and topics across the catalog |
compare_sections | Compares content freshness and activity across all sections |
get_series_seo_map | Generates a complete SEO map for a series with all episodes |
AJ360_ENABLE_SEO_TOOLS=1)| Tool | What It Does |
|---|---|
build_knowledge_graph | Builds an entity knowledge graph from catalog metadata |
generate_faq_schema | Generates FAQ Schema JSON-LD for a video |
get_ai_discoverability_score | Scores how discoverable content is by AI assistants |
build_topic_clusters | Groups content into SEO topic clusters with pillar and supporting pages |
find_evergreen_content | Identifies content that stays relevant over time |
get_host_profile | Generates a Person Schema and profile for a show host |
get_genre_report | Reports on genre distribution and SEO opportunities |
get_searchable_tags_map | Maps the most searched keywords across the catalog (paginated) |
get_country_content_map | Maps content by country for geo-targeted SEO (paginated) |
generate_series_schema | Generates TVSeries + TVEpisode JSON-LD Schema for a series |
| ID | Channel |
|---|---|
AJ360-Originals | Al Jazeera 360 Originals |
AJA | Al Jazeera Arabic |
AJD | Al Jazeera Documentary |
Atheer | Atheer |
AJ-Plus | AJ+ Arabic |
Talk Show | Talk Shows |
Investigative Show | Investigative Programs |
Podcast | Podcasts |
Documentaries | Documentaries |
Field Show | Field Reporting |
Policy Series | Political Series |
Social Series | Social Series |
Historical Series | Historical Series |
Biographical Series | Biographical Series |
Culture and Arts Series | Culture & Arts |
The server supports multiple authentication methods (in priority order):
Refresh Token (Recommended) — Auto-refreshes every 10 minutes, valid for ~1 year:
Auth Token — Direct token, expires in ~10 minutes:
Guest Mode — No configuration needed. The server auto-creates a guest session.
How to get your refresh token:
localStorage.getItem('dice:refreshToken')Core tools are tested against the live API.
Add to your config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop. The Al Jazeera 360 tools will appear automatically.
This server speaks the standard MCP protocol over stdio (local) and Streamable HTTP (hosted). It works with any MCP-compatible client:
| Variable | Required | Default | Description |
|---|---|---|---|
AJ360_REFRESH_TOKEN | No | — | Long-lived refresh token (~1 year). Best for production. |
AJ360_AUTH_TOKEN | No | Guest mode | Short-lived auth token (~10 min). Good for quick testing. |
AJ360_API_KEY | Yes | — | Platform API key (public, from browser network requests). No default is bundled — you must provide it. |
MCP_TRANSPORT | No | streamable-http | Transport mode: stdio (local), streamable-http (cloud, recommended), or sse (legacy cloud). |
MCP_PORT | No | 8080 | Port for the HTTP transport (cloud deployment). |
AJ360_ALLOWED_HOST | Cloud only | — | Public hostname of your deployment (no scheme). Required when self-hosting on a custom domain — the DNS-rebinding protection rejects unknown hosts with 421. |
AJ360_ENABLE_SEO_TOOLS | No | off | Set to 1 to register the 16 SEO/analytics tools (full profile). |
AJ360_ENABLE_DASHBOARD | No | true | Enable/disable the analytics dashboard. |
AJ360_DASHBOARD_PORT | No | 9090 | Port for the analytics dashboard. |
AJ360_DASHBOARD_TOKEN | No | — | Shared secret for the analytics data endpoints (/api/stats, /api/recent). When set, callers must send Authorization: Bearer <token> or ?token=<token>. Strongly recommended for any public/cloud deployment. |
AJ360_ANALYTICS_DB | No | analytics.db | Path to SQLite analytics database. |
The server needs only AJ360_API_KEY to run — authentication falls back to an automatic guest session. For full content access, also provide a refresh token.
The production instance runs on Cloudflare Containers — full walkthrough in
deploy/cloudflare/README.md (wraps the Dockerfile in a
Cloudflare Container behind a tiny Worker; requires the Workers Paid plan and local
Docker for deploys). Any container platform works — alternatives below.
Connect this repo — auto-deploys from the included Dockerfile. Set environment variables in the dashboard (including AJ360_ALLOWED_HOST=<your-domain> so the DNS-rebinding protection accepts your host).
The server includes pre-built prompts for common AI scenarios:
| Prompt | Description |
|---|---|
recommend_documentary | Find and recommend documentaries about a specific topic |
summarize_latest | Summarize the latest episodes from a section |
explore_series | Explore a series — find all seasons and episodes |
Calling search_videos("غزة") returns:
The server includes a built-in analytics dashboard that tracks every request made by AI tools.
search_videos, get_trending_content, etc.)The dashboard starts automatically on port 9090 when you run the server:
For cloud deployments, expose port 9090 alongside the MCP port (8080).
| Endpoint | Returns |
|---|---|
GET / | Interactive HTML dashboard (auto-refreshes every 10s) |
GET /api/stats | JSON summary: total requests, tools usage, top searches, daily breakdown |
GET /api/recent | JSON list of the 50 most recent requests with full details |
GET /api/health | Health check with version, transport, and links to /privacy and /docs |
GET /privacy | Privacy Policy page |
GET /docs | Server documentation page |
| Variable | Default | Description |
|---|---|---|
AJ360_ENABLE_DASHBOARD | true | Set to false to disable the dashboard |
AJ360_DASHBOARD_PORT | 9090 | Port for the analytics HTTP server |
AJ360_DASHBOARD_TOKEN | — | Shared secret required to read /api/stats and /api/recent. Set this on any public deployment. |
AJ360_ANALYTICS_DB | analytics.db | SQLite database file path |
| Component | Technology |
|---|---|
| Language | Python 3.10+ |
| MCP SDK | mcp (Anthropic official) |
| HTTP | httpx (async) |
| Retry | tenacity (exponential backoff) |
| Auth | Firebase JWT (auto-managed with refresh) |
| Analytics | SQLite + built-in HTTP dashboard |
| Video Quality | Up to 4K (2160p) |
| Transport | stdio (local) / Streamable HTTP (cloud, recommended) / SSE (legacy) |
MIT
This repo doubles as an AI-assisted SEO operations workspace for the platform. Open it in Claude Code and you get:
| Piece | What it does |
|---|---|
.claude/agents/onvesper-expert.md | Expert agent on the Vesper/Deltatre platform that powers aljazeera360.com — ask it anything about Back Office, DVE, licences, advertising, etc. |
onvesper-kb/ | Full offline mirror of the official Vesper docs (317 pages, rebuild anytime with bash onvesper-kb/refresh.sh) |
/seo-report skill | On-demand deep SEO analysis: runs the SEO tools, reads trends, and turns findings into exact Back Office fix steps |
scripts/seo_snapshot.py | Metrics collector behind the skill (discoverability scores, metadata audits, tag maps). Reports are generated locally on demand — never committed. |
PRs welcome. See CONTRIBUTING.md for guidelines.
Run tests before submitting: