Tvpilot

io.github.CloudCorpRecordsPublished by GitHub account CloudCorpRecordsv0.1.0Updated Nov 3, 2026

Android TV remote: list devices, send keys, launch apps, play titles, and observe the screen.

VerifiedSTDIODesktop only

Overview

Tvpilot's local MCP server; no sign-in required; STDIO.

No AI overview yet: these facts come from the registry entry and the server itself.

Installation

In SourceWeft

  1. Open Tvpilot 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

tvpilot

tvpilot controls a paired Android TV or Google TV: it lists the paired device, sends remote key events, launches apps and intents, resolves a spoken-style title to the right streaming provider and plays it, and reads back what is on the screen. One binary serves a command-line interface and a stdio MCP server.

Calls go through the TVWizard relay, which forwards them over a WebSocket to the bridge app running on the TV, so no same-network, VPN, or port-forwarding setup is needed. Pairing is done once in the bridge app: it shows a code, you claim it, and you receive a bearer token for your TV.

Configuration

Two environment variables configure the tool:

  • TVWIZARD_TOKEN (required) — the bearer token issued when you paired your TV. Without it every call fails with an error naming the variable; there are no unauthenticated or fake results.
  • TVWIZARD_MCP_URL (optional) — the relay endpoint. It defaults to https://tv.djwizard.ai/api/mcp. Note: the public TVWizard documentation describes the relay architecture and its bearer auth but does not publish the relay's raw HTTP path, so this default endpoint is a documented reconstruction; override it if the relay publishes a different path.

Install

bash
npx @reneturcios/tvpilot devices

Or run the container image:

bash
docker run -i ghcr.io/cloudcorprecords/tvpilot

The container defaults to the MCP server (see below). Pass CLI arguments to use it as a CLI instead.

CLI

bash
tvpilot devicestvpilot key POWERtvpilot launch https://www.youtube.com/watch?v=jNQXAC9IVRw --package com.google.android.youtube.tvtvpilot appstvpilot play Stranger Things --country US --season 2 --episode 3 --year 2016 --provider netflixtvpilot observe
tvpilot --version

Commands print the relay's JSON payload. Exit codes: 0 on success, 1 when a call fails (including a missing token or an upstream relay error), 2 for usage errors.

Keys for tvpilot key are POWER, HOME, UP, DOWN, LEFT, RIGHT, OK, BACK, VOL_UP, and VOL_DOWN. Providers for --provider are netflix, disney_plus, prime_video, max, hulu, apple_tv_plus, paramount_plus, peacock, fubo_tv, youtube, and stremio.

tvpilot observe needs the Android AccessibilityService granted to the bridge app. The first call without it returns an accessibility_not_granted error explaining that a setup prompt was posted on the TV; tap it, then retry.

MCP server

One bin serves both faces. The mcp subcommand starts a stdio MCP server:

bash
npx -y @reneturcios/tvpilot mcp

MCP client configuration:

json
{  "mcpServers": {    "tvpilot": {      "command": "npx",      "args": ["-y", "@reneturcios/tvpilot", "mcp"],      "env": { "TVWIZARD_TOKEN": "<your token>" }    }  }}

Tools

ToolInputWhat it returns
tv.list_devices(none)The TVs paired with the caller's token, each with an id and online flag.
tv.send_keykey (required)Sends one key event: one of the ten keys listed above.
tv.launch_appdata (required), package (optional)Opens an Intent URI, deep link, or URL, optionally in a named package.
tv.list_apps(none)Installed apps with package, label, and a leanback flag for TV launchers.
tv.play_titletitle (required); country, season, episode, year, provider (optional)Resolves the title to a provider deep link and plays it.
tv.observe(none)Foreground package/activity, the focused element, and visible clickable nodes.

Upstream failures — a title that cannot be found, no provider for the title in the chosen country, a relay with its resolver disabled, or accessibility not yet granted — are returned as error results carrying the relay's own message.

Development

bash
npm installnpm run build   # tsc -> dist/npm test        # node test runner over test/*.test.ts, no network (fake fetch fixtures)npm run dev     # run the CLI from source via tsx

License

MIT — see LICENSE.

Source: README.md at commit c8a3447

Tools

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

Version history

1
  1. v0.1.0LatestNov 3, 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