关于 RokuMCP
RokuMCP 是面向 Roku 设备自动化与应用开发的 MCP 服务,供 Agent 控制设备并检查运行状态。它涵盖应用部署、ECP 控制、截图、SceneGraph 检查和 BrightScript 调试。
主要功能
- 01部署或删除开发频道
- 02通过 ECP 按键和启动频道
- 03发现设备并查询设备与媒体状态
- 04截取画面并检查应用界面树
- 05访问 BrightScript 调试控制台
适用场景
- 01将开发中的频道部署到 Roku 设备
- 02自动执行遥控按键并检查画面变化
- 03检查应用界面节点以定位问题
- 04读取调试控制台输出
MCP 相关
RokuMCP 通过标准 MCP stdio 传输向客户端提供 Roku 设备控制、部署、截图、界面检查和调试工具。支持配置设备地址,也可通过 SSDP 在本地网络中发现设备。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
20收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| host | string | 否 | Roku 设备的 IP 地址或主机名 |
| files | array | 否 | 要包含的文件 Glob 模式。默认包括 rootDir 中的所有文件(**/*)。 |
| rootDir | string | 是 | 包含 manifest 文件的项目根目录的绝对路径 |
| password | string | 否 | Roku 设备的开发者密码 |
详细介绍
roku-mcp
一个用于 Roku 设备自动化的 Model Context Protocol(MCP)服务。提供用于应用部署、ECP 远程控制、屏幕截图、SceneGraph 节点检查以及 BrightScript 调试控制台访问的工具。
安装
该服务以单条 npx 命令的形式发布。你可以选择全局安装一次,也可以让 MCP 客户端按需通过 npx -y roku-mcp 启动,两种方式都可行。
npm install -g roku-mcp # optional, global install
# or just point your client at: npx -y roku-mcp
插件模式(Claude Code 和 Cursor)
非官方社区工具。与 Roku, Inc. 无关联,也未获得其认可。
此仓库也以插件形式发布:MCP 服务、工作流技能(skills/)和 Cursor 规则集中注册。
- Claude Code:
/plugin marketplace add jack1590/RokuMCP,然后执行/plugin install roku-mcp@roku-mcp-marketplace。清单:.claude-plugin/、.mcp.json。 - Cursor: 清单位于
.cursor-plugin/和mcp.json中。技能位于skills/,规则位于rules/cursor/。
启用插件时,Claude Code 会询问设备主机和开发者密码(密码会作为敏感信息存储)。两个客户端都使用入口文件 bootstrap.mjs。首次启动时,两个客户端都会运行 npm ci 和 npm run build(Node 18+)。在插件模式之外,仍可使用 ROKU_DEVICE_HOST / ROKU_DEVICE_PASSWORD 或项目的 .env 文件。
请在下方配置你的 AI 客户端。所有平台都使用相同的启动命令,只有配置文件和重新加载步骤不同。
Cursor — Agent 模式工具,可自动发现 MCP 服务
前提条件: Cursor 0.45+,并启用 Agent 模式。
安装: 在项目根目录中创建 .cursor/mcp.json(或创建全局配置文件 ~/.cursor/mcp.json):
{
"mcpServers": {
"roku": {
"command": "npx",
"args": ["-y", "roku-mcp"],
"env": {
"ROKU_DEVICE_HOST": "192.168.1.XXX",
"ROKU_DEVICE_PASSWORD": "your-password"
}
}
}
}
然后重新加载窗口(Cmd+Shift+P / Ctrl+Shift+P → Developer: Reload Window)。
验证: 打开 Cursor Settings → MCP,确认 roku 行显示绿色圆点。如果显示为已禁用,请点击开关。在新的 Agent 聊天中输入 list roku tools,你应该会看到 roku_deploy、roku_screenshot 等工具。
路由规则(推荐): 此仓库还提供 AGENTS.md。Cursor 会自动读取它,因此 Agent 无需你在每次会话中重复说明,就能了解标准的 观察 → 操作 → 等待 → 验证 循环,以及 RTA uiElementId 的注意事项。
故障排除: 如果服务仍显示为灰色/已禁用,请检查 View → Output → MCP Logs。最常见的原因是局域网中无法访问 ROKU_DEVICE_HOST。完全省略 env 代码块,即可回退到 SSDP 自动发现。
VS Code (GitHub Copilot) — Agent 模式,通过 .vscode/mcp.json 使用 MCP
前提条件: VS Code 1.99+,安装 GitHub Copilot 扩展,并拥有包含 Agent 模式的有效 Copilot 订阅。
安装: 在项目根目录中创建 .vscode/mcp.json:
{
"servers": {
"roku": {
"command": "npx",
"args": ["-y", "roku-mcp"],
"env": {
"ROKU_DEVICE_HOST": "192.168.1.XXX",
"ROKU_DEVICE_PASSWORD": "your-password"
}
}
}
}
重新加载窗口(Cmd+Shift+P / Ctrl+Shift+P → Developer: Reload Window)。
验证: 打开 Copilot Chat,将聊天模式下拉菜单切换到 Agent,然后询问“你有哪些 Roku 工具?”。你应该会看到完整的 roku_* 列表。MCP 面板(Cmd+Shift+P → MCP: List Servers)应显示 roku 为 Running。
故障排除: 如果服务无法启动,请先在常规终端中运行 npx -y roku-mcp --help,确认 Node 18+ 和 npx 正常运行,再由 VS Code 启动服务。
Claude Desktop — Anthropic 官方桌面应用
前提条件: Claude Desktop(从 claude.ai/download 获取最新版本),且 Node.js 18+ 已加入 PATH。
安装: 编辑 Claude Desktop 配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"roku": {
"command": "npx",
"args": ["-y", "roku-mcp"],
"env": {
"ROKU_DEVICE_HOST": "192.168.1.XXX",
"ROKU_DEVICE_PASSWORD": "your-password"
}
}
}
}
完全退出并重启 Claude Desktop(必须关闭菜单栏图标;macOS 上按 Cmd+Q)。
验证: 打开新聊天。输入栏中的 🛠️ 图标应列出 roku-mcp 及其所有工具。询问“截取一张 Roku 屏幕截图”,Claude 会请求批准使用 roku_screenshot,然后运行该工具。
Windsurf — Codeium 的智能体 IDE
**前置条件:**启用了 Cascade 的 Windsurf。
**安装:**在项目根目录中创建 .windsurf/mcp.json(或在全局路径 ~/.codeium/windsurf/mcp_config.json 中创建):
{
"mcpServers": {
"roku": {
"command": "npx",
"args": ["-y", "roku-mcp"],
"env": {
"ROKU_DEVICE_HOST": "192.168.1.XXX",
"ROKU_DEVICE_PASSWORD": "your-password"
}
}
}
}
重新加载窗口。在 Cascade 设置中刷新 MCP 服务列表。
**验证:**询问 Cascade“列出可用的 MCP 工具”——应该会显示 roku_* 条目。
**故障排查:**Windsurf 偶尔会缓存过期的服务。如果重新加载后修改仍未生效,请完全退出 Windsurf 并重新打开。
任何兼容 MCP 的客户端(Continue、Cline、Zed、Codex、Claude Code、OpenCode 等)
此服务使用标准 MCP stdio 传输。在任何可以声明以下配置的地方:
command: npx
args: ["-y", "roku-mcp"]
env: { ROKU_DEVICE_HOST: "...", ROKU_DEVICE_PASSWORD: "..." }
……都可以运行此服务。两个环境变量均为可选项:省略 ROKU_DEVICE_HOST 可在局域网中使用 SSDP 自动发现;也可以在每次工具调用时传入 host / password 以覆盖设置。
仓库根目录中的 AGENTS.md 会被 Claude Code、OpenCode、Codex CLI 以及遵循 AGENTS.md 约定的其他工具自动读取,因此这些 Agent 无需额外设置即可采用相同的使用指南。
Agent 规则
为了让 Agent 更好地运行(observe → act → wait → verify 循环、会导致 roku_edit_node 静默失效的 RTA uiElementId 陷阱,以及何时使用哪种工具),仓库提供了适用于各大 Agent 的即用型规则。规则正文相同,只有外层格式不同,以匹配各 Agent 的自动加载方式。
| Agent | 文件 | 安装路径 |
|---|---|---|
| Cursor | rules/cursor/roku-mcp.mdc | .cursor/rules/roku-mcp.mdc |
| Claude Code | rules/claude-code/CLAUDE.md | CLAUDE.md(仓库根目录) |
| Claude Desktop | rules/claude-desktop/roku-mcp.md | 设置 → 系统提示词 |
| Windsurf | rules/windsurf/roku-mcp.md | .windsurf/rules/roku-mcp.md |
| Codex CLI / OpenCode / Aider | AGENTS.md(仓库根目录) | AGENTS.md(仓库根目录) |
请参阅 rules/README.md,查看每个 Agent 对应的一行复制命令。
快速开始
配置好客户端后,以下三个提示词可开箱即用,并涵盖主要功能组。
1. 确认设备可连接
Use roku-mcp to query my Roku device info and tell me the model, firmware, and IP.
Agent 应调用 roku_query_device_info(如果未配置主机,也可能调用 roku_discover),并在一轮对话中回复。
2. 使用截图操作 UI
Press Home, wait 2 seconds, take a screenshot, then move Right twice and
screenshot again. Describe what changed between the two screenshots.
此操作会调用 roku_keypress、roku_sleep 和 roku_screenshot,执行标准的 observe → act → wait → verify 循环。
3. 实时编辑正在运行的频道(需要 RTA——请参阅运行时 UI 编辑)
On the currently running dev channel, find the label that shows the page
title, change its text to "Hello from MCP", verify the change with
roku_get_value, then change it back.
Agent 将调用 roku_query_app_ui 查找节点,获取 uiElementId,调用 roku_edit_node + roku_get_value,然后回滚——以此验证 RTA 端到端配置正常。
环境变量
| 变量 | 说明 |
|---|---|
ROKU_DEVICE_HOST | Roku 设备的 IP 地址或主机名 |
ROKU_DEVICE_PASSWORD | Roku 设备的开发者密码 |
也可以在每次工具调用时将这两个变量作为参数传入,以覆盖环境变量。
自动发现
如果未设置 ROKU_DEVICE_HOST 且未提供 host 参数,服务会使用 SSDP 自动发现本地网络中的 Roku 设备,并使用找到的第一个设备。也可以使用 roku_discover 工具列出所有可用设备。请注意,无法发现密码,仍需手动配置。
.env 文件支持
服务器会使用 dotenv 自动从当前工作目录加载 .env 文件。如果项目的 .env 已使用 ROKU_DEVICE_HOST 和 ROKU_DEVICE_PASSWORD,服务器会自动读取,无需额外配置——只需从 MCP 配置中省略 env 块:
ROKU_DEVICE_HOST=192.168.1.100
ROKU_DEVICE_PASSWORD=my-password
如果项目使用不同的变量名(例如 ROKU_IP、ROKU_DEV_PASSWORD),可以在 env 块中进行映射:
"env": {
"ROKU_DEVICE_HOST": "${ROKU_IP}",
"ROKU_DEVICE_PASSWORD": "${ROKU_DEV_PASSWORD}"
}
或者,只需将这两个预期变量添加到 .env 中,并保留现有变量。
可用工具
部署
| 工具 | 描述 |
|---|---|
roku_deploy | 将 Roku 应用侧载(部署)到设备。会在临时文件夹中暂存(可通过 stagingDir 覆盖),以防项目的 bsconfig.json 导致其清除 rootDir |
roku_delete_dev_channel | 删除当前侧载的开发者频道 |
设备发现
| 工具 | 描述 |
|---|---|
roku_discover | 通过 SSDP 扫描本地网络中的 Roku 设备 |
ECP(外部控制协议)
| 工具 | 描述 |
|---|---|
roku_keypress | 发送单次按键(Home、Select、Up、Down、Left、Right、Back 等) |
roku_keypress_sequence | 按顺序发送多个按键,并可配置间隔 |
roku_type_text | 在当前聚焦的字段中输入文本(例如电子邮件、密码、搜索内容) |
roku_launch | 启动频道或通过深层链接进入频道(restart: true 会先退出频道) |
roku_query_device_info | 获取设备型号、固件、序列号和网络信息 |
roku_query_active_app | 获取当前运行的应用 |
roku_query_media_player | 获取媒体播放器状态(播放/暂停/缓冲/停止)、位置和时长 |
roku_query_app_ui | 以 XML 格式获取当前应用的 UI 树 |
roku_query_sg_nodes | 查询 SceneGraph 节点(全部、根节点或按节点 ID 查询) |
roku_find_node | 按 ID 或属性(子类型、文本等)在 UI 树中搜索节点 |
roku_get_focused_node | 获取当前聚焦的节点及其所有属性 |
roku_sleep | 等待指定时长(适用于导航步骤之间) |
截图
| 工具 | 描述 |
|---|---|
roku_screenshot | 截取屏幕截图(返回 base64 图像和文件路径) |
调试控制台
| 工具 | 描述 |
|---|---|
roku_console_connect | 打开与 BrightScript 调试控制台的 TCP 连接(端口 8085) |
roku_console_read | 读取缓冲的控制台输出并自动断开连接 |
roku_console_send | 向调试控制台发送命令并自动断开连接 |
roku_console_disconnect | 关闭控制台连接(安全措施) |
roku_console_capture_start | 保持端口 8085 开启,并将控制台内容记录到文件(跳过上一个会话的回放;默认文件为 ./logs/<timestamp>-rokuDevice.log) |
roku_console_wait | 等待捕获到与正则表达式匹配的行;可选 predicate: "jwtValid"。返回行号、时间戳和已脱敏的预览,不会返回原始控制台内容 |
roku_console_capture_stop | 停止捕获并关闭文件 |
roku_console_capture_status | 报告捕获是否处于活动状态,以及文件路径和大小 |
运行时 UI 编辑
无需重新部署,即可编辑正在运行的侧载开发频道的 SceneGraph UI——使用的后端与 vscode-brightscript-language 扩展中的 SceneGraph Inspector 相同。这些工具通过 TCP 端口 9000,使用 roku-test-automation(RTA)协议与频道的设备端组件通信,因此更改会立即生效,且不会暂停调试器。
| 工具 | 描述 |
|---|---|
roku_edit_node | 按 ID 设置节点的一个或多个字段(visible、translation、text、color、opacity 等) |
roku_set_node_visible | 按 ID 显示或隐藏节点 |
roku_move_node | 将节点移动到 [x, y] |
roku_focus_node | 按 ID 将焦点设到节点上(RTA focusNode) |
roku_remove_node | 在运行时将节点从其父节点分离(RTA removeNode) |
roku_create_node | 创建新节点并将其追加到指定 ID 的父节点(RTA createChild) |
roku_get_value | 从正在运行的场景中读取字段值(或完整的 keyPath)(RTA getValue) |
roku_observe_field | 等待字段更改或匹配某个值(RTA onFieldChangeOnce)——非常适合用于“等待 X”断言 |
工作原理。 每个工具都会与正在运行的频道中的 RTA 设备端组件(端口 9000)建立一个短暂的 TCP 连接,发送带长度前缀的 JSON 请求(setValue / getValue / focusNode / ...),并解析带帧的 JSON 响应。更改会直接应用于 SceneGraph 线程,不会中断进入调试器。
节点寻址。 nodeId 接受以下任一种形式:
- 类似
RTA_1773的uiElementId(RTA 运行时,roku_query_sg_nodes/roku_query_app_ui的输出中会显示每个节点的此 ID)。这是最可靠的目标。 - 在频道源代码的节点上定义的真实 BrightScript
id属性。
所有符合 /^RTA_\d+$/ 的值都会以 RTA base: "elementId" 发送;否则会以 base: "scene" 发送。
必需:在频道中安装 RTA 设备端组件
只有在被测频道打包了 RTA 时,这些工具才能工作。你有两种选择:
选项 A — 让 roku-debug 在每次侧载时注入 RTA(推荐 VS Code 用户使用)。
-
在
launch.json中启用:"injectRdbOnDeviceComponent": true -
在
source/main.brs中,于screen.show()后立即添加标记注释:sub main() screen = createObject("roSGScreen") ' ... screen.show() ' vscode_rdb_on_device_component_entry ' ... end sub
选项 B — 自行打包 RTA 组件。 将 roku-test-automation 中的 device/components 文件夹复制到频道中,并在场景中实例化一次 RTA_OnDeviceComponent。
无论采用哪种方式,成功安装后,频道启动时都会在设备日志中看到以下内容:
[RTA][INFO] OnDeviceComponent init
如果运行时 UI 工具返回连接被拒绝错误,说明 RTA 不在正在运行的频道中——请采用上述两种安装选项之一,然后重新部署。
BrightScript 性能分析器
分析 Roku 设备生成的 .bsprof 文件。这些工具使用 bsprof-cli 解析二进制性能分析器格式,并返回结构化 JSON 报告。
| 工具 | 描述 |
|---|---|
analyze_bsprof | 分析 .bsprof 文件——内存泄漏、CPU 热点路径、完整报告或摘要。支持按模块/文件筛选和排序选项。 |
compare_bsprof | 比较两个 .bsprof 性能分析文件,以检测回归、改进、新增泄漏和已解决的泄漏。 |
bsprof_info | 获取标头元数据(目标名称、设备、固件、格式版本、功能),无需完整解析。 |
要生成 .bsprof 文件,请在 Roku 应用的 manifest 中启用性能分析器(bs_prof_enabled=true),运行应用,然后从 http://<device-ip>:8080 下载性能分析文件。
Perfetto 跟踪
记录、分析和比较 Roku 设备的 Perfetto 跟踪。需要 Roku OS 15.1+。这些工具使用 roku-perfetto 进行 ECP 控制、WebSocket 录制和 PerfettoSQL 分析。
| 工具 | 描述 |
|---|---|
roku_perfetto_enable | 通过 ECP 为频道启用 Perfetto 跟踪(跟踪会在下次启动应用时开始) |
roku_perfetto_start | 通过 WebSocket 二进制流开始录制 Perfetto 跟踪 |
roku_perfetto_stop | 停止录制并返回文件路径、大小和时长 |
analyze_perfetto | 分析 .trace 文件 — 摘要、帧丢失、关键事件、观察者、会合、字段设置或线程。返回包含建议、便于 AI 使用的结构化 JSON。 |
compare_perfetto | 比较两个 .trace 文件,以检测性能回退和改进 |
query_perfetto | 对跟踪文件运行原始 PerfettoSQL 查询,以进行自定义分析 |
工作流:启用跟踪 → 开始录制 → 与应用交互 → 停止录制 → 分析。.trace 文件也可以在 ui.perfetto.dev 中打开。
流诊断
找出为什么能在其他地方播放的 HLS/DASH 流在 Roku 上无法播放。
| 工具 | 描述 |
|---|---|
roku_diagnose_stream | 将 Video 节点的 errorInfo、清单(可获取的 url 或粘贴的 content)和可选的 Charles/HAR 捕获文件进行关联,按可能性排序给出 Roku 特定的根因(原因、证据、置信度、严重性、修复方法、文档链接)。可选的 captureLive=true 会部署随附的 StreamProbe 测试程序,先捕获设备错误。 |
它可检测 Roku 特有的常见问题,例如 fMP4/CMAF HLS 中复用的音频+视频(有画面但无声音)、超出硬件解码器能力的视频编解码器/级别(如 4K H.264 或 8K HEVC)、受令牌/403 限制的 CDN,以及 DRM 许可证拒绝。静态清单检查仅作为提示;提供真实设备的 errorInfo 后,诊断结果可获得高置信度佐证。
要求
- Node.js 18+
- 在同一网络上启用了 开发者模式 的 Roku 设备
- 如需截屏和部署,必须正在运行侧载的开发频道
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。