jack1590 avatar

Rokumcp

jack1590/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 tools

Public 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_HOST

IP address or hostname of the Roku device

ROKU_DEVICE_PASSWORDsecret

Developer 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/RokuMCP then /plugin install roku-mcp@roku-mcp-marketplace. Manifests: .claude-plugin/, .mcp.json.
  • Cursor: manifests in .cursor-plugin/ and mcp.json. Skills in skills/, rules in rules/cursor/.

View the full README on GitHub

Details

Repository
github.com/jack1590/rokumcp
Category
Automation & Workflows
Package
roku-mcp
Transport
STDIO
Auth
Required
Registry
MCP registry, active

Related Automation & Workflows MCP servers

View all
1jayquan-mccleary avatarZenLink MCPjayquan-mccleary/zenlink-mcpBrowser automation for MCP clients via Zen Browser. Parallel multi-tab, content extraction.0stars
2kinglions avatarUI Design to Codekinglions/ui-design-to-code-mcpDesign-to-code artifact pipeline for UI screenshots, Figma node data, and visual review.0stars
3kubit-ai avatarKubitkubit-ai/mcp-serverBring Kubit into your AI workflow — query your warehouse with natural language0stars
4markmircea avatarSelenix Mcp Servermarkmircea/selenix-mcp-serverMCP server that bridges local apps with Selenix for browser automation.0stars
5mepsopti avatarSprout MCPmepsopti/sprout-mcpModel-tiered content pipeline — cheap models seed, expensive models verify0stars
6noriget avatarAgentPingnoriget/agentpingLet your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.0stars