MCP deploy_app
Description
Deploy a Roku application (non-watch) to a device. Streams progress via SSE and returns deployment start information.
Required parameters:
- root (string): ABSOLUTE filesystem path to the Roku app root directory.
A valid Roku app root contains package.json, src/, pkg/, and a Roku config file (default: roku-config.ts).
IMPORTANT: Before calling this tool, search the workspace to find the app's location. Common app locations:
- Example apps: /path/to/workspace/rsg-sdk/external/examples/[app-name]
- Workspace apps: /path/to/workspace/apps/[app-name]
Use file_search or semantic_search to locate the app directory, then pass its absolute path.
Optional parameters:
- config (string): Path to config file relative to root (default: roku-config.ts).
Use variant naming like roku-config-<variant>.ts when multiple app variants share one root. - host (string): Direct target host/IP (bypasses device store selection for target resolution).
- password (string): Device password override (applies to host mode and can override stored device password).
- device (string): target device id or IP address.
- debug (boolean): enable debug mode.
- inspect (boolean): enable inspector after deploy.
- inspectPersist (boolean): persist inspect mode on device so subsequent launches also wait for debugger.
- dapDebug (boolean): sideload with remotedebug fields so the device opens the BrightScript (DAP) debug protocol port (8081). Requires device protocol >=3.2 (checked via ECP before any build starts, so an unsupported device fails in milliseconds).
- launchParams (object): key-value parameters passed on app launch.
- noLaunch (boolean): sideload without auto-launching app.
- dropConsole (boolean): drop console.* calls in the build (maps to --drop-console).
- dropDebugger (boolean): drop debugger statements in the build (maps to --drop-debugger).
- lowerArrayDestructuring (boolean): rewrite
const [a, b] = createSignal()and similar Solid calls to indexed reads for smaller bytecode (maps to --lower-destructuring / --no-lower-destructuring). Omit to use the default: on for release builds, off for debug builds. - release (boolean): sideload a release-shaped build (minified, DEV false, console dropped). Mutually exclusive with debug, inspect and inspectPersist. Changes code shape only: it does not change the build type (deploy_app stays "development"), so build-type-keyed manifest entries keep development values.
- disableTypeChecking (boolean): Disable TypeScript semantic type checking before the deploy build (
rk dev). - perfettoPaths (string[]): Folder path prefixes for Perfetto auto-instrumentation during build.
- perfettoExclude (string[]): Babel visitor shapes to skip during Perfetto auto-instrumentation.
- perfettoFilter (string[]): Trace name substrings to include during Perfetto auto-instrumentation.
Result: errors holds failures only. warnings (omitted when empty) lists non-fatal notices, such as sideloading Hermes bytecode (.hbc), which devices without the rsg_typescript token refuse to launch, or a newer build sitting in another output directory. Warnings never change success.
Example: { "root": "/home/user/projects/button-row", "device": "192.168.1.25", }
See also
Parameters
additionalProperties: false
| Name | Type | Required | Values |
|---|---|---|---|
| root | string | Yes | |
| config | string | No | |
| host | string | No | |
| password | string | No | |
| device | string | No | |
| debug | boolean | No | |
| inspect | boolean | No | |
| inspectPersist | boolean | No | |
| dapDebug | boolean | No | |
| launchParams | object | No | additionalProperties: true |
| noLaunch | boolean | No | default: false |
| dropConsole | boolean | No | |
| dropDebugger | boolean | No | |
| lowerArrayDestructuring | boolean | No | |
| release | boolean | No | |
| showCopiedFiles | boolean | No | |
| disableTypeChecking | boolean | No | |
| perfettoPaths | array<string> | No | |
| perfettoExclude | array<"FunctionDeclaration" | "VariableDeclarator" | "FunctionExpression" | "ObjectMethod"> | No | |
| perfettoFilter | array<string> | No |
root
Absolute path to the Roku app root
config
Path to config file relative to root (default: roku-config.ts). Use --config flag; -c is not available (reserved for --console in rk dev)
host
Direct target host/IP (bypasses device store selection for target resolution)
password
Device password override (applies to host mode and can override stored device password)
device
Target device id, IP address, or rce:<name>
debug
Enable debug mode
inspect
Open inspector after deploy
inspectPersist
Persist inspect mode on device so subsequent launches also wait for debugger
dapDebug
Sideload with remotedebug fields to enable BrightScript (DAP) debugging on port 8081
launchParams
App launch parameters (key-value pairs)
noLaunch
Sideload without auto-launching app
dropConsole
Drop console.* calls in the build (--drop-console)
dropDebugger
Drop debugger statements in the build (--drop-debugger)
lowerArrayDestructuring
Lower array destructuring of Solid calls (createSignal etc.) to indexed reads (--lower-destructuring / --no-lower-destructuring). Default: on for release builds, off for debug builds
release
Sideload a release-shaped build (minified, DEV false, console dropped). Mutually exclusive with debug, inspect and inspectPersist. Changes code shape only: it does not change the build type (deploy_app stays "development"), so build-type-keyed manifest entries keep development values.
showCopiedFiles
Show individual file copy operations (verbose mode)
disableTypeChecking
Disable TypeScript semantic type checking before the deploy build (rk dev)
perfettoPaths
Folder path prefixes for Perfetto auto-instrumentation during build
perfettoExclude
Babel visitor shapes to skip during Perfetto auto-instrumentation
perfettoExclude fields
| Name | Type | Required | Values | Description |
|---|---|---|---|---|
| perfettoExclude[] | "FunctionDeclaration" | "VariableDeclarator" | "FunctionExpression" | "ObjectMethod" | No | enum: "FunctionDeclaration", "VariableDeclarator", "FunctionExpression", "ObjectMethod" | Not documented in the source. |
perfettoFilter
Trace name substrings to include during Perfetto auto-instrumentation
Updated about 3 hours ago