Skip to main content
Glama

๐ŸŽฎ Roku MCP Server

ํ•œ๊ตญ์–ด | English


ํ•œ๊ตญ์–ด

Roku ๊ธฐ๊ธฐ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์ธ์ฆ์„ ์œ„ํ•œ MCP (Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
AI ์—์ด์ „ํŠธ(Gemini, Claude, Copilot ๋“ฑ)๊ฐ€ Roku ๊ธฐ๊ธฐ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๐Ÿ“ฆ ์•ฑ ๋ฐฐํฌ โ€” ์‚ฌ์ด๋“œ๋กœ๋“œ ๋ฐฐํฌ ๋ฐ ์Šคํฌ๋ฆฐ์ƒท ์บก์ฒ˜

  • ๐Ÿ–ฅ๏ธ ํ•ด์ƒ๋„ ๊ฒ€์ฆ โ€” HD/FHD ํ˜ธํ™˜์„ฑ ์ž๋™ ํ™•์ธ

  • โŒจ๏ธ ๋ฆฌ๋ชจ์ปจ ์ œ์–ด โ€” ํ‚ค ์ž…๋ ฅ, ์‹œํ€€์Šค, ํ…์ŠคํŠธ ์ž…๋ ฅ

  • ๐Ÿ“ฑ ์•ฑ ๊ด€๋ฆฌ โ€” ์„ค์น˜๋œ ์•ฑ ์กฐํšŒ, ์‹คํ–‰, ๋”ฅ๋งํฌ ํ…Œ์ŠคํŠธ

  • ๐Ÿ“‹ ๋กœ๊ทธ ์ˆ˜์ง‘ โ€” BrightScript ์ฝ˜์†” ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ

  • ๐Ÿ” SceneGraph ๊ฒ€์‚ฌ โ€” ๋…ธ๋“œ ํŠธ๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ, ํฌ์ปค์Šค ์š”์†Œ

  • ๐ŸŽฅ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง โ€” ์žฌ์ƒ ์ƒํƒœ, ๋ฒ„ํผ๋ง, ๋Œ€์—ญํญ

  • ๐Ÿ›ก๏ธ ์ธ์ฆ ๊ฒ€์ฆ โ€” DRM, ์ ‘๊ทผ์„ฑ(Audio Guide/์ž๋ง‰), RAF ๊ด‘๊ณ 

  • ๐Ÿงช ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ โ€” ์—ฌ๋Ÿฌ ๋™์ž‘์„ ์‹œํ€€์Šค๋กœ ์ž๋™ ์‹คํ–‰

๐Ÿ“‹ ๋„๊ตฌ ๋ชฉ๋ก (25๊ฐœ)

์นดํ…Œ๊ณ ๋ฆฌ

๋„๊ตฌ

์„ค๋ช…

๋ฐฐํฌ

roku_deploy

์•ฑ ์‚ฌ์ด๋“œ๋กœ๋“œ ๋ฐฐํฌ

roku_screenshot

ํ™”๋ฉด ์บก์ฒ˜ (base64 ์ด๋ฏธ์ง€)

๋””์Šคํ”Œ๋ ˆ์ด

roku_device_info

๊ธฐ๊ธฐ ์ •๋ณด (๋ชจ๋ธ, ํ•ด์ƒ๋„, ํŽŒ์›จ์–ด)

roku_check_resolution

HD/FHD ํ•ด์ƒ๋„ ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ

์ž…๋ ฅ

roku_keypress

๋ฆฌ๋ชจ์ปจ ํ‚ค ์ž…๋ ฅ

roku_keypress_sequence

ํ‚ค ์‹œํ€€์Šค ์ „์†ก

roku_input

์ปค์Šคํ…€ ์ด๋ฒคํŠธ/๋”ฅ๋งํฌ ํŒŒ๋ผ๋ฏธํ„ฐ

์•ฑ ๊ด€๋ฆฌ

roku_apps

์„ค์น˜๋œ ์•ฑ ๋ชฉ๋ก

roku_active_app

ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์•ฑ

roku_launch

์•ฑ ์‹คํ–‰/์žฌ์‹œ์ž‘

roku_deep_link

๋”ฅ๋งํฌ ์ธ์ฆ ํ…Œ์ŠคํŠธ

roku_registry

์•ฑ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ

roku_app_state

์•ฑ ๋ผ์ดํ”„์‚ฌ์ดํด ์ถ”์ 

๋กœ๊ทธ

roku_log

BrightScript ์ฝ˜์†” ๋กœ๊ทธ

SceneGraph

roku_sg_nodes

SG ๋…ธ๋“œ ํŠธ๋ฆฌ ๊ฒ€์‚ฌ

roku_perf

CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰

roku_graphics_fps

๊ทธ๋ž˜ํ”ฝ FPS

roku_element

UI ์š”์†Œ ๊ฒ€์ƒ‰ (WebDriver)

roku_focused_element

ํฌ์ปค์Šค ์š”์†Œ ์กฐํšŒ

์ŠคํŠธ๋ฆฌ๋ฐ

roku_media_player

๋ฏธ๋””์–ด ์žฌ์ƒ ์ƒํƒœ

roku_server_check

์„œ๋ฒ„ ํ—ฌ์Šค์ฒดํฌ

์ธ์ฆ

roku_check_drm

DRM ์ฝ˜ํ…์ธ  ๋ณดํ˜ธ ์ƒํƒœ

roku_check_accessibility

์ ‘๊ทผ์„ฑ ์ค€์ˆ˜ ๊ฒ€์‚ฌ

roku_check_raf

RAF ๊ด‘๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ ๊ฒ€์ฆ

ํ…Œ์ŠคํŠธ

roku_run_test

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹คํ–‰

๐Ÿ› ๏ธ ์„ค์น˜

git clone https://github.com/maskelog/roku-mcp.git cd roku-mcp npm install npm run build

โš™๏ธ ์„ค์ •

.env.example์„ .env๋กœ ๋ณต์‚ฌํ•œ ํ›„ ์„ค์ •:

ROKU_DEV_HOST=192.168.0.100 # Roku ๊ธฐ๊ธฐ IP (์„ค์ • > ๋„คํŠธ์›Œํฌ > ์ •๋ณด) ROKU_DEV_PASSWORD=your_password # Developer Mode ๋น„๋ฐ€๋ฒˆํ˜ธ ROKU_PROJECT_ROOT= # ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ (๊ธฐ๋ณธ: ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ) ROKU_APP_SERVER_URL= # ์•ฑ ์„œ๋ฒ„ URL (์„ ํƒ)

โš ๏ธ Roku Developer Mode๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Œ MCP ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ

AI ์—์ด์ „ํŠธ์˜ MCP ์„ค์ •์— ์ถ”๊ฐ€:

{ "mcpServers": { "roku-dev": { "command": "node", "args": ["/path/to/roku-mcp/dist/index.js"], "env": { "ROKU_DEV_HOST": "192.168.0.100", "ROKU_DEV_PASSWORD": "your_password" } } } }

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์‹œ

AI ์—์ด์ „ํŠธ์—๊ฒŒ ์ž์—ฐ์–ด๋กœ ์š”์ฒญ:

  • "Roku ๊ธฐ๊ธฐ ์ •๋ณด ์•Œ๋ ค์ค˜" โ†’ roku_device_info

  • "์•ฑ ๋ฐฐํฌํ•˜๊ณ  ์Šคํฌ๋ฆฐ์ƒท ์ฐ์–ด์ค˜" โ†’ roku_deploy โ†’ roku_screenshot

  • "๊ด‘๊ณ  ์„ค์ • ์–ด๋–ค์ง€ ํ™•์ธํ•ด" โ†’ roku_check_raf

  • "HD/FHD ํ•ด์ƒ๋„ ํ˜ธํ™˜ ๋˜๋Š”์ง€ ๋ด์ค˜" โ†’ roku_check_resolution

  • "ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋Œ๋ ค์ค˜" โ†’ roku_run_test


English

MCP (Model Context Protocol) server for Roku device development, testing, and certification.
Enables AI agents (Gemini, Claude, Copilot, etc.) to directly control and test Roku devices.

โœจ Features

  • ๐Ÿ“ฆ App Deployment โ€” Sideload apps and capture screenshots

  • ๐Ÿ–ฅ๏ธ Resolution Verification โ€” Auto-check HD/FHD compatibility

  • โŒจ๏ธ Remote Control โ€” Key presses, sequences, text input

  • ๐Ÿ“ฑ App Management โ€” List apps, launch, deep link testing

  • ๐Ÿ“‹ Log Collection โ€” Real-time BrightScript console logs

  • ๐Ÿ” SceneGraph Inspection โ€” Node tree, memory, focused elements

  • ๐ŸŽฅ Streaming Monitoring โ€” Playback state, buffering, bandwidth

  • ๐Ÿ›ก๏ธ Certification Checks โ€” DRM, accessibility (Audio Guide/Captions), RAF ads

  • ๐Ÿงช Integration Testing โ€” Automated multi-step test sequences

๐Ÿ“‹ Tools (25)

Category

Tool

Description

Deploy

roku_deploy

Sideload app to device

roku_screenshot

Capture screen (base64 image)

Display

roku_device_info

Device info (model, resolution, firmware)

roku_check_resolution

Verify HD/FHD resolution support

Input

roku_keypress

Send remote key press

roku_keypress_sequence

Send key sequence

roku_input

Custom events / deep link params

App

roku_apps

List installed apps

roku_active_app

Currently running app

roku_launch

Launch / restart app

roku_deep_link

Test deep linking (certification req.)

roku_registry

Read app registry data

roku_app_state

Track app lifecycle

Logging

roku_log

BrightScript console logs

SceneGraph

roku_sg_nodes

Inspect SG node tree

roku_perf

CPU / memory usage

roku_graphics_fps

Graphics frame rate

roku_element

Find UI element (WebDriver)

roku_focused_element

Get focused element

Streaming

roku_media_player

Media playback state

roku_server_check

Server health check

Certification

roku_check_drm

DRM content protection status

roku_check_accessibility

Accessibility compliance

roku_check_raf

RAF ad framework verification

Testing

roku_run_test

Run integration test sequence

๐Ÿ› ๏ธ Installation

git clone https://github.com/maskelog/roku-mcp.git cd roku-mcp npm install npm run build

โš™๏ธ Configuration

Copy .env.example to .env and configure:

ROKU_DEV_HOST=192.168.0.100 # Roku device IP (Settings > Network > About) ROKU_DEV_PASSWORD=your_password # Developer Mode password ROKU_PROJECT_ROOT= # Project root (default: parent directory) ROKU_APP_SERVER_URL= # App server URL (optional)

โš ๏ธ Roku Developer Mode must be enabled on the target device.

๐Ÿ”Œ MCP Client Setup

Add to your AI agent's MCP configuration:

{ "mcpServers": { "roku-dev": { "command": "node", "args": ["/path/to/roku-mcp/dist/index.js"], "env": { "ROKU_DEV_HOST": "192.168.0.100", "ROKU_DEV_PASSWORD": "your_password" } } } }

๐Ÿ’ก Usage Examples

Ask your AI agent in natural language:

  • "Show me the Roku device info" โ†’ roku_device_info

  • "Deploy the app and take a screenshot" โ†’ roku_deploy โ†’ roku_screenshot

  • "Check if the ad framework is set up correctly" โ†’ roku_check_raf

  • "Verify HD/FHD resolution support" โ†’ roku_check_resolution

  • "Run a full integration test" โ†’ roku_run_test

๐Ÿ—๏ธ Architecture

roku-mcp/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ index.ts # MCP server entry (25 tools + 2 resources) โ”‚ โ”œโ”€โ”€ roku-client.ts # ECP + Dev Web Server client โ”‚ โ”œโ”€โ”€ log-client.ts # BrightScript console (Telnet :8085) โ”‚ โ”œโ”€โ”€ webdriver-client.ts # Roku WebDriver (port 9000) โ”‚ โ””โ”€โ”€ test-runner.ts # Integration test orchestrator โ”œโ”€โ”€ dist/ # Compiled output โ”œโ”€โ”€ package.json โ”œโ”€โ”€ tsconfig.json โ””โ”€โ”€ .env.example

๐Ÿ“ก Roku APIs Used

API

Port

Purpose

ECP (External Control Protocol)

8060

Device control, queries, key presses

Developer Web Server

80

App sideloading, screenshots

BrightScript Console

8085

Runtime logs, debugging

SceneGraph Debug

8080

SG-specific debugging

WebDriver

9000

UI element automation

๐Ÿ“ Self-Documenting

Every tool includes inline Roku API documentation in its description โ€” API endpoints, ports, parameters, expected responses, and links to official docs. AI agents can use the tools without consulting external documentation.


License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

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/maskelog/roku-mcp'

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