Skip to main content
Glama
paramount-engineering

Roku Dev Studio MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_action_types

Return every supported Action Script step type (with label, description, required / optional fields). For the full authoring contract call get_capability_bundle once or read resource roku-dev-studio://action-script-contract.md.

get_action_schemaA

Return the schema for one Action step type. Required argument type — must be one of the values from list_action_types (also enumerated in inputSchema).

get_capability_bundleA

Single payload of every static capability (actions, vocabularies, RALE built-ins, presets, authoring rules, op directory, actionScriptAgentContract). Load once before authoring scripts, then cache. Same JSON is also available as resource roku-dev-studio://capability-bundle.json.

validate_script

Validate an Action Script before send_script_to_builder. Argument script: JSON object or JSON string. Response: ok, errors[] (path, code, message, expected?), stepCounts, humanSummary, referenceTools. ok=false is returned as isError. Contract: resource roku-dev-studio://action-script-contract.md. Only author a script for multi-step / conditional / polling / saved-or-reviewed flows — for a single action use the matching direct op (keypress, launch_app, rale_command, ecp_query, ecp_post, screenshot, …).

probe_bridgeA

Returns { live, port, pid, startedAt } or { live: false, reason }. Call once per session before the first bridge-dependent tool; once live=true, call direct ops (keypress, launch_app, ecp_query, rale_command, …) and send_script_to_builder freely without re-probing.

get_selected_deviceA

Device the user is currently focused on in Dev Studio.

list_devices

Every device Dev Studio knows about (connected, discovered, remembered, remote). Entries: ip, serial, modelName, friendlyDeviceName, softwareVersion, source, isConnected, isFocused.

connect_device

Open or focus a Dev Studio tab. Required device: Roku IP or serial. Idempotent if already connected.

list_app_connector_functions

Live functionName + parameter metadata from RALE getExternalControlFunctions. Each entry has name, params: [{ name, type }, …], and an optional description string when the channel includes one in its payload — surface that description verbatim to the user when explaining what a function does. Call before authoring appFunction steps so names and param keys/order match. Optional device (IP or serial).

rale_get_node_by_idA

Read-only getNodeById via App Connector. Required id. Optional path (array; default []), device.

send_script_to_builderA

Drop a validated Action Script into Dev Studio Builder for human review (does not auto-run). Runs the same validation as validate_script. Arguments: script (object or JSON string), optional device. Use only for multi-step / conditional / saved-or-reviewed flows — if the task is a single deterministic action (one keypress, one launch, one RALE command, one ECP query/POST, one screenshot), call the matching direct op (keypress, launch_app, rale_command, ecp_query, ecp_post, screenshot, …) directly instead of wrapping it in a one-step script.

network_inspector_statusA

Report whether Dev Studio's Network Inspector is enabled and actively capturing, plus connected Roku clients, packet/event counts, MITM (HTTPS decryption) state, and prerequisites[] remediation. Call this first before the other network_inspector_* tools — if ready is false, relay notice / remediation to the user (enable the feature, grant capture access, connect the Roku to the hotspot). Reads return nothing useful until ready is true.

network_inspector_list_events

List captured network events as lightweight summaries (no full headers/body — drill down with network_inspector_get_event_detail using an event id). Summary-first by design to protect context. All filters optional and AND-combined: device (IP or serial; omit for all Rokus on the hotspot), host (case-insensitive substring of hostname/SNI/URL), method (GET/POST/…), type (one of the network event types), errorsOnly (HTTP status >= 400), mitmOnly (decrypted-HTTPS transactions only), limit (default 200, max 2000). Returns most-recent events. Requires Network Inspector enabled (see network_inspector_status).

network_inspector_get_event_detailA

Fetch the full headers and body for one captured event by id (from network_inspector_list_events). Bodies are capped at maxBodyChars (default 4096) and the response lists warnings when truncated; pass includeFullBody: true to override. DNS/TLS/TCP events have no body and may return 404. Requires Network Inspector enabled.

network_inspector_analyzeA

Aggregate the captured buffer into hotspots and rollups in one call — counts by event type, by HTTP status class (2xx/3xx/4xx/5xx), top hosts (with error counts), top content types, total HTTP/MITM transactions, error count, and the largest responses. Use this to orient on a session before drilling into individual events. Accepts the same optional filters as network_inspector_list_events (device, host, method, type, errorsOnly, mitmOnly). Requires Network Inspector enabled.

network_inspector_get_ca_info

Return the Dev Studio MITM CA fingerprint, proxy host:port, and the BrightScript snippet needed to trust the proxy so HTTPS request/response bodies become visible to the Network Inspector. Use when network_inspector_list_events shows TLS handshakes but no decrypted HTTP bodies, to guide the user through enabling HTTPS decryption for their sideloaded dev channel.

keypressA

Send an ECP remote key (e.g. "Home", "Up", "Select", "Play") to a Roku device. Mirrors what the user does with the on-screen remote.

launch_appA

Launch a channel / app on the device by app id. Use /query/apps or ecp_query to discover ids. "dev" is the sideloaded Dev App.

input_textB

Send a literal text string to whatever input field is currently focused on the device (ECP /input endpoint).

deep_linkC

Launch an app with a deep link (contentId + mediaType). Equivalent to /launch/?contentId=...&mediaType=... in ECP.

ecp_query

Run a read-only ECP GET against a device. Use endpoints from list_query_presets or any /query/* path. Does not change device state.

ecp_postA

POST to an arbitrary ECP endpoint (e.g. /sgrendezvous/track). Side-effecting — agents should use list_post_presets for safe defaults.

test_connectionA

Probe a device IP for ECP availability. Returns reachability + basic device info. Does not require the device to have a tab open.

get_app_iconA

Fetch the 336x210 app icon for a channel on the device (data URL / base64).

sideloadA

Upload and install a .zip channel package on the device. Destructive: replaces any currently sideloaded Dev App. Provide the zip in ONE of two ways: (1) filePath — an absolute path to a .zip on the SAME machine that runs Roku Dev Studio. Do NOT use this when running in a remote agent sandbox (Claude.ai, ChatGPT web) where files only exist inside the agent's container — the path will not resolve on the user's machine. (2) contentBase64 + filename — the .zip bytes inline; this server writes them to a temp file on the user's machine, sideloads, and cleans up. Use this whenever the agent has file content but no shared filesystem with Roku Dev Studio. Password is optional when Dev Studio has remembered it for this device.

delete_sideloadA

Remove the currently sideloaded Dev App from the device. Password optional when Dev Studio has remembered it for this device.

screenshot

Capture a screenshot of the current device screen and return it inline as an MCP image content block (JPEG, base64). Hosts (Cursor, Claude Desktop, etc.) render this image to the user, so for any human-facing capture let returnImageBase64 default to true (or omit it). Set returnImageBase64: false ONLY for batch / metadata-only flows where no one will view the screenshot; in that case the response is just { success, filename, bytes } and the image will not appear in the chat. Password is optional when Dev Studio has remembered it for this device.

scan_devices

Run SSDP discovery (multicast) and optionally a subnet HTTP sweep. Does not connect devices — follow up with connect_device to open a tab.

rale_commandA

Run any built-in RALE command against the active App Connector session — including destructive ones (addRegistryField, removeRegistrySection, clearRegistry, …). Use list_rale_builtins for the catalog. Every call surfaces as a toast in Dev Studio.

app_connector_connect

Open a RALE / App Connector session against the device's running Dev App.

app_connector_disconnect

Close the RALE / App Connector session on the targeted device.

app_function

Invoke a single function on the sideloaded channel through the App Connector. Use this for any one-off function call exposed by the channel; only wrap it in an appFunction Action Script step when the call is part of a multi-step flow. The set of available functions is channel-specific — every sideloaded app exports its own. Always call list_app_connector_functions first to discover the exact name and the declared parameter list (params: [{ name, type }, …]) for the running channel before calling this tool. functionParams is a positional array with one entry per declared parameter, in declaration order. Each entry's value matches the declared type: String/Integer/Boolean/number types are primitives; roAssociativeArray is a JSON object (still wrapped in the outer array slot); roArray / roList is a JSON array (also wrapped). For a zero-arg function pass []. A named object ({ <paramName>: value }, keyed by names from list_app_connector_functions) is accepted for backward compatibility and rewritten to a positional array before the call is sent. Authors should still emit positional form: a typo in a key silently passes undefined for that slot. Auto-connects the App Connector session if needed; surfaces the call as a toast in Dev Studio.

get_telnet_log

Read lines from the BrightScript debug console (port 8085) buffer that Dev Studio holds in memory. Returns { lines, cursor, totalLines, connected }. Pass afterCursor (the cursor from a previous call) to get only new lines — use this for polling. maxLines caps the response (default 500, max 2000). Lines only accumulate while the console is connected: if connected is false call telnet_connect first, then re-run this tool. The Roku 8085 telnet socket only allows one client at a time — telnet_connect will close any existing telnet session held by another tool/IDE before attaching.

telnet_connect

Open the BrightScript debug console (TCP 8085) for the targeted device, exactly as if the user had clicked the Connect button on the Telnet Console tab. Idempotent: returns { connected: true, already: true } when already attached. Lines do not accumulate until this is called. After it returns successfully, poll the buffer with get_telnet_log({ afterCursor }). Roku's 8085 socket is single-client: connecting here will displace another tool (e.g. an IDE telnet session) that may currently hold it.

telnet_disconnectA

Close the BrightScript debug console (TCP 8085) for the targeted device, mirroring the Disconnect button. Idempotent: returns { connected: false, already: true } when no session is open. Use this to release the 8085 socket so another tool can attach, or to stop log accumulation.

Prompts

Interactive templates invoked by user choice

NameDescription
roku-one-shot-actionPrimes the agent to perform a single deterministic action (keypress, launch, ecp_query/post, rale_command, screenshot, …) via a direct op — **not** by authoring an Action Script.
roku-action-script-quickstartPrimes the agent to author an Action Script for multi-step / conditional / saved-or-reviewed flows (bridge probe → capability load → validate → send to Builder). For single actions, prefer `roku-one-shot-action`.
roku-debug-devicePrimes the agent to inspect a Roku using read-only tools (probe_bridge → list_devices → get_selected_device → ecp_query / rale_get_node_by_id).

Resources

Contextual data attached and managed by the client

NameDescription
quick-startOne-page primer: bridge probe, capability loading, device selection, and the validate → send workflow. Read first.
action-script-contractCanonical shape for validate_script / send_script_to_builder inputs (root, appFunction params, wait / if conditions).
capability-bundleEvery static catalog the agent needs in one JSON: actions, presets, vocabularies, RALE built-ins, authoring rules, op directory, and the agent contract.
authoring-rulesConstraints the agent must obey when generating Action Scripts (version, password handling, wait vs delay, …).

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/paramount-engineering/roku-dev-studio'

If you have feedback or need assistance with the MCP directory API, please join our Discord server