Skip to main content
Glama
bblietz
by bblietz

brs-docs-mcp

MCP server for Roku BrightScript documentation plus device-control tools.

See CLAUDE.md for dev conventions and docs/superpowers/specs/2026-04-16-brs-docs-mcp-design.md for the design.

Tools

Documentation (SQLite FTS5)

  • brs_search(query, limit, kind?) full-text search across BrightScript docs.

  • brs_get(id) fetch a doc by id (e.g. component:roDateTime).

  • brs_list(kind, prefix?) list docs of a given kind, optional title prefix filter.

Read-only device introspection (ECP, port 8060)

  • roku_device_info(host?) parse /query/device-info.

  • roku_list_apps(host?) parse /query/apps.

  • roku_tail_log(host?, seconds=10) capture BrightScript debug console output for seconds.

  • roku_query_active_app(host?) parse /query/active-app.

  • roku_query_media_player(host?) parse /query/media-player to a flat snake_case dict.

  • roku_query_r2d2_bitrate(host?) parse /query/r2d2_bitrate into a list of stream entries.

  • roku_query_icon(app_id, host?) fetch the channel icon at /query/icon/<app_id>; returns mime, base64 body, byte count.

ECP control (port 8060, no auth)

  • roku_keypress(key, repeat=1, mode="press", host?) send /keypress, /keydown, or /keyup. Allowlisted standard keys (Home, Up, Down, ...) plus Lit_<char> for character input.

  • roku_keysequence(keys, delay_ms=150, host?) send a sequence of keypresses with delay_ms between each.

  • roku_launch(app_id, params?, host?) POST /launch/<app_id> with optional URL-encoded deep-link params. app_id="dev" is allowed.

  • roku_input(params, host?) POST /input?<urlencoded> to deep-link into the running channel.

  • roku_to_home(host?) macro that sends Home, Home to drop the device into a known idle state. NOT a reboot; the return value documents this.

Authenticated dev-portal (port 80, Digest)

  • roku_install(zip_base64, host?, password?) sideload a channel zip.

  • roku_remove(host?, password?) remove the currently installed dev channel.

  • roku_query_registry(dev_id, host?, password?) parse /query/registry/<dev_id>.

  • roku_profiler_snapshot(host?, password?) POST /plugin_inspect with mysubmit=Inspect; extract whatever blocks are present plus a 10 KB raw HTML excerpt.

  • roku_crashlog_pull(host?, password?) GET /plugin_factory_log. Returns ok=False on 404. Body is streamed and capped at 1 MB.

host falls back to BRS_DEFAULT_ROKU_HOST. password falls back to BRS_ROKU_DEV_PASSWORD.

Related MCP Connectors

Related MCP Servers