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 forseconds.roku_query_active_app(host?)parse/query/active-app.roku_query_media_player(host?)parse/query/media-playerto a flat snake_case dict.roku_query_r2d2_bitrate(host?)parse/query/r2d2_bitrateinto 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, ...) plusLit_<char>for character input.roku_keysequence(keys, delay_ms=150, host?)send a sequence of keypresses withdelay_msbetween 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 sendsHome, Hometo 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_inspectwithmysubmit=Inspect; extract whatever blocks are present plus a 10 KB raw HTML excerpt.roku_crashlog_pull(host?, password?)GET/plugin_factory_log. Returnsok=Falseon 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.