Find the media stream behind any web page: browser-driven HLS/DASH/MP4 with learnable site profiles
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"io-github-josesepulvedapino-zahori": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Find the media stream behind any web page: browser-driven HLS/DASH/MP4 with learnable site profiles
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
This server is missing a description. Tools and install config are also missing.If you've used it, help the community.
Add informationBe the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in browser
Browser automation with Puppeteer for web scraping and testing
Self-hosted URL- and file-to-Markdown service for humans and AI agents - web pages, documents, images, audio, YouTube. PWA + REST + MCP + Claude Code skill, Reddit-aware, refreshable share links.
🔥 Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
The Apify MCP server enables your AI agents to extract data from social media, search engines, maps, e-commerce sites, or any other website using thousands of ready-made scrapers, crawlers, and automation tools available on the Apify Store.
MCP Security Weekly
Get CVE alerts and security updates for io.github.josesepulvedapino/zahori and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Find the media stream behind any web page.
A real browser opens the page, dismisses the overlays, presses play, and watches the network until the media request appears. You get the stream URL (HLS, DASH, MP4 or audio) plus the headers needed to replay it.
$ npx zahori get https://example.org/live
https://cdn.example.org/hls/live/master.m3u8
No per-site configuration. No extractor to wait for. If a browser can play it, zahori can find it.
zahori heal repairs a profile when the site changes, using a BYO-key model, verified by an objective oracle before anything is saved.The long tail of the web streams through embedded players that no downloader knows: local TV and radio stations, live event pages, small video portals. yt-dlp is superb for the big platforms it curates extractors for. But the long tail has no extractor, and hand-writing one per site doesn't scale.
| yt-dlp | zahori | |
|---|---|---|
| Coverage | ~1,800 curated sites | any page a browser can open |
| Method | per-site extractor code | real browser + network sniffing |
| New site | wait for a maintainer | works generically, or learn it in minutes |
| Site changed | extractor breaks until patched | zahori heal repairs the profile |
They are complementary: use yt-dlp for YouTube, use zahori for the page nobody wrote an extractor for.
npm install -g zahori # CLI
npm install zahori # library
Requirements
| Node | ≥ 22 |
| Browser | run npx playwright install chromium --only-shell once; otherwise your installed Google Chrome is used |
| ffmpeg | optional, only for --validate, --download and the discovery oracle |
pnpm users: pnpm blocks dependency build scripts by default, so Playwright won't auto-download a browser. Run the
playwright installline above once, or your system Chrome is used as a fallback.
# Resolve the stream URL behind a page (URL to stdout, everything else to stderr)
zahori get https://tv.example.org/live
# Full result as JSON: url, kind, live/VOD, replay headers, all candidates
zahori get https://tv.example.org/live --json
# Prefer an audio language on multilingual streams
zahori get https:/
... [View full README on GitHub](https://github.com/josesepulvedapino/zahori#readme)