Full control of a remote machine via Remote Claws MCP: screenshots, mouse/keyboard, browser automation, run commands, read/write files on the remote host.
--- name: remote-claws description: "Full control of a remote machine via Remote Claws MCP: screenshots, mouse/keyboard, browser automation, run commands, read/write files on the remote host." homepage: https://github.com/wentbackward/remote-claws --- # Remote Claws — Remote Machine Control Provide permission-based access to a remote desktop machine via the remote-claws MCP server (https://github.com/wentbackward/remote-claws) allowing your agent to run in a sandbox. Four tools, each taking an `action` parameter: `remote_browser`, `remote_desktop`, `remote_exec`, `remote_files`. Read each tool's description for its action list — an unknown action returns the valid list. ## CRITICAL: Remote vs Local The `remote_*` tools act on the REMOTE machine. OpenClaw's built-in `browser`, `exec`, `read`/`write`/`edit` act on the LOCAL gateway machine. Never substitute one for the other. Take care not to confuse remote-claws with remote SSH commands. ## Strategy 1. **Screenshot first.** `remote_desktop(action="screenshot")` before clicking or typing; use the returned coordinates to target actions. Re-screenshot after actions — windows move, dialogs appear. 2. **Prefer remote_browser for web tasks.** CSS selectors are resolution-independent. Only fall back to `remote_desktop` for things the browser can't reach (native dialogs, file pickers). 3. **Prefer element names over coordinates.** `remote_desktop(action= "click_element", ...)` targets controls by name — survives window moves. 4. **Exec is async.** `remote_exec(action="run", ...)` returns a process_id; poll with `action="get_output"` (wait=true blocks), `action="send_input"` for stdin, `action="kill"` when done. 5. **Denied actions are final.** A "permission denied" result means server policy — do not retry unless the user requests it. ## Common actions - Desktop: screenshot, mouse_click, mouse_move, mouse_drag, scroll, type_text (ASCII only), press_key, find_window, focus_window, list_elements, click_element, get_element_text - Browser: navigate, click, fill (clears first, Unicode-safe), type (appends), press_key, get_text, get_html, eval_js, screenshot, wait_for, select_option, go_back, go_forward, tabs_list, tab_new, tab_close - Exec: run, get_output, send_input, kill, list - Files: read (base64, offset/limit for chunks), write (base64), list, delete, move, info ## Authentication & Security The remote-claws MCP server requires a bearer token, configured in `openclaw.json` when registering the server. Unauthenticated connections get 401. The server also supports IP allowlisting (`allowed_ips`), host header validation (`allowed_hosts`), and per-action permission policies (`permissions.json`). See the [setup guide](https://github.com/wentbackward/remote-claws/blob/master/remote-claws-openclaw-setup-guide.md) and [README](https://github.com/wentbackward/remote-claws#security). ## Important Notes - Screenshots are JPEG, max 1280x960. Coordinates are absolute pixels. If your main LLM supports images, openclaw media handling should just work. Otherwise use `remote_desktop(action="screenshot", save_to_disk=true)` and download the binary. - **Reading Remote Files**: `remote_files(action="read", ...)` returns base64 only up to a threshold. Bigger reads fail with `"inline read would return N bytes"` to avoid context token explosion. Re-issue the same read with `as_url=true` and use the returned URL to download — do NOT retry the plain read. Small chunks via offset/limit will work. - `type_text` is ASCII only. For Unicode, use browser `fill`, or clipboard: `remote_exec(action="run", command="powershell", args=["Set-Clipboard", ...])` then `remote_desktop(action="press_key", keys="ctrl+v")`. - The browser launches on first use and stays open across calls. Sessions persist (cookies, local storage).
don't have the plugin yet? install it then click "run inline in claude" again.
extracted decision logic from strategy into explicit if-else decision points, documented external mcp server connection and auth requirements as inputs, formalized the original procedure into 6 numbered steps with clear input/output, added edge cases for unicode, large files, timeouts, and permission errors, and spelled out success criteria in output contract and outcome signal sections.
Controls a remote machine over MCP/SSE. All 39 tools are provided by the remote-claws MCP server registered in openclaw.json.
use remote claws when you need to interact with a desktop machine remotely: take screenshots, click buttons, type text, run commands, automate a browser, or transfer files. if the user asks you to do something "on the remote machine" or "on Windows," these are your tools. deploy this skill when direct desktop control beats api calls or manual steps, especially for UI automation, visual verification, or complex multi-step workflows that require seeing the screen state between actions.
MCP Server Registration
openclaw.json with bearer token authenticationREMOTE_CLAWS_TOKEN (bearer token for 401 auth bypass)REMOTE_CLAWS_HOST (server endpoint, e.g. http://localhost:8000)Security Configuration (optional but recommended)
allowed_ips: ip allowlist if configured on server sideallowed_hosts: host header validation listpermissions.json: per-tool restrictions (some tools may be disabled by policy)Context from User
Network & Connection
Take a screenshot. call desktop_screenshot with no region params to capture the full screen. this is your ground truth. examine the returned JPEG to identify window positions, buttons, text fields, and current state.
identify the target. from the screenshot, locate the ui element or window where the action needs to happen. note its approximate coordinates, visible label, or window title.
choose your tool category:
browser_* tools with css selectors. they are resolution-independent and more reliable.desktop_* tools. prefer desktop_click_element with element names over desktop_mouse_click with coordinates.exec_* tools.file_* tools.execute the action. call the appropriate tool with coordinates, selectors, or element names from step 2. for text input, use desktop_type_text (ascii only) or browser_fill (unicode ok). for commands, use exec_run (async) or exec_get_output with wait=true (blocking).
re-screenshot and verify. after each action, call desktop_screenshot again. compare the new screenshot to the previous one. confirm the action took effect (button state changed, text appeared, dialog closed, process started). if the result is unexpected, troubleshoot and retry.
repeat. loop through steps 2-5 until the task is complete. take a final screenshot as evidence.
if user asks to interact with a web page and a browser is already open: use browser_* tools (css selectors, unicode support, resolution-independent). skip to step 4 with browser tools.
if user asks to interact with a web page but no browser is running: call browser_navigate to start one and load the url, then use browser_* tools.
if the task requires typing unicode or non-ascii characters: use browser_fill (if in a browser context) or clipboard workaround: exec_run "powershell Set-Clipboard -Value '<text>'" followed by desktop_press_key ctrl+v. do not use desktop_type_text for non-ascii.
if a command needs to run in the background (e.g. file downloads, long-running processes): use exec_run (returns immediately with process_id). do not wait. call exec_get_output with wait=true only if you need to block until completion.
if exec_get_output with wait=true times out or hangs: the remote process may be stuck. call exec_kill with the process_id to terminate it. then take a screenshot to assess the state.
if a file is very large (> 10 MB): use file_read with offset and limit params to stream in chunks rather than loading the entire file into memory. decode base64 per chunk on your end.
if the server returns 401 unauthorized: the bearer token is missing, expired, or invalid. check REMOTE_CLAWS_TOKEN env var and openclaw.json configuration. request a fresh token from the operator.
if the server returns 403 forbidden: permissions.json is restricting the tool. the operator has disabled it. fall back to manual steps or request permission elevation.
if a screenshot or action times out (network latency > 30 seconds): the remote machine or network is degraded. wait a moment, retry, or escalate to the user that the remote session is unstable.
if desktop_click_element fails because the element name is ambiguous or not found: fall back to desktop_mouse_click with coordinates from the screenshot. or call desktop_list_elements to enumerate all available named elements in the target window.
For screenshots:
For text reads (browser_get_text, desktop_get_element_text):
For html reads (browser_get_html):
For command execution (exec_get_output):
wait=true, includes exit code (0 = success, non-zero = error).For file reads (file_read):
For file writes (file_write):
For element lists (desktop_list_elements, browser_wait_for):
For window finds (desktop_find_window):