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

NameTypeRequiredValues
rootstringYes
configstringNo
hoststringNo
passwordstringNo
devicestringNo
debugbooleanNo
inspectbooleanNo
inspectPersistbooleanNo
dapDebugbooleanNo
launchParamsobjectNoadditionalProperties: true
noLaunchbooleanNodefault: false
dropConsolebooleanNo
dropDebuggerbooleanNo
lowerArrayDestructuringbooleanNo
releasebooleanNo
showCopiedFilesbooleanNo
disableTypeCheckingbooleanNo
perfettoPathsarray<string>No
perfettoExcludearray<"FunctionDeclaration" | "VariableDeclarator" | "FunctionExpression" | "ObjectMethod">No
perfettoFilterarray<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

NameTypeRequiredValuesDescription
perfettoExclude[]"FunctionDeclaration" | "VariableDeclarator" | "FunctionExpression" | "ObjectMethod"Noenum: "FunctionDeclaration", "VariableDeclarator", "FunctionExpression", "ObjectMethod"Not documented in the source.

perfettoFilter

Trace name substrings to include during Perfetto auto-instrumentation


Did this page help you?