Skip to main content
Glama
dominick253

roku-debug-mcp

by dominick253

roku-debug-mcp

CI Python License MCP

MCP server giving AI agents the full VS Code Roku debug experience.

Exposes Roku's BrightScript debugging capabilities as MCP tools so AI agents can read logs, inspect the scene graph, step through code, read variables, and set breakpoints — the same info a developer sees in the VS Code Roku extension.

Architecture

graph TB
    subgraph "AI Agent (Hermes, VS Code, etc.)"
        MCP[<b>MCP Client</b><br/>stdio JSON-RPC]
    end

    subgraph "roku-debug-mcp (MCP Server)"
        Server[<b>MCP Server</b><br/>21 tools]
        Config[<b>Config</b><br/>ROKU_* env vars]
        Server --> Config
    end

    subgraph "Roku Device"
        direction LR

        subgraph "Port 80 — HTTP"
            Installer[<b>Sideloader</b><br/>Digest auth<br/>Expect: 100-continue]
        end

        subgraph "Port 8060 — ECP"
            ECP[<b>ECP Client</b><br/>Device info<br/>Scene graph<br/>Postback/keys]
        end

        subgraph "Port 8081 — Binary Debug"
            Debug[<b>Debug Client</b><br/>Binary protocol<br/>BSDBG magic]
        end

        subgraph "Port 8085 — Telnet"
            Console[<b>Text Console</b><br/>Fallback logs]
        end
    end

    MCP --> Server
    Server --> Installer
    Server --> ECP
    Server --> Debug
    Server --> Console

Protocol Layers

Port

Protocol

Auth

Purpose

80

HTTP

Digest + Expect: 100-continue

Channel sideloading

8060

ECP HTTP

None

Device info, scene graph, screenshots

8081

Binary

None

Primary debug protocol (VS Code uses this)

8085

Telnet

None

Text console (fallback)

Binary Debug Protocol (Port 8081)

sequenceDiagram
    participant C as Client (roku-debug-mcp)
    participant R as Roku Device (port 8081)

    C->>R: Handshake<br/>[magic(8)][protocol_version(4)]
    R-->>C: [magic(8)][protocol_version(4)][packet_len(4)][revision]

    Note over C,R: Request/Response Format:<br/>[packet_length(4)][request_id(4)][cmd_code(4)][payload]

    C->>R: GET_THREADS (cmd=3)
    R-->>C: THREADS response

    C->>R: STACKTRACE (cmd=4, thread_index)
    R-->>C: Stack frames

    C->>R: ADD_BREAKPOINTS (cmd=7)
    R-->>C: Confirmation

    Note over C,R: Update notifications (request_id=0):<br/>CONNECT_IO_PORT, ALL_THREADS_STOPPED, etc.

Handshake Magic: 0x0067756265647362 (b"bsdebug\0" little-endian)

Sideloading Flow (Port 80)

sequenceDiagram
    participant C as Client
    participant R as Roku (port 80)

    C->>R: POST /plugin_package (Expect: 100-continue)
    R-->>C: 401 Unauthorized (WWW-Authenticate: Digest)
    C->>C: Compute digest hash
    C->>R: POST /plugin_package (Authorization: Digest)
    R-->>C: 100 Continue
    C->>R: [ZIP payload]
    R-->>C: 200 OK [chunked response with Dev Kit HTML]

Related MCP server: MCP Debugger

What AI Can Do With This

  • Read device info — model, version, app currently running

  • Inspect scene graph — the full node hierarchy of the running app

  • Read console logs — stdout from the running BrightScript channel

  • List threads — see all execution threads and their stop states

  • Read stack traces — frame-by-frame call stack for any stopped thread

  • Inspect variables — locals, globals, and scene graph component state

  • Execute code — run arbitrary BrightScript in a stopped frame

  • Manage breakpoints — add, list, remove breakpoints by file/line

  • Step execution — step over, step into, step out, or continue

  • Sideload channels — upload and install test channels with remote debug

Quick Start

1. Install

cd /home/dom/src/roku-debug-mcp
pip install -e .

2. Configure Environment

export ROKU_DEVICE_IP=192.168.1.10      # Roku device IP
export ROKU_DEV_USER=rokudev            # Dev channel username
export ROKU_DEV_PASSWORD=your-password  # Dev channel password

3. Register in Hermes

Add to ~/.hermes/mcp-servers.json:

{
  "roku-debug-mcp": {
    "command": "roku-debug-mcp",
    "args": []
  }
}

4. Use in a Hermes Session

The AI agent will now have access to 21 new tools:

roku_device_info()
roku_scene_graph()
roku_debug_threads()
roku_debug_stacktrace(thread_index=0)
roku_debug_variables(thread_index=0, frame_index=0)
roku_debug_execute(thread_index=0, frame_index=0, code="x = 42")
roku_debug_breakpoints_add(breakpoints=[{...}])
roku_debug_console_output()

Available Tools

Device / UI Tools (ECP — port 8060)

Tool

Description

roku_device_info

Device model, version, etc.

roku_current_app

Currently running app

roku_scene_graph

Full scene graph node hierarchy

roku_postback

Send postback to channel

roku_launch_uri

Launch a URI

roku_key

Send remote control key

roku_screenshot

Capture screen image

Debug Tools (Binary Protocol — port 8081)

Tool

Description

roku_debug_threads

List all threads

roku_debug_stacktrace

Get stack frames

roku_debug_variables

Read variables in a frame

roku_debug_execute

Run BrightScript code

roku_debug_breakpoints_add

Add breakpoints

roku_debug_breakpoints_list

List active breakpoints

roku_debug_breakpoints_remove

Remove specific breakpoints

roku_debug_breakpoints_remove_all

Clear all breakpoints

roku_debug_continue

Resume execution

roku_debug_step

Step execution

roku_debug_stop

Pause execution

roku_debug_console_output

Get stdout lines

roku_debug_protocol_info

Debug protocol version

Installer Tools (HTTP — port 80)

Tool

Description

roku_install

Sideload a channel ZIP

roku_launch_remote_debug

Launch with remote debugging enabled

Testing

Unit Tests (Mock Roku Server)

# Run all tests (uses mock server on ephemeral ports)
pytest tests/ -v

# Mock server runs automatically via conftest fixtures
# No manual setup required

Integration Tests (Real Roku Device)

# Requires env vars set
ROKU_DEV_IP=10.71.71.151 \
ROKU_DEV_PASSWORD=your-password \
pytest tests/test_integration_real_device.py -v

CI/CD

  • Unit tests run on GitHub Actions Ubuntu runners

  • Integration tests run on self-hosted runner (10.71.71.90) with LAN access to real Roku

Project Structure

src/rokumcp/
  config.py          # Environment-based configuration
  protocol.py        # Binary protocol constants and Stream I/O
  debug_client.py    # Synchronous binary debug client (port 8081)
  text_console.py    # Telnet text console client (port 8085)
  ecp.py             # ECP HTTP client (port 8060)
  installer.py       # HTTP Digest-auth sideloader (port 80)
  server.py          # MCP server entrypoint — 21 tools

tests/
  conftest.py                  # Pytest fixtures (mock server setup)
  mock_roku_server.py          # Mock Roku device simulator
  test_protocol.py             # Stream round-trips, ProtocolVersion
  test_config.py               # Config defaults, from_env
  test_ecp.py                  # ECP HTTP client
  test_text_console.py         # Telnet console client
  test_installer.py            # Digest auth + multipart
  test_debug_client.py         # Full E2E vs mock binary server
  test_integration_real_device.py  # Real device (gated on env vars)
  fixtures/                    # Test channel ZIP fixtures

Protocol Reference

Implementation derived from Roku's official reference:

See AGENTS.md for the full protocol specification and wire formats.

Development

Debugging the Protocol

# Run mock server manually
python tests/mock_roku_server.py

# Test specific protocol interaction
ROKU_DEVICE_IP=127.0.0.1 ROKU_DEBUG_PORT=8081 python -m rokumcp.server

Building

pip install -e .
roku-debug-mcp  # runs MCP server over stdio

License

Apache-2.0

Available Tools

21 tools
roku_current_appA

Get the currently-running app's title, version, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations are absent, so the description carries the full burden. 'Get' implies a read-only operation, which is useful, but the description does not disclose any edge cases such as behavior when no app is running, potential errors, or performance characteristics. It is minimally transparent but lacks rich context.

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, clear sentence with no extraneous words. It is front-loaded with the verb and specifies the resource immediately, making it easy to scan and understand.

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 an output schema, this description is largely complete. It clearly states the tool's purpose and benefits from the output schema covering return values. The main gap is the lack of usage context relative to siblings, but that is already addressed under Usage Guidelines.

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 zero parameters, so the schema coverage is 100% vacuously. The description does not need to add parameter meaning, and the baseline for no-parameter tools is 4. No additional information is necessary.

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 uses a specific verb 'Get' with a clear resource: 'the currently-running app's title, version, etc.' This clearly states what the tool does. However, it does not explicitly differentiate from sibling tools like roku_device_info, so it falls short of a 5.

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?

There is no guidance on when to use this tool instead of alternatives. The description simply states the action without any context about conditions, exclusions, or comparing against sibling tools. This is a clear gap.

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

roku_debug_breakpoints_addC

Add breakpoints. Each breakpoint: {file_uri, line_num, ignore_count?}.

ParametersJSON Schema
NameRequiredDescriptionDefault
breakpointsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of explaining behavioral traits, but it only says 'Add breakpoints' and lists the input shape. It does not disclose whether existing breakpoints are replaced, whether duplicates are allowed, whether a debug session must be active, or what side effects the operation has.

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 short and front-loaded with the primary action, and every word contributes to understanding. It is concise but slightly under-structured because the breakpoint object is shown in a compact inline notation rather than a clearer field-by-field form.

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?

This is a simple one-parameter tool with an output schema available, so the description covers the core input shape adequately. Still, missing semantics around ignore_count and the lack of any behavioral or usage context make it only minimally complete for an agent operating in a large sibling-tool ecosystem.

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?

The schema's breakpoints items object is empty, so the description adds real value by specifying each breakpoint's fields: file_uri, line_num, and optional ignore_count. However, it stops short of defining types, the meaning of ignore_count, or any constraints, so the agent still has to infer important details.

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 action ('Add breakpoints') and augments it with the expected per-breakpoint shape, so the tool's purpose is unmistakable. It does not explicitly differentiate from siblings like remove or list, but the verb 'add' is specific enough to avoid most confusion.

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 given about when to use this tool versus the many breakpoint-related siblings such as roku_debug_breakpoints_remove or roku_debug_breakpoints_remove_all. The intended use is implied by the name, but there are no explicit conditions, prerequisites, or exclusions.

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

roku_debug_breakpoints_listA

List all current breakpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. 'List' reasonably implies a non-mutating read operation, but it doesn't explicitly state whether it requires a live debug session or how it behaves when no breakpoints exist. It adds minimal behavioral context beyond the operation itself.

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 sentence that fully captures the operation with no filler or repetition. It is appropriately sized for a zero-parameter listing tool.

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 that there are no parameters and an output schema is present, the description is largely complete for a simple list operation. It could add a note about requiring an active debugging session or point users to the add/remove variants for modifications, but nothing essential for correct invocation is missing.

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 takes zero parameters, so there is nothing for the description to explain; the schema already covers this completely. A baseline of 4 is appropriate for a no-parameter tool.

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 states a specific verb ('List') and resource ('all current breakpoints'), making the tool's function immediately clear. It doesn't explicitly contrast with sibling breakpoint tools, but the verb 'list' versus 'add'/'remove' in the sibling names differentiates it reasonably.

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?

There is no guidance on when to call this tool versus alternatives, such as when a user wants to inspect breakpoints rather than add or remove them. The sibling tool names imply usage, but the description gives no explicit when-to-use or when-not-to-use information.

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

roku_debug_breakpoints_removeA

Remove breakpoints by their remote IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
breakpoint_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It clearly states the destructive action (remove breakpoints), but it does not mention any requirements, side effects, or edge cases such as whether the debugger must be connected or what happens when an invalid ID is provided. This is similar to other mutation tools that lack annotation context.

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 that states the action and the key parameter constraint without any filler words. Every word earns its place.

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?

For a tool with one parameter and an output schema, the description is minimally adequate. It identifies what to pass and the operation to perform, but it omits usage context such as how to obtain the remote IDs, whether the action is reversible, or whether a debugging session must be active. The low complexity keeps this at a mid-range score rather than lower.

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?

The input schema has zero description coverage for the only parameter 'breakpoint_ids,' which is typed only as an array with no item type. The description adds meaning by indicating that the array contains 'remote IDs' for breakpoints, which is helpful. However, it still does not specify the ID format or provenance, leaving some ambiguity.

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 uses a specific verb 'Remove' with a clear resource 'breakpoints' and a qualifier 'by their remote IDs.' This distinguishes it from the sibling tools that add, list, or remove all breakpoints, so an agent can select it correctly.

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 phrase 'by their remote IDs' implies that the agent should use this tool when it has specific breakpoint IDs to remove, and that the list tool would be needed to obtain them. However, it does not explicitly mention alternatives or state when not to use this tool, leaving usage guidance implied rather than explicit.

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

roku_debug_breakpoints_remove_allB

Remove all breakpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behavioral consequences, but it only restates the action. It does not mention that removal is irreversible, that it affects breakpoints across the current debug session, or any side effects, leaving the agent to infer impact.

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 one short, grammatically complete sentence with no filler and no redundant detail. It is front-loaded and appropriately sized for a zero-argument operation.

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?

Given the tool's simplicity and the presence of an output schema, the one-line description covers the core invocation. However, it leaves out usage context and behavioral caveats, which are not compensated by annotations, so it is adequate but not 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 tool has zero parameters and schema description coverage is effectively 100%, so the schema leaves nothing undocumented. The word 'all' adds slight scope information, and for a no-parameter tool a 4 is the appropriate baseline.

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 states a clear verb and resource: remove all breakpoints. It is unambiguous and the word 'all' implies a distinction from the singular remove sibling, but it never explicitly differentiates itself from related breakpoint tools or defines the scope, so it stops short of a top score.

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?

There is no guidance about when to choose this tool over roku_debug_breakpoints_remove or roku_debug_breakpoints_list, and no mention of prerequisites such as an active debug session. The intended use is only implied by the action itself.

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

roku_debug_console_outputA

Get the last N lines of the running script's console output. This is what appears in VS Code's 'Roku Debug' output panel — log output, roArrayPrint, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
last_nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It usefully clarifies that the output matches VS Code's 'Roku Debug' panel and includes `log output`, `roArrayPrint`, etc. However, it does not disclose edge cases such as behavior when no script is running, limits on N, or whether this operation is strictly read-only.

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 the core function front-loaded. The second sentence adds valuable context about the output source and content without waste.

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-only retrieval tool with one parameter and an output schema, the description covers the essential semantics and source of the output. It is not missing critical information, though explicit 'when to use' guidance would round it out.

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 for the one parameter is 0%, but the description's 'last N lines' directly explains the meaning of `last_n` beyond the bare integer schema. The default value of 200 is already in the schema, so the description does not need to repeat it.

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 states a specific verb ('Get'), a resource ('the running script's console output'), and a scope ('last N lines'). It also distinguishes this from sibling debug tools by relating it to the 'Roku Debug' output panel, though it does not explicitly name an alternative.

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 intended use is implied: use this tool when you need the script's console output rather than breakpoints, threads, or variables. However, it does not explicitly state when to use this over alternatives or mention conditions like whether the script must be running.

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

roku_debug_continueA

Continue (resume) execution from a stopped state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states the core behavior (resume execution) and the precondition (stopped state), but does not disclose what happens if called while running, whether execution resumes asynchronously, or that the session may immediately re-stop at the next breakpoint.

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 front-loaded sentence with zero waste. It states the action, a synonym, and the required state without padding—appropriate size for a zero-parameter tool.

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?

An output schema exists to cover return values, and the empty input schema needs no parameter documentation. The description supplies the purpose and the precondition. The only gap is explicit guidance on when to prefer this over roku_debug_step or roku_debug_execute, given 21 debug siblings.

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 takes 0 parameters, so the schema is trivially complete and there is nothing for the description to add. The baseline 4 for zero-parameter tools applies.

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 uses a specific verb and resource: 'Continue (resume) execution from a stopped state.' It clearly conveys what the tool does—resuming a paused debug session. It differentiates from siblings like roku_debug_step only implicitly, without naming the alternatives.

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?

'From a stopped state' implies when the tool applies, but the description gives no explicit when/when-not guidance and names no alternatives among the sibling debug tools (step, stop, execute). An agent must infer that this is for resuming after a breakpoint stop.

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

roku_debug_executeA

Execute BrightScript code in the context of a stopped stack frame. This is the 'Run in Console' equivalent from VS Code. Use for reading m properties, querying node children, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
frame_indexNo
source_codeYes
thread_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does mention the prerequisite of a stopped stack frame, but it does not disclose whether execution can have side effects (e.g., modifying variables), whether it is read-only, or what happens if no stack frame is active. The 'Run in Console' analogy implies arbitrary code execution but does not warn about potential mutations.

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 only two sentences, front-loaded with the core action and context, followed by a useful analogy and concrete use cases. Every word earns its place with no fluff.

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 description covers the essential purpose and gives tangible use cases, and an output schema exists to explain return values. However, it does not address parameter semantics, side effects, or how to select the correct frame/thread, leaving gaps for a tool with three parameters and no annotations.

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?

The input schema has 0% description coverage, and the description adds no explicit parameter explanations. 'BrightScript code' indirectly refers to source_code, but frame_index and thread_index are left completely unexplained, leaving the agent to guess their roles and defaults.

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 ('Execute BrightScript code') and the specific context ('in the context of a stopped stack frame'). It also provides a familiar analogy (VS Code 'Run in Console') and distinguishes this from sibling debug tools like roku_debug_variables or roku_debug_step, which inspect or control execution rather than run arbitrary code.

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 gives explicit use cases ('Use for reading m properties, querying node children, etc.'), giving an agent a clear sense of when to invoke this tool. However, it does not explicitly mention when not to use it or name alternative sibling tools, stopping short of a full usage guidance.

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

roku_debug_protocol_infoA

Show the connected debugger's protocol version and supported features.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly indicates a read-only behavior via 'Show,' which is good, and it scopes the operation to the connected debugger. However, it does not disclose what happens when no debugger is connected, whether any side effects occur, or how errors are surfaced. For a simple informational tool this is acceptable but not rich.

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 sentence with no wasted words. It front-loads the action ('Show') and then specifies the exact subject matter ('connected debugger's protocol version and supported features').

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 informational tool with an output schema, the description is nearly complete. It names the debugger scope and the specific information returned. A small gap is the lack of an explicit precondition statement about requiring an active debugger connection, though 'connected debugger' partially implies this.

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 zero parameters, so there is no parameter documentation burden on the description. The description adds meaning by clarifying that the returned information covers protocol version and supported features, which is more than the empty schema alone conveys.

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 uses a specific verb ('Show') and resource ('connected debugger's protocol version and supported features'), making the tool's purpose immediately clear. It also distinguishes itself from sibling debug tools like roku_debug_threads or roku_device_info by focusing on protocol-level introspection rather than runtime state or device info.

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?

The description does not state when to use this tool versus its many debug-related siblings. There is no mention of alternatives, prerequisites, or a typical workflow position, such as 'call this before using debugger commands to verify protocol support.' The only implicit context is the phrase 'connected debugger,' but no actionable guidance is provided.

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

roku_debug_stacktraceB

Get the stack trace for a stopped thread. Returns frames from outermost (index 0) to current (last).

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully reveals the frame ordering (outermost to current), which is a non-obvious behavior. However, it does not disclose error handling (e.g., if no thread is stopped), dependencies on an active debug session, or what happens if thread_index is invalid. This is partial but not comprehensive transparency.

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 sentence that front-loads the action, includes the essential resource, and adds a valuable detail about frame ordering. Every word earns its place; there is no redundancy or unnecessary context.

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?

The tool has one parameter and an output schema, but the description is incomplete for correct invocation. The meaning of thread_index is entirely unexplained, and there is no connection to sibling tools like roku_debug_threads that could provide valid thread indices. While the output schema may cover return values, the missing parameter semantics and usage context make the definition inadequate for a debugger tool.

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

Parameters1/5

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

The input schema has 0% description coverage, so the description must compensate for the undocumented 'thread_index' parameter. Yet the description never mentions thread_index, its meaning, how to obtain valid indices, or how it relates to the 'stopped thread' context. For a single-parameter tool, this is a critical omission that leaves the agent guessing how to invoke it correctly.

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 a specific action ('Get the stack trace') on a specific resource ('for a stopped thread') and clarifies the return order (outermost to current). This clearly distinguishes it from sibling tools like roku_debug_threads or roku_debug_variables, which focus on different aspects of the debug session.

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 phrase 'for a stopped thread' implies usage when a thread is halted, but the description provides no explicit guidance on when to use this tool versus alternatives like roku_debug_threads or roku_debug_variables. No exclusions or alternative conditions are mentioned, leaving the agent to infer the appropriate context from the tool name and siblings.

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

roku_debug_stepC

Step execution: step='over'|'out'|'into'.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepNoover
thread_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, but it only lists step types. It does not disclose that stepping executes code, may require an active debugging session, or that it affects program state. The description is purely nominal and lacks behavioral context.

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 sentence that is direct and front-loaded. It conveys the core operation and parameter values without waste, making it easy to parse.

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?

The tool is a debugger step command, but the description lacks essential context: when it is valid to call (e.g., only while paused), the meaning of thread_index, and how stepping interacts with breakpoints or program state. With no annotations and minimal description, an agent would struggle to know how to use it correctly in a debugger workflow.

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?

The description adds meaning to the 'step' parameter by enumerating valid values ('over', 'out', 'into'), which is valuable since the schema has no per-parameter descriptions. However, 'thread_index' is not explained at all, and the format/effect of the step parameter is not elaborated beyond the enum-like list.

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 this is a 'step' operation in a debugger context, with allowed values ('over', 'out', 'into'). The verb 'step' is specific and distinguishes it from sibling debug tools like 'continue' or 'stop', though it does not explicitly mention the debuggee resource.

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 such as continue, stop, or breakpoint commands. There is no mention of prerequisites like being in a paused state, nor any exclusions or conditions that would select this tool over others.

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

roku_debug_stopB

Stop all threads.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing side effects, but it only states 'Stop all threads' without explaining consequences. It does not say whether the debug session terminates, if the app resumes, or if this action is destructive.

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 extremely concise at three words, with no fluff or redundant information. It is appropriately sized for a zero-parameter command, though it might be too terse to convey full context.

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?

With no annotations and only a three-word description, the tool's role in the debugging workflow is unclear. The agent has no information about when to invoke this versus the many sibling tools, making the description incomplete for its environment.

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 schema has zero parameters, so there is nothing to explain. The baseline for zero parameters is 4, and the description appropriately does not need to add parameter details.

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 'Stop all threads' uses a specific verb and direct object, leaving no ambiguity about the action. It is distinct from sibling tools like continue, step, or thread listing, even without explicitly naming them.

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 lacks any context about the debugging workflow, such as when to halt execution or what state it should be in, leaving the agent to infer from the name alone.

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

roku_debug_threadsA

List all debugger threads (stopped or running). Shows thread state, current function, file, line number.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does convey that this is a read-only listing operation and notes that both stopped and running threads are included, which is useful. However, it does not disclose whether an active debug session is required, what happens when no threads are available, or any session prerequisites.

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 with the core action front-loaded. Every sentence adds relevant information: what is listed, the thread states covered, and the output fields shown.

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 an output schema available, the description is largely complete: it states the scope and the displayed fields. It could be slightly stronger by mentioning that this operates within an active debugger session, but that is reasonably implied by the tool name and sibling context.

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 zero parameters, so the baseline is 4. The description correctly focuses on behavior and output rather than parameter details, and nothing is missing in terms of parameter semantics.

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 uses a specific verb ('List') and a clear resource ('all debugger threads'), with an explicit scope of stopped or running threads. It also states the returned information (thread state, current function, file, line number), making the tool's purpose unambiguous and distinct from sibling debugger tools.

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?

The description gives no guidance on when to use this tool versus alternatives like roku_debug_stacktrace or roku_debug_variables. It only states what the tool does, leaving the agent to infer when thread listing is appropriate.

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

roku_debug_variablesB

Get variables visible in a stack frame. Pass variable_path to drill into a container: e.g. ['m','player'] for m.player properties. Use get_child_keys=true to list a container's keys only.

ParametersJSON Schema
NameRequiredDescriptionDefault
frame_indexNo
thread_indexNo
variable_pathNo
get_child_keysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates a non-mutating read operation ('Get variables') and explains drill-down and key-only listing behaviors. It does not mention side effects, prerequisites like a paused debugger, or error behavior when the frame or thread is invalid, leaving some transparency gaps.

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 with no filler. The primary purpose is front-loaded, and the second sentence efficiently packs the two optional usage modes into compact instructional phrasing. Every sentence earns its place.

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?

The tool has four parameters and no annotations, and while an output schema exists, the description fails to explain frame_index and thread_index. It also does not state whether a debugger must be connected or paused. An agent could call this tool with the wrong frame/thread interpretation or without understanding the required runtime context.

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 description coverage is 0%, so the description must compensate for all four parameters. It explains variable_path with a concrete example and get_child_keys with its purpose, but it completely omits frame_index and thread_index, which are central to selecting the stack frame. The explanation covers only half the parameters, leaving two important arguments undocumented.

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 opening sentence 'Get variables visible in a stack frame' states a specific verb and resource, making the core purpose clear. It does not explicitly differentiate from siblings like roku_debug_stacktrace or roku_debug_threads, but the resource 'variables in a stack frame' is distinct enough for an agent to form a correct initial expectation.

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 gives concrete usage instructions for variable_path ('drill into a container') and get_child_keys ('list a container's keys only'), which clarifies how to invoke the tool. However, it offers no guidance on when to choose this tool over sibling debug tools, nor does it state conditions such as requiring an active debug session. Usage context is implied rather than explicit.

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

roku_device_infoA

Get device info from the Roku ECP server (port 8060). Returns XML with device name, version, firmware, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a network read operation against port 8060 and states the XML return format, which strongly implies a read-only, non-mutating behavior. For a simple zero-parameter info query, this is adequate; more detail on failure modes or prerequisites would be nice but is not essential.

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 that is front-loaded with the action and includes only necessary details: the resource, the port, and the return format. There is no redundancy or filler.

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 parameterless, read-only tool with an output schema present, the description is complete enough for an agent to invoke it correctly. It names the server and port, and specifies the return content. No critical information appears to be missing.

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 zero parameters, so the schema trivially covers 100% of them. The baseline for parameterless tools is 4, and the description appropriately adds no unrelated parameter information.

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 uses a specific verb ('Get') and identifies a precise resource ('device info from the Roku ECP server'), plus the output format ('Returns XML with device name, version, firmware'). This makes it immediately distinct from sibling tools like roku_current_app or roku_key, which target different Roku aspects.

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 when to use the tool—whenever device information is needed from a Roku—and adds useful context like the port and return type. However, it does not explicitly state when not to use it or reference any alternative tools, leaving the agent to infer its place among the siblings.

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

roku_keyA

Send a remote key press to the device (Home, OK, Back, Up, Down, Left, Right, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
timesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It accurately conveys that this is a side-effecting send command and offers concrete examples, but it does not disclose deeper behavioral traits such as whether the device must be reachable, whether presses can fail silently, or how repeated presses are handled. There is 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 focused sentence with no filler, and the core action is front-loaded. The key examples are compact and useful, so every word earns its place.

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?

For a two-parameter, low-complexity tool with an output schema, this is nearly sufficient: the action and key examples cover the core calling scenario. However, it lacks an exhaustive key list, does not mention the times parameter, and gives no guidance about when not to use it, leaving minor but real gaps for the agent to infer.

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 0% schema coverage, the description partially compensates by giving valid values for the key parameter (Home, OK, Back, etc.), but it omits any semantics for the times parameter. The schema title and default make times inferable, yet the allowed key vocabulary is left open-ended via 'etc.'.

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 uses a specific verb-resource pair ('Send a remote key press to the device') and gives concrete key examples such as Home, OK, Back, etc. It is clearly distinct from siblings like roku_launch_uri and roku_current_app, so an agent can identify the intended operation without opening the schema.

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 clearly states when the tool applies: whenever a remote-control key press must be sent to the Roku device. It does not explicitly name alternative tools or when-not-to-use conditions, but no exclusions are necessary for this simple navigation command and the sibling set makes the distinction obvious.

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

roku_launch_uriC

Launch an app by its package ID or channel URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
pkg_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states the action but does not explain side effects on the current app, required permissions, possible failure modes, or what happens after launch.

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 with no filler. Every word adds useful information.

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?

For a two-parameter tool with no annotations, the description is too sparse to fully support correct invocation. The output schema exists, but the description still omits important behavioral, usage, and parameter context needed by an agent.

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 description coverage is 0%, so the description must compensate. It adds meaning to pkg_id by noting it can be a package ID or channel URI, but the 'params' field is completely unexplained, including its format or relationship to the URI.

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 action ('Launch') and the resource ('an app'), with the identifying method being a package ID or channel URI. This distinguishes it from most sibling tools, though it does not explicitly differentiate from roku_sideload_and_connect.

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 about when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. The intended use is only implied by the word 'Launch'.

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

roku_postbackC

Send a postback message to the running app via ECP deep link.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of disclosing behavior. It mentions that the target is the running app and that the mechanism is an ECP deep link, but it does not disclose side effects, error behavior, prerequisites, or what happens when no app is running. For a send/input operation, this is too opaque.

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 with no filler; every word contributes to stating the core action and mechanism. This is appropriately concise for a simple one-parameter tool.

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?

With no annotations and minimal parameter detail, the description is not complete enough for an agent to confidently decide when and how to invoke the tool. The existence of an output schema reduces the need to describe return values, but the missing usage context, behavioral caveats, and message-format guidance remain significant gaps.

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?

The schema describes only the type and title of the required 'message' parameter, with 0% schema description coverage. The description does not compensate by providing examples, accepted formats, allowed values, or constraints—it merely reuses the word 'message' without adding meaningful parameter semantics.

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 operation ('Send'), the object ('postback message'), and the target/mechanism ('to the running app via ECP deep link'), which helps distinguish it from siblings like roku_launch_uri or roku_key. However, 'postback message' is domain jargon and the description doesn't explain what a postback is, so it falls just short of a 5.

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 about when to use this tool versus the many sibling tools. The description does not mention alternatives, conditions, exclusions, or a decision rule, leaving the intended usage only implied by the name and action.

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

roku_scene_graphA

Get the live SceneGraph XML (roSceneGraph) from the running app. This is the same node structure a Roku dev sees in VS Code's SceneGraph inspector. Useful for understanding the UI hierarchy and node IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It communicates that the operation is read-only ('Get') and dependent on a 'running app,' but does not mention potential failure modes, performance implications, or whether a debug session is required. This is adequate but not rich.

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 with no wasted words. It front-loads the core action and resource, then adds a concrete use case and developer analogy. Every clause 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?

With zero parameters and an output schema present, the description does not need to detail return values or argument syntax. It sufficiently explains what the data represents and when it is useful. The only minor gap is the lack of explicit guidance about prerequisites or failure handling, which is not critical for this simple tool.

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 takes zero parameters, so the input schema is inherently complete. The description appropriately avoids inventing parameter details, and the absence of parameters means no additional semantic explanation is needed. This matches the baseline for parameterless 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?

The description clearly identifies the specific verb ('Get'), resource ('live SceneGraph XML (roSceneGraph)'), and target ('from the running app'), distinguishing it from other Roku tools. The comparison to VS Code's SceneGraph inspector further anchors what the tool returns, making its purpose unambiguous.

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 clear usage context by stating it is 'useful for understanding the UI hierarchy and node IDs,' which implies when an agent should invoke it. However, it does not explicitly mention alternatives or when not to use it, leaving some room for inference.

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

roku_screenshotA

Capture a screenshot from the running app (returns base64 PNG).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the transparency burden. It discloses the return behavior (base64 PNG) and implies a prerequisite (the app must be running). It does not explicitly state whether the operation is read-only or what happens if no app is running, but 'screenshot' strongly implies non-destructive behavior.

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, front-loaded sentence communicates the action, scope, and return format without any wasted words. Every clause 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 zero-parameter tool with an output schema present, the description covers the essential purpose and return format. It is slightly light on failure behavior or explicit side-effect guarantees, but the tool's simplicity and the 'running app' qualifier keep it sufficiently complete for an agent to use it correctly.

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 zero parameters, so the schema provides no meaningful information. The description does not need to explain parameters; the baseline of 4 applies because there is nothing for it to add. The parenthetical about the return format is more relevant than any parameter detail.

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 uses a specific verb ('Capture') and a clear resource ('screenshot from the running app'), and uniquely distinguishes this tool from all siblings—no other tool in the list captures screenshots. The parenthetical return format removes ambiguity about what the tool produces.

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 when to use the tool: whenever a visual screenshot of the currently running Roku app is needed. However, it does not explicitly state when not to use it or point to any alternative, though no direct screenshot alternative exists among siblings.

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

roku_sideload_and_connectA

Sideload a channel zip with remote-debug enabled and connect to the debug server on port 8081. Required before using debug tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
zip_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It discloses the enabling of remote-debug and the connection to port 8081, which is useful. However, it omits side effects, prerequisites (e.g., developer mode), and error behavior, leaving gaps for a mutation/setup tool.

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 sentence that front-loads the action ('Sideload a channel zip'), then provides the debug mode and port, and ends with the prerequisite statement. 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?

An output schema exists, so return values need not be described. However, the description lacks critical operational context: what 'connect' entails, whether developer mode is required, and what success/failure looks like. For a prerequisite step, an agent would benefit from more detail.

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?

The input schema has 0% description coverage and only one parameter (zip_path). The description mentions 'channel zip' but does not explicitly explain the parameter format (local path, URL), constraints, or mapping. It only indirectly hints at the parameter's purpose, so the description does not compensate for the schema gap.

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 a specific action ('Sideload a channel zip'), the mode ('with remote-debug enabled'), and the connection target ('debug server on port 8081'). It also distinguishes itself from sibling debug tools by labeling itself a prerequisite, so an agent knows exactly what this tool does and how it differs.

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 'Required before using debug tools,' giving clear when-to-use context. It does not mention when not to use it or name alternatives, but among the sibling tools it is the only setup step, so this is sufficient guidance.

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. 21 tool updatesv0.1.0
    • First observedroku_current_app
    • First observedroku_debug_breakpoints_add
    • First observedroku_debug_breakpoints_list
    • First observedroku_debug_breakpoints_remove
    • First observedroku_debug_breakpoints_remove_all
    • First observedroku_debug_console_output
    • First observedroku_debug_continue
    • First observedroku_debug_execute
    • First observedroku_debug_protocol_info
    • First observedroku_debug_stacktrace
    • First observedroku_debug_step
    • First observedroku_debug_stop
    • First observedroku_debug_threads
    • First observedroku_debug_variables
    • First observedroku_device_info
    • First observedroku_key
    • First observedroku_launch_uri
    • First observedroku_postback
    • First observedroku_scene_graph
    • First observedroku_screenshot
    • First observedroku_sideload_and_connect

TDQS

A3.5/5.0
Disambiguation4/5

Most tools are clearly separated by domain (device control, debugging, breakpoints), but there are several debugger control tools (continue, step, stop) and multiple breakpoint tools that could be confused if descriptions were skimmed. The overlap is mild and the descriptions are specific enough to disambiguate in most cases.

Naming Consistency4/5

The tool names consistently use a 'roku_' prefix followed by a category and action (e.g., roku_debug_breakpoints_add, roku_debug_variables, roku_key). There are some minor inconsistencies like roku_sideload_and_connect versus the more structured debugger tools, and roku_postback is less descriptive, but the overall pattern is predictable.

Tool Count4/5

21 tools is on the high end but each tool serves a distinct purpose in the Roku debugging workflow. The count is justified given the breadth: device info, app control, screenshot, postback, and a full debugger suite. It feels slightly heavy but well-scoped for the domain.

Completeness5/5

The tool surface covers the full Roku development/debugging lifecycle: device discovery, app launching, remote control, scene graph inspection, breakpoint management, execution control, stack/variable inspection, and console output. There are no obvious missing operations for the stated debugging purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    A
    maintenance
    Enables AI agents to perform step-through debugging of Python, JavaScript/Node.js, and Rust programs using the Debug Adapter Protocol, with support for breakpoints, variable inspection, and stack traces.
    21
    160
    MIT
  • 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
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to debug code inside VS Code by setting breakpoints, stepping through execution, inspecting variables, and evaluating expressions across multiple languages.
    491
    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/dominick253/roku-debug-mcp'

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