Skip to main content
Glama
paramount-engineering

Roku Dev Studio MCP Server

Platform CI Version Electron License roku-dev-studio MCP server

Roku Developer Tools for macOS, Windows, and Linux — Remote Control, App Side-loading, ECP automation, RALE / App Connector, Network Inspector, Action Scripts, MCP server for AI agents (Cursor, Claude, VS Code), and a rds CLI. Supports both local network and internet-bridged devices.

A comprehensive cross-platform desktop application for controlling and developing on Roku devices over your local network or via remote server using the External Control Protocol (ECP).

Why Roku Dev Studio? (vs. official Roku tools)

Roku development is normally split across a pile of separate, single-purpose official tools — the Roku Remote Tool, the browser-based sideload installer, raw telnet, RALE, sca-cmd — that don't talk to each other. Roku Dev Studio doesn't replace Roku's own protocols (ECP, RALE, telnet, sca-cmd) — it wraps all of them in one GUI, one CLI (rds), and one MCP server:

Task

Without Roku Dev Studio

With Roku Dev Studio

Remote control

The official Roku Remote Tool, or raw ECP keypress calls via curl/Postman

One tab: full D-Pad, keyboard remote, and a floating mini-remote

Sideloading

The device's browser-based installer or a VS Code extension — one IP at a time

Sideload Relay — one push from your IDE installs, launches, and captures console on every targeted device

Debug console

telnet <ip> 8085 in a raw terminal or through an IDE — no search/filter/save either way

A structured console with search, filtering, and saved logs

BrightScript debugging

The socket debug protocol, usable mainly through a single IDE's extension

A standalone debugger: breakpoints, step execution, call stack, variables, watch

App inspection (RALE)

RALE alone only inspects SceneGraph nodes — no way to call into a channel or exchange data with it

App Connector — extends RALE with the ability to call your channel's own functions and pass data back and forth (GET/POST-style), unlocking automation that didn't exist before

Network traffic

A separately configured MITM proxy (Charles/mitmproxy/Fiddler) with manual device setup

Built-in local MITM proxy + optional hotspot packet capture

Static analysis

sca-cmd output cross-referenced by hand against Roku's cert docs

Runs sca-cmd for you, with cert-requirement links straight to Roku's docs

Remote locations / labs

Physical presence required — ECP only works on the local network

A bundled remote server bridges ECP over the internet

Repeatable testing

Hand-rolled scripts around ECP and RALE

Action Scripts — build a flow (keypresses, queries, conditionals, waits) from a GUI, or run it headless via rds

AI-agent access

Nothing official

A bundled MCP server lets Cursor, Claude Desktop, or VS Code drive a real device

This repository is an npm workspace monorepo. Run npm install and npm start from the repository root so workspaces link correctly. Installing runs a postinstall (npm run build:libs) that compiles the shared roku-dev-studio-platform and roku-dev-studio-api packages to their dist/ outputs, which the app and remote server import. Use npm run typecheck for a full TypeScript check across every workspace and npm test to run unit tests. CI runs these plus per-package build/syntax smoke checks on each push and pull request. Setup, scripts, and distributable builds are documented in INSTALLATION.md.

Related MCP server: brs-docs-mcp

Repository layout

Location

What it is

apps/roku-dev-studio/

Electron desktop app (main process, renderer, packaging). Dev and distributable builds: INSTALLATION.md.

packages/roku-dev-studio-api/

Shared Node library + rds CLI: discovery, ECP, screenshots, sideload, RALE, action-script runner, headless validator — package README.

packages/roku-dev-studio-mcp/

MCP server that lets AI agents (Cursor, Claude Desktop, VS Code) drive a Roku through this app — package README.

packages/roku-dev-studio-network-inspector/

Network Inspector engine: hotspot packet capture (DNS/SNI/HTTP) + local MITM proxy, transport-agnostic so it runs in both the desktop app and the remote server — package README.

packages/roku-dev-studio-remote-server/

HTTP/WebSocket relay to control Rokus over the internet — package README.

packages/roku-dev-studio-platform/

Shared host-platform helpers (OS identity, modifier keys, path-safe, node-only filesystem helpers) used by the app and other packages so platform logic lives in one place. Built to dist/ on npm installpackage README.

roku-components/

BrightScript-side artifacts: TrackerTask.xml (drop into your channel for App Connector / RALE) and the fiddle/ SceneGraph scaffold — components README.

Author: Hareendra Donapati

Glossary

Term

One-line meaning

ECP

External Control Protocol — Roku's HTTP API on port 8060 (KeyPress, Launch, Query, Deep-Link).

Telnet 8085 / 8080

The BrightScript debug console (8085) and dev system commands (8080) on a Developer-Mode Roku.

RALE

Roku Advanced Layout Editor — Roku's SceneGraph inspection protocol over a TCP socket (default port 49200), spoken by the TrackerTask component.

TrackerTask

The BrightScript component channel developers add to their app to make it reachable from RALE / App Connector — see roku-components/README.md.

App Connector

The Dev Studio tab that talks RALE: list / call your channel's GetExternalControlFunctions, plus built-ins (node lookup, registry editor, update node).

Network Inspector

The Dev Studio tab / engine that inspects a dev channel's HTTP(S) traffic through a local MITM proxy, with optional hotspot packet capture.

Sideload

Uploading and installing a .zip / .pkg dev channel onto a Developer-Mode Roku via its Dev Password.

Sideload Relay

RDS advertising itself as a Roku so one sideload from your IDE / browser fans out (install → launch → console) to many targeted devices.

Action Script

JSON-described automation that chains keypresses, queries, sideload, App Connector calls, screenshots, conditionals, waits, and variables. Built and run from the Action Scripts tab; also runnable headless via rds.

MCP server

Roku Dev Studio's Model Context Protocol server — lets Cursor / Claude Desktop / VS Code drive a real device through this app while it's open. Toggle clients in Settings → MCP Server.

Fiddle

The BrightScript scratch editor (Monaco + brighterscript lint) that wraps your snippet into a temporary channel and runs it on a selected device.

rds

The terminal CLI shipped by roku-dev-studio-api (rds discover, rds keypress, rds script run, rds rale repl, …).

Supported Platforms

Roku Dev Studio is available for:

Platform

Options

macOS

DMG installer, Portable ZIP archive

Windows

NSIS installer, Portable executable

Linux

DEB package, AppImage


Home

Home

Remote + Device Performance

App Connector (RALE)

Action Scripts Builder

Remote with Device Performance

App Connector

Action Scripts Builder

BrightScript Fiddle

MCP Server Settings

Dev App / Sideload

BrightScript Fiddle

Settings MCP Server

Dev App

More screenshots for every feature: FEATURES.md.

Features

See FEATURES.md for the full tour with screenshots. Quick index:

Remote Control (Floating Remote) · Device Performance · Device Discovery · App Launcher & Management · Device Queries · Dev App Management · Try Demo App · Sideload Relay · Console & Debugging · Console Monitor · BrightScript Debugger · App Connector (RALE) · Network Inspector · Network Session Viewer · Action Scripts · AI Agents (MCP Server) · BrightScript Fiddle · Log File Viewer · Static Channel Analysis · rds CLI · Remote Server Support · Settings · Language Switching · Crash Reporting · Developer Features

Remote Server Setup

Roku Dev Studio can control devices over the internet using a remote server bridge, so you can manage devices in Remote Locations without being on the same network as the desktop app. Run the relay (npm run remote-server from this repo, or npm install -g roku-dev-studio-remote-server), then add its URL via Add Remote Location in the device selector.

Full setup (running the server as a service, network/firewall configuration, the HTTP/WebSocket API, and Swagger docs) lives in the remote server package README.

Project structure

.
├── apps/
│   └── roku-dev-studio/                 # Electron desktop app (see INSTALLATION.md)
├── packages/
│   ├── roku-dev-studio-api/             # Shared API + `rds` CLI (npm: roku-dev-studio-api)
│   ├── roku-dev-studio-mcp/             # MCP server bundled into the desktop app
│   ├── roku-dev-studio-network-inspector/ # Network capture + MITM proxy engine
│   ├── roku-dev-studio-platform/        # Shared platform helpers (path-safe, OS identity)
│   └── roku-dev-studio-remote-server/   # HTTP/WS relay (npm: roku-dev-studio-remote-server)
├── roku-components/                     # TrackerTask + Fiddle SceneGraph assets
├── package.json                         # Workspace root (workspaces: apps/*, packages/*)
├── INSTALLATION.md
└── README.md

The Electron app’s own tree (TypeScript main.ts / preload.ts bundled to main.bundled.cjs / preload.bundled.cjs, renderer/, build assets) lives under apps/roku-dev-studio/.

Requirements

For Running the App:

  • Node.js 24.17+

  • npm (bundled with Node.js)

  • Roku device on local network (or remote server for remote access)

For Building:

  • All of the above

  • Platform-specific build tools:

    • macOS: Xcode Command Line Tools

    • Windows: Windows SDK (for NSIS installer)

    • Linux: Standard build tools (gcc, make, etc.)

See Installation for setup and build instructions.

License

This project is licensed under the MIT License.

Third-party components used in this software and their licences:

Library

Purpose

Licence

@tanstack/virtual-core

Virtualized list rendering (telnet console, large script results)

MIT

archiver

Building sideload .zip packages

MIT

brighterscript

BrightScript linting in the Fiddle editor

MIT

commander

rds CLI argument parsing

MIT

electron

Desktop app runtime

MIT

electron-builder

Packaging & installers

MIT

form-data

HTTP multipart uploads

MIT

modern-screenshot

DOM-to-image capture for chart cards / PDF export

MIT

monaco-editor

Code editor (Fiddle, action-script step editors)

MIT

pdf-lib

PDF generation

MIT

sharp

Image processing (icons/build)

Apache-2.0

solid-js

Reactive framework powering the new renderer

MIT

ws

WebSocket client

MIT

Their dependencies are used under the terms declared in package-lock.json and each package’s repository.

Available Tools

20 tools
delete_sideloadDelete Sideloaded ChannelA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.
passwordNoOmit if Roku Dev Studio has saved the Dev Password for this device (Remember on the device tab).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the tool's mutation nature is clear. The description adds context about the password being optional based on remembered credentials, which goes beyond annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first states the core action, and the second clarifies a parameter usage. Every word is necessary and the structure is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (2 optional parameters, no output schema), the description adequately conveys what the tool does and how to use it. The destructive nature is covered by annotations, and the password handling is explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the password optionality but does not add significant new meaning beyond what the schema already provides for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Remove the currently sideloaded Dev App from the device.' It uses a specific verb 'Remove' and identifies the exact resource. This distinguishes it from the sibling tool 'sideload' which likely uploads rather than deletes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context: removing a sideloaded app and clarifying when to omit the password ('when Dev Studio has remembered it'). However, it does not explicitly state when to use this tool versus alternatives or when not to use it, nor does it mention any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ecp_postECP POST (raw)A
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.
endpointYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, covering the side-effecting nature. The description repeats 'Side-effecting' but adds no additional behavioral context such as consequences of misuse or rate limits. Minimal added value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficiently crafted sentences: first states the core action with an example, second provides a cautionary note and alternative. No filler, front-loaded with the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters, no output schema, and informative annotations, the description covers the core function, safety warning, and alternative usage. Some detail about endpoint validation or response behavior is missing, but overall sufficient for a straightforward POST tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% with only the 'device' parameter described. The description adds an example endpoint value ('/sgrendezvous/track') but does not clarify the format or constraints of the 'endpoint' parameter. Some help, but incomplete for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('POST to an arbitrary ECP endpoint') with a concrete example ('e.g., /sgrendezvous/track'), distinguishing it from other tools. It also mentions a safer alternative (list_post_presets), reinforcing its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use the tool ('agents should use list_post_presets for safe defaults'), providing clear guidance on appropriate use cases and a direct alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_action_schemaGet Action SchemaA
Read-onlyIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesExact step type key from list_action_types (e.g. appFunction, wait, keypress).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description does not need to repeat these. It adds clarity about the required argument but does not disclose additional behavioral traits beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The description is front-loaded with the core purpose and immediately specifies the required parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single enum parameter and no output schema, the description adequately covers purpose and parameter constraint. It is complete enough given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description restates the enum constraint already present in the schema. It adds no new meaning beyond what the schema provides, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the schema for one Action step type, using specific verb 'Return' and resource 'schema'. It distinguishes from sibling tools which are actual actions (e.g., keypress, launch_app) rather than schema queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies the required argument 'type' and that it must come from list_action_types (enumerated in inputSchema). It implicitly guides when to use (when you need a schema for a step type), but does not explicitly mention when not to use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_app_iconGet App IconA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYes
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds only the return format (data URL/base64), which is useful but does not disclose new behavioral traits beyond what annotations provide. It is consistent with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words. It is front-loaded and efficiently conveys the core action, resource, dimensions, and output format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with few parameters and no output schema. The description covers the basic purpose but omits context like what a 'channel' is or whether the icon is device-specific. It is minimally adequate but could benefit from clarifying the meaning of appId and the nature of the icon.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: only 'device' has a description. 'appId' lacks any schema description, and the description does not clarify its meaning or usage. The description hints at 'channel' but does not fully explain parameters, failing to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch', the resource '336x210 app icon' for a channel on a device, and the return format (data URL/base64). This unambiguously identifies the tool's function and distinguishes it from sibling tools like 'launch_app' or 'sideload'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching an app icon but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or exclusions. The tool's purpose is clear, but the description lacks when-to-use or when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_capability_bundleGet Capability BundleA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds value by recommending caching and noting an alternative resource URL, which are not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences. The first defines content, the second provides usage guidance. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description fully covers what the tool returns (listing all types), when to use it (before scripting), and additional context (caching, alternative resource).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so description does not need to add param details. The baseline score of 4 applies as there is nothing to improve.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a single payload of all static capabilities, listing specific types (actions, vocabularies, etc.). This distinguishes it from sibling tools like get_action_schema which return individual items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises loading once before authoring scripts and caching, providing clear usage context. It doesn't explicitly exclude use cases, but the guidance is sufficient for a data-fetching tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_selected_deviceGet Selected DeviceA
Read-onlyIdempotent

Device the user is currently focused on in Dev Studio.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, indicating safe, non-mutating, idempotent behavior. The description adds that it returns the 'currently focused' device, implying statefulness, which is useful context. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence of 10 words, directly states purpose with no extraneous information. Perfectly front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with no parameters and no output schema, the description is adequate but could optionally mention what the returned device information contains (e.g., device ID or name). However, given the tool's simplicity and the presence of annotations, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% coverage. The description adds meaning by clarifying that no input is needed, and that the tool returns the device the user is currently focused on. Since there are no parameters, baseline is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves the device the user is currently focused on in Dev Studio. The verb 'get' is implied, and 'selected device' is specifically defined as the current focus, distinguishing it from sibling tools that retrieve different types of information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, nor any conditions for when not to use it. Since it has no parameters, it's a straightforward read, but the description does not provide any context about when it is appropriate to call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

input_textSend Text InputB
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to send.
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description indicates a mutation (sending text), but the annotation 'readOnlyHint' is set to true, which contradicts the described behavior. The description does not address this inconsistency or provide any behavioral details beyond the contradictory implication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 14 words with no unnecessary information. It efficiently communicates the tool's core action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite good purpose clarity and conciseness, the description lacks usage guidance, does not resolve the annotation contradiction, and omits important behavioral context. For a tool with two parameters and no output schema, the description is incomplete for effective agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning the schema already describes both parameters adequately. The tool description does not add any additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Send' and the resource 'literal text string' to a specific target 'whatever input field is currently focused on the device', which unambiguously identifies the tool's function. It also references the ECP endpoint, adding context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for sending text input to a focused field, but it does not provide any guidance on when to use it versus alternatives like 'keypress' or when not to use it. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keypressSend Remote KeyA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesECP key name. See list_keypress_options for the full set.
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states it sends a remote key, which is a write/mutation action, but annotations declare readOnlyHint=true and idempotentHint=true, which contradicts the described behavior. The description does not correct or address this discrepancy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundant information. The first sentence clearly states the action, and the second provides a helpful analogy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters, no output schema, and exhaustive schema coverage, the description is complete. It explains what the tool does, gives examples, and provides an analogy for context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description provides examples for the 'key' parameter and references another tool for the full list, but this adds minimal value beyond the schema. For the 'device' parameter, the description repeats the schema's description exactly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Send' and the resource 'ECP remote key' to a Roku device, with concrete examples like 'Home', 'Up', 'Select', 'Play'. It also distinguishes itself from siblings (e.g., input_text, deep_link) by specifically targeting remote key presses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says it 'mirrors what the user does with the on-screen remote,' which implies its use case but does not explicitly state when to use it versus alternatives like input_text or deep_link. No exclusions or when-not conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_appLaunch Roku AppA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesChannel id (e.g. "837" for YouTube, "dev" for sideloaded).
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.
paramsNoOptional URL-encoded launch params.

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds only minor context ('dev' is sideloaded), not substantial behavioral disclosure beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loaded with main action. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but launch action likely has minimal return. Parameters are well-covered. Annotations rich. Sufficiently complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds meaning by explaining special appId values ('dev'), device format (IP or serial), and that params are URL-encoded, adding value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it launches a channel/app by app id. Provides specific verb and resource, and distinguishes from siblings like sideload (install) and keypress (remote).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells agents to use /query/apps or ecp_query to discover app ids. Does not specify when not to use, but usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_inspector_analyzeNetwork Inspector: AnalyzeA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoOptional case-insensitive substring matched against hostname, TLS SNI, or request URL.
typeNoOptional event type filter.
deviceNoOptional Roku IP or serial. Omit to include every Roku on the hotspot.
methodNoOptional HTTP method filter.
mitmOnlyNoOnly count decrypted-HTTPS transactions.
errorsOnlyNoOnly count HTTP transactions with a response status >= 400.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint. The description adds behavioral context that the tool aggregates the buffer into rollups, requires Network Inspector enabled, and returns summary counts. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph of three sentences with no fluff. It front-loads the main action and includes essential details like filter compatibility and prerequisites.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately explains the return values (counts by various categories) and notes the prerequisite (Network Inspector enabled). Although there is no output schema, this covers the main aspects needed for an agent to decide to use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description merely repeats that the tool accepts the same optional filters as a sibling tool. It does not add deeper semantic meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'aggregate' and the resource 'captured buffer into hotspots and rollups', listing specific outputs like counts by event type, HTTP status class, etc. It distinguishes itself from sibling tools like network_inspector_list_events by stating its purpose to 'orient on a session before drilling into individual events'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to orient on a session before drilling into individual events', providing clear context for when to use it. It also notes that it accepts the same filters as network_inspector_list_events, hinting at sibling differentiation. However, it does not explicitly state when not to use it or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_inspector_get_event_detailNetwork Inspector: Event DetailA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRequired. Event id from network_inspector_list_events.
maxBodyCharsNoPer-side body character cap when includeFullBody is not set (default 4096).
includeFullBodyNoReturn untruncated request/response bodies (can be large).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, openWorldHint, idempotentHint. The description adds behavioral details beyond annotations: body truncation cap (maxBodyChars default 4096), warnings on truncation, includeFullBody override, and no body events potentially returning 404. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no unnecessary words. Front-loaded with action and key details. Very efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters and no output schema, the description covers all critical aspects: what it retrieves, truncation behavior, edge cases, prerequisites. It is complete for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and description adds significant context: id is from list_events, maxBodyChars default 4096, includeFullBody overrides truncation behavior. Provides value beyond the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Fetch the full headers and body for one captured event by id' and specifies the resource (network event). It distinguishes itself from siblings by referencing 'network_inspector_list_events' as the source of the id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the prerequisite 'Requires Network Inspector enabled' and notes edge cases (DNS/TLS/TCP events may return 404). However, it does not explicitly state when to use this tool versus alternatives (e.g., list_events for listing) but implies the use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_inspector_statusNetwork Inspector: StatusA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare safe read-only behavior. Description adds useful context on metrics reported and the condition that reads are useless until ready is true, which is valuable beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence packs all essential info (purpose, fields, usage order). No superfluous text, but could be broken into two sentences for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description enumerates returned fields and remediation logic, providing sufficient completeness for an agent to understand what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline is 4. Description explains the return fields (enabled, capturing, etc.) compensating for lack of output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool reports Network Inspector status including specific fields like enabled, capturing, client count, etc. It distinguishes from sibling network_inspector_* tools by being the status check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call this first before other network_inspector_* tools and provides conditional guidance on using notice/remediation when ready is false.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_bridgeProbe Dev Studio BridgeA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds context about return format and session usage, but behavioral traits are mostly covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with clear structure; front-loads return format and essential usage instructions with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description fully explains return format and session flow. Complete for a probe tool given low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100%. Description adds no param info, but baseline is 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool returns bridge status and distinguishes it from sibling tools by noting that once live=true, other tools can be used freely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call once per session before first bridge-dependent tool and contrasts when to use direct ops vs re-probing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rale_commandRALE Command (full; read + write)A
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNo
deviceNoOptional target device (IP or serial).
commandYesRALE built-in command name.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds that every call surfaces a toast in Dev Studio, complementing the annotations (destructiveHint=true). It reinforces the destructive nature with examples.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, each adding critical information: the tool's purpose, a key alternative, and a side effect. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While it covers the main use case and destructive intent, it lacks details on return values or error handling. For a tool with no output schema and destructive potential, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 67%, the description adds little beyond restating command purpose. It does not elaborate on 'args' or 'device' parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it runs any built-in RALE command, including destructive ones, and points to list_rale_builtins for the catalog, distinguishing it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly advises using list_rale_builtins for the catalog and hints at destructive use, but does not fully specify when to use this tool over other sibling tools like get_action_schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rale_get_node_by_idRALE: Get Node by IDA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRequired. Node id string from the scene / registry.
pathNoOptional. Scene graph path segments; use [] or omit for root.
deviceNoOptional. IP or serial for a specific Dev Studio device tab.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds that the tool is 'Read-only' and mentions the default for path, but does not provide significant behavioral context beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two short sentences. It front-loads the key information (read-only, function name, required and optional parameters) without any extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with no output schema and good annotations, the description adequately covers purpose and parameters. It could mention the expected return format, but the name implies a node object is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, baseline is 3. The description adds the default value for the path parameter (default []), which is not explicit in the schema. This provides additional clarity beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool is a read-only operation via App Connector, with specific verb and resource ('getNodeById'). However, it does not explicitly differentiate from sibling tools like 'rale_command'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, constraints, or scenarios where this tool should or should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_script_to_builderSend Script to BuilderA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoOptional. Target Roku IP (e.g. 192.168.1.75) or serial. Must match an open Dev Studio device tab when provided.
scriptYesRequired. Same shape as for validate_script: object with `steps` array, or a JSON string that parses to that object.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond annotations: does not auto-run, runs same validation as validate_script. No contradiction with annotations. Annotations already provide idempotent and open world hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with core purpose, then usage guidelines. Two sentences plus a longer instruction, minimal waste. Could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 params, no output schema, and annotations, the description covers purpose, usage, and parameter shape. No output schema needed; completeness adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%. Description mentions script and device parameters briefly but adds no new semantic information beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states tool sends a validated Action Script to Dev Studio Builder for human review, distinguishes from siblings by mentioning direct ops as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (multi-step/conditional/saved-or-reviewed flows) and when not (single deterministic action), listing alternative direct ops.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sideloadSideload Channel PackageA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.
filePathNoAbsolute path to a .zip on the same machine that runs Roku Dev Studio. Mutually exclusive with `contentBase64`. Will fail with an actionable error if the path looks like an agent sandbox path (e.g. /mnt/user-data/...).
filenameNoSuggested filename for the temp file when using `contentBase64` (e.g. "my-app.zip"). Optional but recommended; if omitted, "agent-upload.zip" is used.
passwordNoDeveloper password. Omit if Roku Dev Studio has saved it for this device (Remember on the device tab).
contentBase64NoZip bytes encoded as base64. The server writes them to a temp file on the user's machine, sideloads, then deletes the temp file. Use this when running in a remote agent sandbox so file content travels through MCP rather than relying on a shared filesystem. Provide `filename` alongside.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint true), the description details that the tool replaces any currently sideloaded Dev App, explains temp file cleanup for contentBase64, and warns about sandbox path errors. This adds significant context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear main statement followed by method details. However, it is slightly verbose; some sentences could be tightened without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the process well, including cleanup and error behavior for wrong paths. However, it does not explain the return value or success/failure indicators, which would help the agent understand the response. Given the complexity and lack of output schema, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds meaningful inter-parameter relationships (mutual exclusivity of filePath and contentBase64) and operational context (temp file handling, sandbox path detection). This goes above the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool uploads and installs a .zip channel package, specifying the verb 'Upload and install' and the resource 'channel package'. It distinguishes from siblings by noting the destructive nature and providing two methods for different environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance for each parameter combination: filePath for local execution, contentBase64 for remote agent sandboxes. It also explains when password is optional, making usage conditions very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telnet_disconnectTelnet Console: DisconnectA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoOptional target device (IP or serial). Omit to use the focused tab.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds idempotency detail (returns { connected: false, already: true } when no session), which goes beyond annotations (idempotentHint). No contradictions with annotations (readOnlyHint, destructiveHint).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler. First sentence states purpose, second describes behavior, third gives usage. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (one optional parameter, no output schema), the description covers purpose, behavior, and usage completely. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter. Description adds value by explaining that omitting device uses the focused tab, which is helpful for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it closes the BrightScript debug console (TCP 8085) mimicking the Disconnect button. It is specific about the resource and action, distinguishing it from sibling tools like telnet_connect or other network tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it to release the 8085 socket for another tool to attach or to stop log accumulation. No explicit when-not-to-use, but context is clear enough for typical use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_connectionTest Device ConnectionA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device — IP (e.g. "192.168.1.154") or serial (e.g. "X00046N6S6F"). Omit to use the focused device.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by specifying the return content (reachability + basic device info) and the open-world condition. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with zero fluff. It is front-loaded with the core purpose and immediately provides the key condition. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple probe tool with rich annotations and a well-documented schema, the description covers purpose, return info, and a usage condition. It lacks mention of error cases or response structure, but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds extra semantics beyond the schema's parameter description: 'Omit to use the focused device.' This clarifies default behavior, which is useful for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Probe a device IP for ECP availability') and outcome ('Returns reachability + basic device info'). However, it does not explicitly distinguish itself from sibling tools like 'probe_bridge' or 'network_inspector_status', which may have overlapping purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a key usage condition ('Does not require the device to have a tab open'), but lacks guidance on when to avoid this tool or alternatives. The condition is helpful for context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 20 tool updatesv1.0.1
    • First observeddeep_link
    • First observeddelete_sideload
    • First observedecp_post
    • First observedget_action_schema
    • First observedget_app_icon
    • First observedget_capability_bundle
    • First observedget_selected_device
    • First observedinput_text
    • First observedkeypress
    • First observedlaunch_app
    • First observednetwork_inspector_analyze
    • First observednetwork_inspector_get_event_detail
    • First observednetwork_inspector_status
    • First observedprobe_bridge
    • First observedrale_command
    • First observedrale_get_node_by_id
    • First observedsend_script_to_builder
    • First observedsideload
    • First observedtelnet_disconnect
    • First observedtest_connection

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from sideloading and device control to network inspection and scripting. There is no overlap or ambiguity between tool functionalities.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern in snake_case (e.g., delete_sideload, get_action_schema, network_inspector_status). Minor deviations like 'keypress' and 'deep_link' are still clear and do not cause confusion.

Tool Count3/5

With 20 tools, the server is slightly over the ideal range of 3-15 for coherent tool sets. While the coverage is comprehensive, the number feels a bit heavy, though still manageable.

Completeness3/5

The tool set covers core workflows like sideloading, device control, and network inspection, but notable gaps exist: there is no ecp_query tool for GET requests (only ecp_post) and no tool to list all discovered devices (only get_selected_device). This may cause agent failures in certain scenarios.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to develop, test, and certify Roku applications by providing direct control over device functions like app deployment, remote input, and SceneGraph inspection. It supports automated workflows including real-time log collection, media monitoring, and certification verification.
    1
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Roku BrightScript documentation and device control, enabling doc search, device introspection, keypress/keysequence input, app launch, and sideloading.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to inspect and control Roku devices—query UI elements, send remote input, launch channels, and run tests—using the Model Context Protocol or a CLI.
    18
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that scaffolds runnable Roku channels from a validated AppSpec, zips them, and optionally sideloads to a Roku device.
    5
    11
    MIT

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