vizio-tv
# vizio-tv
MCP server to control a Vizio SmartCast TV over your local network. No cloud required — talks directly to the TV via the SmartCast local API.
## Tools
| Tool | Description |
|------|-------------|
| `pair_start` | Initiate pairing — shows a PIN on the TV screen |
| `pair_finish` | Complete pairing with the PIN from the TV |
| `power` | Turn TV on, off, or toggle |
| `volume` | Volume up, down, or mute (with optional step count) |
| `send_key` | Send any remote key (up, down, ok, back, home, play, pause, etc.) |
| `change_input` | Cycle to the next input source |
| `get_state` | Get current power and volume state |
## Setup
```bash
npm install
export VIZIO_IP=<your-tv-ip> # find in TV Settings > Network
node index.js
```
Find your TV's IP: `Menu → Network → Manual Setup → IP Address`
## Pairing (one-time)
After starting the server, run `pair_start` — a 4-digit PIN appears on the TV. Then run `pair_finish` with that PIN. Auth token is saved to `config.json` (gitignored).
## Add to Claude Code
```json
{
"mcpServers": {
"vizio-tv": {
"command": "node",
"args": ["/path/to/vizio-tv/index.js"],
"env": { "VIZIO_IP": "<your-tv-ip>" }
}
}
}
```
## Available keys for `send_key`
`power` `vol_up` `vol_down` `mute` `up` `down` `left` `right` `ok` `back` `exit` `home` `menu` `input` `play` `pause` `stop` `rewind` `fast_forward` `ch_up` `ch_down`
TDQS
Scored across 7 tools
Most tools have clear distinct purposes (e.g., power, volume, input). However, 'send_key' can duplicate functionality of other tools (e.g., power, volume) by sending the corresponding key, creating potential confusion.
All tools use a consistent snake_case naming convention (e.g., change_input, get_state, pair_finish). The pattern is uniform and predictable.
7 tools is an appropriate number for a TV remote control API, covering essential operations like power, volume, input switching, pairing, and generic key sending without being overly bloated.
Covers core TV control functions (power, volume, input, pairing, key sending). Missing a few features like getting current input or mute, but these are minor gaps for the stated purpose.