Chromecast / DLNA casting (catt)

io.github.amineutronPublished by GitHub account amineutronv0.3.0Updated Oct 24, 2026

Cast YouTube videos and media to a Chromecast or DLNA device with catt, and control playback.

VerifiedSTDIODesktop onlyProductivity & WorkflowMedia & Design

Overview

AI-generated overview

Lets an assistant cast YouTube videos and other media URLs to a Chromecast or DLNA device and control playback.

What you can do
Wraps the catt casting tool in about 15 MCP tools. It can cast a YouTube video by URL or ID, cast any media URL, stop, pause, resume, seek and set volume, and report cast status and media info. It also scans the network for Chromecast and DLNA devices, and on Linux with Hyprland it can mirror the active Firefox tab to the TV, including a dual-screen mode that keeps PC and TV playback in sync.
When to use it
Useful when you want an assistant to start or steer playback on a TV or Chromecast in the same network, for example casting a YouTube link, pausing or resuming, or adjusting volume by voice or chat. The Firefox mirroring and dual-screen tools only make sense on a Linux desktop running Hyprland with Firefox.
Requirements
Local process, run with uvx from the PyPI package catt-mcp, or installed with pip. Needs Python 3.10+, the catt and yt-dlp packages, and a Chromecast or DLNA device on the same network. Set CATT_DEVICE to the device name or IP; TV_HOST is optional for waking an Android TV over ADB, and ADB_PATH if adb is not on PATH. The dual-screen tools additionally need Hyprland with hyprctl, playerctl, Firefox and lz4.
Before you install
The server controls a real device on your network: cast, stop, pause, seek and volume tools change what is playing, and the dual-screen tools drive Firefox and the TV through ADB. It asks for your device name or IP in CATT_DEVICE and TV_HOST, so those values end up in the assistant's configuration. No authentication is declared, so anyone able to reach the server can operate the TV.

Installation

In SourceWeft

  1. Open Chromecast / DLNA casting (catt) in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

catt-mcp

[tests] [License: MIT] [Python 3.10+]

MCP server for casting YouTube videos and media to Chromecast/DLNA devices via catt.

Exposes 15 tools covering YouTube casting, playback control, dual-screen sync, and device discovery.

Demo

[MCP client: the 15 tools, then cast_scan finding the TV]

Recorded on the real network with docs/demo/record.sh: a minimal MCP client (docs/demo/mcp_demo.py) starts the server over stdio with CATT_DEVICE in the environment, lists the tools and calls cast_scan (read-only). Private IP addresses are replaced with documentation addresses.

Tools

OutilRôle
cast_youtubeCaste une video YouTube sur la TV (URL ou ID de video)
cast_urlCaste une URL quelconque (video, audio, stream) sur la TV
cast_stopArrete le cast en cours sur la TV
cast_pauseMet en pause le cast en cours
cast_resumeReprend la lecture du cast
cast_volumeRegle le volume du cast (0-100)
cast_seekAvance ou recule dans la video
cast_statusRetourne le statut du cast en cours
cast_scanScanne les devices Chromecast/DLNA disponibles sur le reseau
cast_infoRetourne les infos detaillees du media en cours
cast_browserCaste la video de l'onglet actif de Firefox sur la TV (YouTube, Twitch, etc.)
cast_browser_dualLance la video sur PC (Firefox) ET TV simultanement avec synchronisation (pour LightBeat)
cast_dual_resyncResynchronise PC et TV en relancant la TV a la position Firefox
cast_dual_stopArrete le dual cast et le watcher de synchronisation
cast_dual_offsetAjuste le decalage TV (positif=TV en avance, negatif=TV en retard)

YouTube ID extraction

_extract_video_id (URL watch?v=, youtu.be/, shorts/ or a bare 11-character ID, anything else rejected before it reaches catt/ADB) is deliberately duplicated in pylips-mcp (youtube_video, TV app with Premium account). Both servers stay installable on their own; each one tests its copy with the same table of cases (tests/test_youtube_id.py). Decision recorded on 2026-09-20.

Requirements

  • Python 3.10+
  • catt: pip install catt
  • yt-dlp: pip install yt-dlp
  • A Chromecast or DLNA-compatible device on the same network
  • lz4 (optional, for cache compression): pip install lz4

Dual cast (Linux + Hyprland)

cast_browser, cast_browser_dual, cast_dual_resync, cast_dual_stop and cast_dual_offset drive Firefox from the running desktop session. They are advertised only when the required binaries are present:

  • Hyprland with hyprctl in PATH
  • playerctl for MPRIS playback control
  • Firefox holding the video to mirror
  • lz4 (Python) to read Firefox's session cache

Without them the server starts normally and simply does not expose these five tools, instead of failing when they are called.

Installation en une ligne

bash
uvx catt-mcp                 # depuis PyPI ; avant publication : uvx --from git+https://github.com/amineutron/catt-mcp catt-mcp

Configuration Claude Desktop / Claude Code (mcpServers) :

json
{ "catt": { "command": "uvx", "args": ["catt-mcp"], "env": { "CATT_DEVICE": "Living Room TV" } } }

Setup

1. Install dependencies

bash
pip install mcp catt yt-dlp

2. Discover your device

bash
catt scan

Note the device name (e.g. 55OLED705/12, Living Room TV).

3. Configure

Copy config.example.yaml to config.yaml:

yaml
catt:  device: "55OLED705/12"   # Name from catt scan

4. Run

bash
catt-mcp                      # installed (pip, uvx) ; `catt-mcp --help` lists the settingspython -m catt_mcp            # same thing, from any environment where the package is installedpython server.py              # from a clone, without installing (thin launcher, code in catt_mcp/)

Or with environment variable:

bash
CATT_DEVICE="55OLED705/12" catt-mcp

The code lives in the catt_mcp package (catt_mcp/server.py, catt_mcp/sync_watcher.py), so it can be installed next to other MCP servers without module name clashes.

The dual-screen tools (dual_cast, dual_resync, dual_offset) drive the TV through ADB and need its IP address. Set it with TV_HOST (or tv.host in config.yaml), for example TV_HOST="192.0.2.10"; the built-in default is only a placeholder.

Claude Desktop Configuration

json
{  "mcpServers": {    "catt": {      "command": "python3",      "args": ["/path/to/catt-mcp/server.py"],      "env": {        "CATT_DEVICE": "55OLED705/12"      }    }  }}

License

MIT

Part of the Lyra ecosystem

DépôtRôle
lyraassistant DevOps vocal, local par défaut (AGPL-3.0)
fedora-agentsMCP : machines virtuelles KVM et sauvegardes
mcp-trackingMCP + API + tableau de bord des tâches longues
neutroncorehub PWA du homelab
hue-mcpMCP Philips Hue (fork de ThomasRohde/hue-mcp)
pylips-mcpMCP TV Philips
denon-mcpMCP ampli Denon
catt-mcpMCP Chromecast et DLNA

Source: README.md at commit 9709a1e

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v0.3.0LatestSep 25, 2026
  2. v0.2.1Sep 24, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts