15 tools for controlling Samsung Tizen TVs via local network. Auto-discovery (SSDP), WebSocket remote, UPnP volume/DLNA, app management, browser control, and Wake-on-LAN. Tested on Samsung UN65TU7000KXZL (2020, Crystal UHD). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| main.py | ||
| pyproject.toml | ||
| tv.py | ||
README.md
Samsung TV MCP Server
A Model Context Protocol server that lets AI assistants control Samsung Smart TVs (Tizen OS, 2016+) over the local network. No cloud, no SmartThings account required.
Early release — Core functionality works and has been tested on a Samsung UN65TU7000 (2020, Tizen). Not all tools have been exhaustively tested across different TV models and firmware versions. Bug reports and PRs are welcome.
Features
- 15 tools for complete TV control via natural language
- Auto-discovery — finds Samsung TVs on your network via SSDP
- Zero config — no API keys, no cloud, everything runs locally
- Multi-protocol — combines WebSocket, REST, UPnP/DLNA, and Wake-on-LAN
- Persistent auth — first connection requires TV approval, then uses saved token
- Auto-reconnect — recovers from dropped WebSocket connections
Tools
| Tool | Description |
|---|---|
tv_discover |
Scan LAN for Samsung Smart TVs |
tv_info |
Get TV status (model, IP, power, volume) |
tv_power |
Turn TV on (WoL) or off |
tv_key |
Send any remote control key press |
tv_keys |
Send a sequence of key presses |
tv_navigate |
Semantic navigation (home, back, source, menu...) |
tv_volume |
Get/set volume (0-100), mute/unmute |
tv_channel |
Change channel by number or up/down |
tv_apps |
List all installed apps |
tv_launch |
Launch app by name ("netflix") or ID |
tv_close_app |
Close a running app |
tv_browser |
Open a URL in the TV's browser |
tv_text |
Type text into active input fields |
tv_cursor |
Move virtual cursor on screen |
tv_media |
Play media via DLNA (video/audio/images) with transport controls |
Requirements
- Python 3.10+
- Samsung Smart TV with Tizen OS (2016 or newer)
- TV and MCP server on the same local network
Installation
pip install "samsungtvws[encrypted]" "mcp[cli]"
Claude Code
claude mcp add samsung-tv -- python /path/to/samsung-tv-mcp/main.py
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"samsung-tv": {
"command": "python",
"args": ["/path/to/samsung-tv-mcp/main.py"]
}
}
}
First Connection
On the first WebSocket connection, the TV will show a popup asking to allow "ClaudeCode". Accept it once — a token is saved to token.json for future sessions.
To minimize prompts, go to Settings > General > External Device Manager > Device Connection Manager and set Access Notification to "First Time Only".
Supported App Aliases
You can use friendly names instead of numeric IDs:
netflix, youtube, prime, disney, spotify, apple tv, hbo, max, plex, browser, steam link, twitch, tiktok, tubi, pluto, paramount, gallery, smartthings
Architecture
main.py → FastMCP tools (thin layer, ~120 lines)
tv.py → SamsungTV client (WebSocket + UPnP + SSDP + WoL, ~250 lines)
- WebSocket (port 8002/8001): remote keys, apps, browser, text input, cursor
- REST (port 8001): device info, app launch/close
- UPnP SOAP (port 9197): precise volume control, DLNA media playback
- Wake-on-LAN: power on from standby
Known Limitations
- Wake-on-LAN may not work reliably on all models (requires TV config)
- No direct HDMI source switching via API (must navigate the source menu with keys)
- No brightness/contrast/picture settings control
- No screenshot capability
- Text input only works when the TV's virtual keyboard is active
- DRM-protected content cannot be streamed via DLNA
Tested On
- Samsung UN65TU7000KXZL (2020, Crystal UHD, Tizen, Colombia)
License
MIT