AI agents, real devices

MCP Server

Roku Dev Studio bundles a Model Context Protocol (MCP) server so Cursor, Claude Desktop, VS Code, and other MCP clients can drive a real Roku device from inside a chat — remote control, sideload, App Connector, Network Inspector, and BrightScript debugging, all as callable tools.

  • Local by design. Agent ↔ server over stdio, server ↔ app over loopback with a per-launch token — security notes.
  • One-toggle setup. Settings → MCP Server writes the entry into Cursor, Claude Desktop, VS Code, Windsurf, or ChatGPT Desktop for you — setup.
  • Humans stay in the loop. Direct ops run one action at a time; multi-step Action Scripts only land in the Builder for you to review and run — two surfaces.

How it connects

AI Agent
(Cursor, Claude Desktop, VS Code)
↔
MCP Server
(stdio, JSON-RPC)
↔
Roku Dev Studio
(loopback HTTP + token)
Two hops, not one: the agent's host spawns the MCP server as a local child process and talks to it over stdio. The MCP server then reaches the running Roku Dev Studio app over loopback HTTP (127.0.0.1) using a per-launch bearer token — never over the network, and never persisted beyond a single app session.

Roku Dev Studio must be running for any live tool to work. A handful of static/meta tools (list_action_types, get_action_schema, get_capability_bundle, validate_script) work even with the app closed. The first live call in a session should be probe_bridge, which returns a clear { live: false, reason } if the app isn't open yet.

Setup

Most users don't hand-edit any config. Open Settings → MCP Server in Roku Dev Studio — each row is a supported host (Cursor, Claude Desktop, VS Code, VS Code Insiders, VSCodium, ChatGPT Desktop, Windsurf). Toggling a row writes or removes only the roku-dev-studio entry in that client's own MCP config file; everything else in the file is left untouched. Hosts that aren't installed are disabled with an inline hint.

Settings → MCP Server panel, listing supported AI agent hosts

For a host not wired up by Settings, add this manually to that client's MCP config:

{
  "mcpServers": {
    "roku-dev-studio": {
      "command": "node",
      "args": ["/absolute/path/to/packages/roku-dev-studio-mcp/dist/index.cjs"]
    }
  }
}

Two surfaces, one picker rule

The server exposes two kinds of tools so an agent can pick the right one for the job instead of wrapping everything in a script:

Direct device ops

One-shot tools that do exactly one thing and return immediately — keypresses, queries, sideload, screenshots, App Connector calls, Network Inspector reads, debugger control, and more.

Action Scripts

validate_script + send_script_to_builder — a multi-step, conditional, or polling flow lands in the Action Scripts Builder for a human to review and run. Nothing executes automatically.

Rule of thumb: a single deterministic action is a direct op; a multi-step, conditional, polling, or save-for-later flow is an Action Script.

Tool catalog

Every op accepts an optional device (IP or serial) — omit it and the tool targets whichever device tab is focused in the app. For the full list with input/response schemas, see the MCP Tool reference generated from its package.

Resources: quick-start.md, action-script-contract.md, capability-bundle.json, authoring-rules.json.
Prompts: roku-one-shot-action, roku-action-script-quickstart, roku-debug-device.

Security & limitations

Full source, exact parameter schemas, and design notes live in the MCP package README. Also listed on Glama and MCP Market.