mcpField
T
tvpilot

tvpilot

Local
github.com/CloudCorpRecordsGames & Entertainment0Updated 1w ago

About tvpilot

tvpilot is a CLI and stdio MCP server for controlling paired Android TV and Google TV devices. It supports remote input, app launching, title playback, and screen inspection through the TVWizard relay.

Key features

  1. 01List paired TVs and installed apps
  2. 02Send remote key events
  3. 03Launch apps, intents, and URLs
  4. 04Resolve and play streaming titles
  5. 05Inspect foreground screen elements

Use cases

  1. 01Check whether a paired TV is online
  2. 02Navigate a TV interface remotely
  3. 03Open an app or deep link on a TV
  4. 04Find and play a title from a provider

MCP support

Exposes tools to MCP clients for listing paired devices and apps, sending keys, launching apps, playing titles, and observing screen contents. Calls are forwarded through the TVWizard relay.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"cloudcorprecords-tvpilot": {
"command": "npx",
"args": [
"-y",
"@reneturcios/tvpilot"
]
}
}
}
Run commandnpx -y @reneturcios/tvpilot

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@reneturcios/tvpilot0.1.0
ocighcr.io/cloudcorprecords/tvpilot:0.1.0

Tools

6

Saved tool list · updated 1w ago

This tool takes no parameters.

Details

From the project 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

npx @reneturcios/tvpilot devices

Or run the container image:

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

tvpilot devices
tvpilot key POWER
tvpilot launch https://www.youtube.com/watch?v=jNQXAC9IVRw --package com.google.android.youtube.tv
tvpilot apps
tvpilot play Stranger Things --country US --season 2 --episode 3 --year 2016 --provider netflix
tvpilot 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:

npx -y @reneturcios/tvpilot mcp

MCP client configuration:

{
  "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

npm install
npm 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.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.