Cua Docs

MCP server

The cua serve-mcp stdio server, its permission grammar, and the tools each permission exposes.

cua serve-mcp starts a Model Context Protocol server on stdio that exposes sandbox management, computer control, and skills to an MCP client. It requires the mcp extra:

pip install --extra-index-url https://wheels.cua.ai/simple "cua-cli[mcp]"

Without it the command exits 1 with MCP support not installed. Run: pip install cua-cli[mcp].

Running it#

The server speaks MCP over stdin/stdout and logs to stderr, so it is started by the client rather than by you. Register it with Claude Code:

claude mcp add cua -- cua serve-mcp
OptionDefaultDescription
--permissionsCUA_MCP_PERMISSIONS, else every permissionComma-separated permissions.
--sandboxCUA_SANDBOXDefault sandbox name for the computer tools.
claude mcp add cua -- cua serve-mcp --permissions sandbox:readonly,computer:readonly --sandbox my-sandbox

The server reports its enabled permissions on startup, which is the quickest way to confirm a grant landed as intended:

2026-08-12 22:20:50,897 - cua-mcp - INFO - Enabled permissions: ['sandbox:list', 'sandbox:get']
2026-08-12 22:20:50,909 - cua-mcp - INFO - Starting CUA MCP server...

Permissions#

A permission is either a single group:action string or one of the shorthand groups below. Only tools covered by the granted permissions are registered, so an ungranted tool is not merely refused at call time — the client never sees it.

GroupExpands to
allEvery permission.
sandbox:allsandbox:list, create, delete, start, stop, restart, suspend, get, vnc
sandbox:readonlysandbox:list, sandbox:get
computer:allcomputer:screenshot, click, type, key, scroll, drag, hotkey, clipboard, file, shell, window
computer:readonlycomputer:screenshot
skills:allskills:list, read, record, delete
skills:readonlyskills:list, skills:read

An empty or unrecognized permission list grants everything. With no --permissions and no CUA_MCP_PERMISSIONS, the server logs No permissions specified, granting all permissions and registers all 47 tools. A misspelled permission is skipped with a WARNING: Unknown permission line — and if it was the only one you passed, the resulting empty set is treated as "unspecified" and again grants everything. Read the Enabled permissions: line on startup rather than assuming the flag was understood.

Tools#

The permission that registers each tool:

Sandbox#

PermissionTools
sandbox:listsandbox_list
sandbox:getsandbox_get
sandbox:createsandbox_create
sandbox:deletesandbox_delete
sandbox:startsandbox_start
sandbox:stopsandbox_stop
sandbox:restartsandbox_restart
sandbox:suspendsandbox_suspend
sandbox:vncsandbox_vnc

Computer#

PermissionTools
computer:screenshotcomputer_screenshot, computer_get_screen_size, computer_get_cursor_position, computer_get_accessibility_tree, computer_get_current_window
computer:clickcomputer_click, computer_double_click, computer_move_cursor, computer_mouse_down, computer_mouse_up
computer:typecomputer_type
computer:keycomputer_key, computer_key_down, computer_key_up
computer:hotkeycomputer_hotkey
computer:scrollcomputer_scroll
computer:dragcomputer_drag
computer:clipboardcomputer_clipboard_get, computer_clipboard_set
computer:filecomputer_file_read, computer_file_write, computer_file_list
computer:shellcomputer_shell
computer:windowcomputer_window_list, computer_window_open, computer_window_focus, computer_window_unfocus, computer_window_minimize, computer_window_maximize, computer_window_close, computer_window_resize, computer_window_move, computer_window_get_info, computer_launch

Skills#

PermissionTools
skills:listskills_list
skills:readskills_read
skills:recordskills_record
skills:deleteskills_delete

computer:readonly is not screenshot-only in practice: computer:screenshot also registers screen size, cursor position, the accessibility tree, and the current window. It reads the screen and never acts on it, but it reads more than a picture.

Choosing a grant#

computer:shell and computer:file give the client arbitrary command execution and filesystem access inside the target machine, and sandbox:delete destroys machines. Grant the narrowest set that lets the assistant do its job:

IntentGrant
Let an assistant look, not touchsandbox:readonly,computer:readonly
Drive a UI without a shellcomputer:screenshot,computer:click,computer:type,computer:key,computer:scroll
Full automation of one sandboxcomputer:all plus --sandbox <name>
Everythingall

Authentication comes from the same session as the rest of the CLI, so cua auth status must report a session before the sandbox tools can reach the cloud. See Authentication.