
Rokumcp
Connects to Roku devices over your local network and exposes their full automation surface: ECP remote control (keypress, launch), screenshot capture, SceneGraph node inspection, and BrightScript debug console access. The real power is runtime UI editing through Roku's RTA protocol. You can query the node tree, grab a uiElementId, and live-edit properties like text or color while a dev channel is running, then verify the change with roku_get_value. Supports both explicit IP configuration and SSDP discovery. Ships with detailed agent rules (AGENTS.md, Cursor .mdc, Claude Code CLAUDE.md) that teach the observe-act-wait-verify loop and the RTA uiElementId requirement, so agents learn to screenshot before acting and wait between keypresses. Runs via npx with stdio transport.
- tools
- 42
- auth
- Secret needed
- transport
- STDIO
- env vars
- 2
- last updated
- Mar 26, 2026
Tools
42 toolsPublic tool metadata for what this MCP can expose to an agent.
roku_deploySideload (deploy) a Roku app to the device. Stages in a temp folder (`stagingDir` overrides) so a project `bsconfig.json` can't make it wipe `rootDir`
Sideload (deploy) a Roku app to the device. Stages in a temp folder (`stagingDir` overrides) so a project `bsconfig.json` can't make it wipe `rootDir`
No parameter schema in public metadata yet.
roku_delete_dev_channelDelete the currently sideloaded developer channel
Delete the currently sideloaded developer channel
No parameter schema in public metadata yet.
roku_discoverScan the local network for Roku devices via SSDP
Scan the local network for Roku devices via SSDP
No parameter schema in public metadata yet.
roku_keypressSend a single key press (Home, Select, Up, Down, Left, Right, Back, etc.)
Send a single key press (Home, Select, Up, Down, Left, Right, Back, etc.)
No parameter schema in public metadata yet.
roku_keypress_sequenceSend multiple key presses in sequence with configurable delay
Send multiple key presses in sequence with configurable delay
No parameter schema in public metadata yet.
roku_type_textType a text string into the focused field (e.g. email, password, search)
Type a text string into the focused field (e.g. email, password, search)
No parameter schema in public metadata yet.
roku_launchLaunch or deep-link into a channel (`restart: true` exits it first)
Launch or deep-link into a channel (`restart: true` exits it first)
No parameter schema in public metadata yet.
roku_query_device_infoGet device model, firmware, serial number, network info
Get device model, firmware, serial number, network info
No parameter schema in public metadata yet.
roku_query_active_appGet the currently running app
Get the currently running app
No parameter schema in public metadata yet.
roku_query_media_playerGet media player state (play/pause/buffer/stop), position, and duration
Get media player state (play/pause/buffer/stop), position, and duration
No parameter schema in public metadata yet.
roku_query_app_uiGet the current app UI tree as XML
Get the current app UI tree as XML
No parameter schema in public metadata yet.
roku_query_sg_nodesQuery SceneGraph nodes (all, roots, or by node ID)
Query SceneGraph nodes (all, roots, or by node ID)
No parameter schema in public metadata yet.
roku_find_nodeSearch the UI tree for a node by ID or attribute (subtype, text, etc.)
Search the UI tree for a node by ID or attribute (subtype, text, etc.)
No parameter schema in public metadata yet.
roku_get_focused_nodeGet the currently focused node with all its properties
Get the currently focused node with all its properties
No parameter schema in public metadata yet.
roku_sleepWait for a specified duration (useful between navigation steps)
Wait for a specified duration (useful between navigation steps)
No parameter schema in public metadata yet.
roku_screenshotCapture a screenshot (returns base64 image and file path)
Capture a screenshot (returns base64 image and file path)
No parameter schema in public metadata yet.
roku_console_connectOpen a TCP connection to the BrightScript debug console (port 8085)
Open a TCP connection to the BrightScript debug console (port 8085)
No parameter schema in public metadata yet.
roku_console_readRead buffered console output and auto-disconnect
Read buffered console output and auto-disconnect
No parameter schema in public metadata yet.
roku_console_sendSend a command to the debug console and auto-disconnect
Send a command to the debug console and auto-disconnect
No parameter schema in public metadata yet.
roku_console_disconnectClose the console connection (safety net)
Close the console connection (safety net)
No parameter schema in public metadata yet.
roku_console_capture_startKeep port 8085 open and record the console to a file (skips the previous session's replay; default `./logs/<timestamp>-rokuDevice.log`)
Keep port 8085 open and record the console to a file (skips the previous session's replay; default `./logs/<timestamp>-rokuDevice.log`)
No parameter schema in public metadata yet.
roku_console_waitWait for a captured line matching a regex; optional `predicate: "jwtValid"`. Returns line number, timestamp and a redacted preview, never the raw console
Wait for a captured line matching a regex; optional `predicate: "jwtValid"`. Returns line number, timestamp and a redacted preview, never the raw console
No parameter schema in public metadata yet.
roku_console_capture_stopStop the capture and close the file
Stop the capture and close the file
No parameter schema in public metadata yet.
roku_console_capture_statusReport whether a capture is active, its file and size
Report whether a capture is active, its file and size
No parameter schema in public metadata yet.
roku_edit_nodeSet one or more fields on a node by id (visible, translation, text, color, opacity, etc.)
Set one or more fields on a node by id (visible, translation, text, color, opacity, etc.)
No parameter schema in public metadata yet.
roku_set_node_visibleShow or hide a node by id
Show or hide a node by id
No parameter schema in public metadata yet.
roku_move_nodeMove a node to `[x, y]`
Move a node to `[x, y]`
No parameter schema in public metadata yet.
roku_focus_nodeSet focus on a node by id (RTA `focusNode`)
Set focus on a node by id (RTA `focusNode`)
No parameter schema in public metadata yet.
roku_remove_nodeDetach a node from its parent at runtime (RTA `removeNode`)
Detach a node from its parent at runtime (RTA `removeNode`)
No parameter schema in public metadata yet.
roku_create_nodeCreate a new node and append it to a parent by id (RTA `createChild`)
Create a new node and append it to a parent by id (RTA `createChild`)
No parameter schema in public metadata yet.
roku_get_valueRead a field value (or full `keyPath`) from the running scene (RTA `getValue`)
Read a field value (or full `keyPath`) from the running scene (RTA `getValue`)
No parameter schema in public metadata yet.
roku_observe_fieldWait for a field to change or match a value (RTA `onFieldChangeOnce`) — great for "wait until X" assertions
Wait for a field to change or match a value (RTA `onFieldChangeOnce`) — great for "wait until X" assertions
No parameter schema in public metadata yet.
analyze_bsprofAnalyze a .bsprof file — memory leaks, CPU hot paths, full report, or summary. Supports filtering by module/file and sorting options.
Analyze a .bsprof file — memory leaks, CPU hot paths, full report, or summary. Supports filtering by module/file and sorting options.
No parameter schema in public metadata yet.
compare_bsprofCompare two .bsprof profiles to detect regressions, improvements, new leaks, and resolved leaks.
Compare two .bsprof profiles to detect regressions, improvements, new leaks, and resolved leaks.
No parameter schema in public metadata yet.
bsprof_infoGet header metadata (target name, device, firmware, format version, features) without full parsing.
Get header metadata (target name, device, firmware, format version, features) without full parsing.
No parameter schema in public metadata yet.
roku_perfetto_enableEnable Perfetto tracing for a channel via ECP (tracing starts on next app launch)
Enable Perfetto tracing for a channel via ECP (tracing starts on next app launch)
No parameter schema in public metadata yet.
roku_perfetto_startStart recording a Perfetto trace via WebSocket binary stream
Start recording a Perfetto trace via WebSocket binary stream
No parameter schema in public metadata yet.
roku_perfetto_stopStop recording and return file path, size, and duration
Stop recording and return file path, size, and duration
No parameter schema in public metadata yet.
analyze_perfettoAnalyze a .trace file — summary, frame-drops, key-events, observers, rendezvous, set-fields, or threads. Returns AI-friendly structured JSON with suggestions.
Analyze a .trace file — summary, frame-drops, key-events, observers, rendezvous, set-fields, or threads. Returns AI-friendly structured JSON with suggestions.
No parameter schema in public metadata yet.
compare_perfettoCompare two .trace files to detect performance regressions and improvements
Compare two .trace files to detect performance regressions and improvements
No parameter schema in public metadata yet.
query_perfettoRun a raw PerfettoSQL query against a trace file for custom analysis
Run a raw PerfettoSQL query against a trace file for custom analysis
No parameter schema in public metadata yet.
roku_diagnose_streamCorrelate the Video-node `errorInfo`, the manifest (a fetchable `url` or pasted `content`), and an optional Charles/HAR capture into ranked Roku-specific root causes (cause, evidence, confidence, severity, fix, doc link). Optionally `captureLive=true` deploys the bundled Strea...
Correlate the Video-node `errorInfo`, the manifest (a fetchable `url` or pasted `content`), and an optional Charles/HAR capture into ranked Roku-specific root causes (cause, evidence, confidence, severity, fix, doc link). Optionally `captureLive=true` deploys the bundled Strea...
No parameter schema in public metadata yet.
Sponsors
Configuration
ROKU_DEVICE_HOSTIP address or hostname of the Roku device
ROKU_DEVICE_PASSWORDsecretDeveloper password for the Roku device
Readme
roku-mcp
A Model Context Protocol (MCP) server for Roku device automation. Exposes tools for app deployment, ECP remote control, screenshot capture, SceneGraph node inspection, and BrightScript debug console access.
Install
The server ships as a single npx command. Install once globally if you prefer, or let your MCP client launch it on demand via npx -y roku-mcp — both work.
npm install -g roku-mcp # optional, global install
# or just point your client at: npx -y roku-mcp
Plugin mode (Claude Code and Cursor)
Unofficial community tool. Not affiliated with or endorsed by Roku, Inc.
The repo also ships as a plugin: the MCP server, workflow skills (skills/), and Cursor rules, registered together.
- Claude Code:
/plugin marketplace add jack1590/RokuMCPthen/plugin install roku-mcp@roku-mcp-marketplace. Manifests:.claude-plugin/,.mcp.json. - Cursor: manifests in
.cursor-plugin/andmcp.json. Skills inskills/, rules inrules/cursor/.
Details
- Repository
- github.com/jack1590/rokumcp
- Category
- Automation & Workflows
- Package
roku-mcp- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active