# ReMCP tool reference > Generated from the actual primary /mcp production tool catalog. ReMCP publishes **174 individually defined MCP tools**: 83 runtime operations and 11 account/fleet operations. Every tool has its own name, closed input schema, output schema and operation-specific annotations. No grouped dispatcher or optional widget-only tool is advertised on this production profile. For visible interaction, use Accessibility/UI Automation, browser DOM/CDP, OCR and coordinates in that fallback order. Verify state-changing operations using semantic reads and waits. Required parameters are marked with an asterisk. ## Account & fleet Each account query, pairing operation and device administration action is independently described and authorized. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `list_devices` | read-only | None | Use this when the target computer is not already unambiguous. Call it first to list computers paired to the signed-in ReMCP account and see which ones are online. | | `who_am_i` | read-only | None | Use this when the person asks which ReMCP account they are signed in as, how many machines are paired and online, or how many tool calls they have made lately. | | `create_pairing_command` | local state | None | Use this when the person wants to connect another computer to their ReMCP account, or asks how to add a device: returns platform-specific Windows/macOS/Linux commands, the pairing code, and when it expires. Windows uses the no-prerequisite PowerShell bootstrap; macOS/Linux use the npm launcher. The same commands are returned while the code is still valid. | | `get_recent_tool_calls` | read-only | `limit` (number), `device` (string), `tool` (string) | Use this when you need to recover recent ReMCP activity or answer what was just done. It returns the most recent tool calls with the computer they ran on, success state and duration. | | `get_usage_statistics` | read-only | `days` (number), `device` (string), `tool` (string) | Use this when the person asks for account-level historical ReMCP usage over days: call counts, success rate, average duration, and per-tool/per-device breakdowns. Use get_runtime_stats instead for counters from the current local runtime session on one machine. | | `get_configuration` | read-only | None | Use this when the person asks how the hosted ReMCP deployment/account is configured: server version and endpoint, runtime release installed on devices, retention/telemetry policy, hosted limits, and paired-computer versions. Use get_runtime_info for one computer's local runtime roots, policy and limits; use get_system_info for that computer's OS/CPU/memory/disk state. | | `ping_device` | read-only | `device*` (string) | Use this when you need to check that a paired computer answers right now and measure the round trip. The device agent answers the ping itself, so it works even while the local runtime is restarting or missing, and it reports hostname, platform, uptime and versions. | | `rename_device` | local state | `device*` (string), `config_key*` (string), `value*` (string) | Use this when the user wants to change the account-visible label of one paired computer. Do not use set_config_value for renaming: that device tool changes local runtime preferences instead. Access roots, command guardrails and resource limits stay on the computer itself. | | `enable_device` | local state | `device*` (string) | Use this when the user needs to enable an existing paired computer only when the user explicitly requests it. Changes that pairing to enabled; requires its device id. | | `disable_device` | changes state | `device*` (string) | Use this when the user needs to disable an existing paired computer only when the user explicitly requests it. Disconnects the pairing until re-enabled; requires its device id. | | `remove_device` | changes state | `device*` (string) | Use this when the user needs to permanently remove an existing paired computer only when the user explicitly requests that irreversible action. Revokes the pairing; requires its device id. | ## Files Read, find, edit, transfer and manage files using separately named operations. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `read_file` | read-only | `path*` (string), `offset` (number), `length` (number), `device*` (string) | Use this when the task calls for plain text files on a paired computer: source code, configuration, Markdown, logs, scripts, or other line-oriented text. Use read_document instead for PDF, DOCX, XLSX and other structured document content. read_file keeps legacy PDF/DOCX extraction for compatibility but should not be the model’s first choice for those formats. | | `read_files` | read-only | `path` (string), `pattern` (string), `max_files` (number), `max_lines_per_file` (number), `include_ignored` (boolean), `device*` (string) | Use this when the exact file list is not already known and the user wants the contents of every file matching one glob under a directory. Use start_search instead to find filenames or text matches without reading every matched file. If exact paths are already known, use read_multiple_files; for one known path use read_file. | | `read_multiple_files` | read-only | `paths*` (array), `device*` (string) | Use this when the user names two or more exact file paths to read in one call. Do not use it for glob discovery: use read_files instead. For one known path use read_file. | | `read_binary` | read-only | `path*` (string), `offset_bytes` (number), `length_bytes` (number), `device*` (string) | Use this when the user needs a non-text file transferred or inspected byte for byte as base64 chunks. For a normal image that should be shown or visually inspected, use read_image instead. | | `write_binary` | changes state | `path*` (string), `data*` (string), `mode` ("rewrite" \| "append"), `device*` (string) | Use this when the user needs base64 data written to a file on a paired computer byte for byte, including files too large for a single call. | | `hash_file` | read-only | `path*` (string), `algorithm` ("sha256" \| "sha1" \| "md5"), `device*` (string) | Use this when the user wants a checksum to verify a download, compare two files, or confirm a transfer. | | `list_directory` | read-only | `path*` (string), `depth` (number), `pattern` (string), `device*` (string) | Use this when the user wants to see what a directory on a paired computer contains, optionally filtered by a glob. | | `get_file_info` | read-only | `path*` (string), `device*` (string) | Use this when the user needs the size, type, permissions, or modification time of one file or directory before deciding what to do with it. | | `write_file` | changes state | `path*` (string), `content*` (string), `mode` ("rewrite" \| "append"), `device*` (string) | Use this when the user asks to create or replace the complete contents of exactly one text file. For a small exact-block edit use edit_block, for a known line range use replace_lines, and when you already have a unified diff use apply_patch. For two or more independent complete files use write_files; use write_binary for binary bytes. | | `write_files` | changes state | `files*` (array), `device*` (string) | Use this when the user asks to create or replace the complete contents of two or more independent text files in one batch. For one path use write_file; for partial edits use edit_block, replace_lines, replace_in_files, or apply_patch instead of rewriting whole files. | | `apply_patch` | changes state | `patch*` (string), `path` (string), `dry_run` (boolean), `device*` (string) | Use this when you already have a unified diff with one or more hunks and want to apply it to one or several files. Do not use write_file for the same patch-shaped change, and prefer edit_block when the change is one exact text block rather than a diff. | | `set_permissions` | changes state | `path*` (string), `mode*` (string), `recursive` (boolean), `uid` (number), `gid` (number), `device*` (string) | Use this when the user asks to change mode bits or ownership of a file or directory, for example to make a script executable. | | `edit_block` | changes state | `file_path*` (string), `old_string*` (string), `new_string*` (string), `expected_replacements` (number), `allow_fuzzy` (boolean), `dry_run` (boolean), `device*` (string) | Use this when one known text block in one file should be replaced, with a whitespace-tolerant fallback and optional dry-run diff. Use write_file only when replacing the whole file, and replace_lines when the intended target is a known line range rather than matching text. | | `replace_lines` | changes state | `path*` (string), `start_line*` (number), `end_line*` (number), `content*` (string), `dry_run` (boolean), `device*` (string) | Use this when the intended edit target is a specific 1-based line range in one file, optionally as a dry run. Use edit_block for matching an exact text block and write_file for replacing the complete file. | | `replace_in_files` | changes state | `path*` (string), `pattern*` (string), `replacement*` (string), `filePattern` (string), `regex` (boolean), `dry_run` (boolean), `maxFiles` (number), `device*` (string) | Use this when the same text or regular-expression replacement should be searched and applied across multiple files under a path, such as a rename or version bump. For one known block use edit_block; for one complete known file use write_file. | | `diff_files` | read-only | `left*` (string), `right*` (string), `context_lines` (number), `device*` (string) | Use this when the user wants to see how two text files differ, before or after a change. | | `move_to_trash` | changes state | `source*` (string), `device*` (string) | Use this when the user wants a file or directory removed but still recoverable from the system trash. | | `create_directory` | local state | `path` (string), `paths` (array), `device*` (string) | Use this when the user asks to create a directory, including any missing parent directories. | | `move_file` | changes state | `source*` (string), `destination*` (string), `overwrite` (boolean), `device*` (string) | Use this when the user asks to move or rename exactly one file or directory from one source to one destination. For two or more moves use move_paths. | | `copy_file` | changes state | `source*` (string), `destination*` (string), `overwrite` (boolean), `device*` (string) | Use this when the user asks to copy exactly one regular file to a new path on the same computer. For directories or two or more copies use copy_paths. | | `copy_paths` | changes state | `paths*` (array), `overwrite` (boolean), `device*` (string) | Use this when the user asks to copy a directory recursively or two or more paths in one request. For exactly one regular file use copy_file. | | `move_paths` | changes state | `paths*` (array), `overwrite` (boolean), `device*` (string) | Use this when the user asks to move or rename two or more files/directories in one batch. For one source/destination pair use move_file. | | `delete_path` | changes state | `path*` (string), `recursive` (boolean), `device*` (string) | Use this when the user explicitly asks to remove exactly one file or directory and does not need it recoverable. Use delete_paths for two or more targets, or move_to_trash when reversibility matters. | | `delete_paths` | changes state | `paths*` (array), `recursive` (boolean), `device*` (string) | Use this when the user explicitly asks to remove two or more named files or directories in one batch. For one target use delete_path; use move_to_trash when reversibility matters. | | `create_archive` | changes state | `paths*` (array), `destination*` (string), `format` ("tar" \| "tar.gz" \| "zip"), `device*` (string) | Use this when the user wants files or a directory packed into a tar, tar.gz, or zip archive, for example before a transfer or a backup. | | `extract_archive` | changes state | `archive*` (string), `destination` (string), `device*` (string) | Use this when the user wants an existing tar or zip archive unpacked on a paired computer. | | `start_search` | local state | `path*` (string), `pattern*` (string), `searchType` ("content" \| "files"), `filePattern` (string), `ignoreCase` (boolean), `maxResults` (number), `includeHidden` (boolean), `includeIgnored` (boolean), `contextLines` (number), `literalSearch` (boolean), `device*` (string) | Use this when the user wants to find filenames or perform a content search under a path and does not need every matching file read in full. Use read_files instead when a glob is already known and the contents of every matched file are the desired result. Starts a search session and returns the first matches. | | `get_more_search_results` | read-only | `sessionId*` (string), `offset` (number), `length` (number), `device*` (string) | Use this when a search started with start_search still has more matches to return. | | `stop_search` | local state | `sessionId*` (string), `device*` (string) | Use this when a search session is no longer needed and should release its resources. | | `list_searches` | read-only | `device*` (string) | Use this when you need to know which search sessions are still active on a machine. | ## Terminal Start, monitor, interact with and terminate sessions using independent process tools. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `start_process` | changes state, open-world | `command*` (string), `timeout_ms` (number), `device*` (string) | Use this when the user asks to run a shell command, build, test suite, script, or terminal server that is not already covered by a narrower semantic tool. Prefer launch_app for GUI applications, service for service-manager operations, power_action for lock/sleep/restart/shutdown, network for routine network inspection/tests, event_log for OS logs, installed_apps for software inventory, environment for environment facts, and open_path/reveal_path for opening or revealing files. | | `read_process_output` | read-only | `pid*` (number), `offset` (number), `length` (number), `timeout_ms` (number), `device*` (string) | Use this when a process started earlier has more output to show and you do not want to wait for a pattern. | | `interact_with_process` | changes state, open-world | `pid*` (number), `input*` (string), `timeout_ms` (number), `device*` (string) | Use this when a running process is waiting for input, such as a prompt or a confirmation. | | `wait_for_process_output` | read-only | `pid*` (number), `pattern*` (string), `timeout_ms` (number), `device*` (string) | Use this when you need to wait until a running command prints something specific, such as a readiness line or a failing test name. | | `force_terminate` | changes state | `pid*` (number), `device*` (string) | Use this when a process session created by start_process must stop, such as a runaway build or server left behind. For an arbitrary operating-system PID that is not a ReMCP terminal session, use kill_process instead. | | `list_sessions` | read-only | `device*` (string) | Use this when you need to know which ReMCP terminal sessions created by start_process are still running. Use list_processes for the computer-wide operating-system process list. | ## Desktop & input Control windows, accessibility elements and native keyboard, pointer and clipboard operations. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `computer_snapshot` | read-only | `max_ui_nodes` (number), `max_ui_depth` (number), `include_ui` (boolean), `ui_scope` ("active" \| "desktop"), `semantic_tree` (boolean), `ui_browser_dom` (boolean), `include_screenshot` (boolean), `screenshot_region` (array), `screenshot_window_id` (string), `screenshot_monitor` (string), `screenshot_monitor_index` (number), `screenshot_padding` (number), `grid_columns` (number), `grid_rows` (number), `include_browser` (boolean), `browser_readiness` (boolean), `browser_max_nodes` (number), `include_ocr` (boolean), `ocr_language` (string), `ocr_max_words` (number), `ocr_psm` (number), `ocr_timeout_ms` (number), `device*` (string) | Use this when you need the first compact view of an unfamiliar desktop state, including windows, semantic UI, displays, clipboard metadata and optional pixels/browser/OCR. Prefer it over repeated screenshots; narrow later with ui_find, browser_find or screenshot_region. | | `list_windows` | read-only | `include_monitor` (boolean), `device*` (string) | Use this when the user needs to discover top-level desktop windows or obtain a stable window id/PID/bounds before window_action, screenshot_region or targeted input. Use ui_snapshot instead when you need controls inside a window; prefer list_windows over screenshot-based window guessing. | | `ui_snapshot` | read-only | `scope` ("active" \| "desktop"), `pid` (number), `app` (string), `window_title` (string), `browser_dom` (boolean), `semantic_tree` (boolean), `max_nodes` (number), `max_depth` (number), `device*` (string) | Use this when the user needs to inspect native desktop Accessibility/UI Automation semantics for the active app before clicking or typing. Prefer scope=active; use scope=desktop only for cross-application discovery. For a Chromium web page with CDP available, prefer browser_snapshot for page DOM semantics. | | `ui_find` | read-only | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `refresh` (boolean), `limit` (number), `max_nodes` (number), `max_depth` (number), `device*` (string) | Use this when you need a small set of native UI elements by role/name/label/AutomationId after ui_snapshot. It requires an element criterion; use ui_snapshot, not an empty ui_find, to enumerate UI. Prefer returned id or compact label for subsequent ui_action; refresh only when the UI has changed. | | `wait_for_ui` | read-only | `state` ("present" \| "absent" \| "changed"), `condition` ("text_exists" \| "active_window" \| "element_exists" \| "element_enabled" \| "focused_element"), `text` (string), `browser_dom` (boolean), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `timeout_ms` (number), `poll_ms` (number), `device*` (string) | Use this when a desktop action must be followed by proof of an explicit native UI state or condition instead of sleeping or polling screenshots. Presence/absence waits need a semantic target; use state=changed for a broad tree change and set a bounded timeout. | | `display_inventory` | read-only | `device*` (string) | Use this when monitor-specific screenshots, cross-monitor geometry or coordinate work require monitor bounds, scale and primary-display information. | | `computer_click` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user requests to click using computer action on a paired computer. This tool executes only click; the action cannot be changed through its arguments. | | `computer_type` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `text*` (string), `clear` (boolean), `device*` (string) | Use this when the user requests to type using computer action on a paired computer. This tool executes only type; the action cannot be changed through its arguments. | | `computer_invoke` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user asks to activate an identified native desktop accessibility control on a paired computer, such as invoking a menu item or button. Resolve the intended control from a recent computer_snapshot or ui_find first. Invoking it can submit forms, change application state, or trigger irreversible actions; it does not run arbitrary shell commands or page JavaScript. | | `computer_focus` | open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to focus using computer action on a paired computer. This tool executes only focus; the action cannot be changed through its arguments. | | `computer_select` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `value` (string), `device*` (string) | Use this when the user requests to select using computer action on a paired computer. This tool executes only select; the action cannot be changed through its arguments. | | `computer_scroll` | open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `delta_x` (number), `delta_y` (number), `delta` (number), `direction` ("up" \| "down" \| "left" \| "right"), `wheel_times` (number), `device*` (string) | Use this when the user requests to scroll using computer action on a paired computer. This tool executes only scroll; the action cannot be changed through its arguments. | | `computer_drag` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `from_x` (number), `from_y` (number), `to_x` (number), `to_y` (number), `from_id` (string), `to_id` (string), `button` ("left" \| "right" \| "middle"), `hold_ms` (number), `duration_ms` (number), `device*` (string) | Use this when the user requests to drag using computer action on a paired computer. This tool executes only drag; the action cannot be changed through its arguments. | | `computer_set_value` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `value` (string), `device*` (string) | Use this when the user requests to set value using computer action on a paired computer. This tool executes only set_value; the action cannot be changed through its arguments. | | `computer_toggle` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to toggle using computer action on a paired computer. This tool executes only toggle; the action cannot be changed through its arguments. | | `computer_expand` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to expand using computer action on a paired computer. This tool executes only expand; the action cannot be changed through its arguments. | | `computer_collapse` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to collapse using computer action on a paired computer. This tool executes only collapse; the action cannot be changed through its arguments. | | `computer_scroll_into_view` | open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to scroll into view using computer action on a paired computer. This tool executes only scroll_into_view; the action cannot be changed through its arguments. | | `computer_set_range_value` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `value` (string), `device*` (string) | Use this when the user requests to set range value using computer action on a paired computer. This tool executes only set_range_value; the action cannot be changed through its arguments. | | `computer_add_to_selection` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `value` (string), `device*` (string) | Use this when the user requests to add to selection using computer action on a paired computer. This tool executes only add_to_selection; the action cannot be changed through its arguments. | | `computer_remove_from_selection` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `value` (string), `device*` (string) | Use this when the user requests to remove from selection using computer action on a paired computer. This tool executes only remove_from_selection; the action cannot be changed through its arguments. | | `computer_multi_select` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `targets*` (array), `device*` (string) | Use this when the user requests to multi select using computer action on a paired computer. This tool executes only multi_select; the action cannot be changed through its arguments. | | `computer_multi_edit` | changes state, open-world | `target` ("auto" \| "ui" \| "ui_element" \| "browser" \| "ocr" \| "coordinates" \| "window"), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `title` (string), `window_id` (string), `selector` (string), `browser_text` (string), `ocr_text` (string), `x` (number), `y` (number), `edits*` (array), `device*` (string) | Use this when the user requests to multi edit using computer action on a paired computer. This tool executes only multi_edit; the action cannot be changed through its arguments. | | `window_focus` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the user requests to focus using window action on a paired computer. This tool executes only focus; the action cannot be changed through its arguments. | | `window_minimize` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the user requests to minimize using window action on a paired computer. This tool executes only minimize; the action cannot be changed through its arguments. | | `window_maximize` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the user requests to maximize using window action on a paired computer. This tool executes only maximize; the action cannot be changed through its arguments. | | `window_restore` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the user requests to restore using window action on a paired computer. This tool executes only restore; the action cannot be changed through its arguments. | | `window_move` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `x*` (number), `y*` (number), `device*` (string) | Use this when the user requests to move using window action on a paired computer. This tool executes only move; the action cannot be changed through its arguments. | | `window_resize` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `width*` (number), `height*` (number), `device*` (string) | Use this when the user requests to resize using window action on a paired computer. This tool executes only resize; the action cannot be changed through its arguments. | | `window_move_resize` | local state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `x*` (number), `y*` (number), `width*` (number), `height*` (number), `device*` (string) | Use this when the user requests to move and resize using window action on a paired computer. This tool executes only move_resize; the action cannot be changed through its arguments. | | `window_close` | changes state | `id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the user requests to close using window action on a paired computer. This tool executes only close; the action cannot be changed through its arguments. | | `launch_app` | changes state, open-world | `app` (string), `path` (string), `args` (array), `cwd` (string), `wait_for_window` (string), `wait_timeout_ms` (number), `device*` (string) | Use this when the user explicitly asks to start a named desktop application or permitted executable on a paired computer. Launches the specified app with an argument array and no shell; start_process handles shell commands and scripts, while open_path opens existing permitted files or directories in their default application. Starting an app can execute code and change desktop state. | | `ui_click` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to click using ui action on a paired computer. This tool executes only click; the action cannot be changed through its arguments. | | `ui_invoke` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user asks to invoke one identified native Accessibility/UI Automation element, such as a button or menu command, by its element ID or a specific role/name selector on a paired computer. Find the control with ui_snapshot or ui_find first. Invoking a control can submit data or cause destructive application actions. | | `ui_focus` | open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to focus using ui action on a paired computer. This tool executes only focus; the action cannot be changed through its arguments. | | `ui_set_value` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `value` (value), `device*` (string) | Use this when the user requests to set value using ui action on a paired computer. This tool executes only set_value; the action cannot be changed through its arguments. | | `ui_select` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `value` (value), `device*` (string) | Use this when the user requests to select using ui action on a paired computer. This tool executes only select; the action cannot be changed through its arguments. | | `ui_toggle` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to toggle using ui action on a paired computer. This tool executes only toggle; the action cannot be changed through its arguments. | | `ui_expand` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to expand using ui action on a paired computer. This tool executes only expand; the action cannot be changed through its arguments. | | `ui_collapse` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to collapse using ui action on a paired computer. This tool executes only collapse; the action cannot be changed through its arguments. | | `ui_scroll_into_view` | open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to scroll into view using ui action on a paired computer. This tool executes only scroll_into_view; the action cannot be changed through its arguments. | | `ui_set_range_value` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `value` (value), `device*` (string) | Use this when the user requests to set range value using ui action on a paired computer. This tool executes only set_range_value; the action cannot be changed through its arguments. | | `ui_add_to_selection` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to add to selection using ui action on a paired computer. This tool executes only add_to_selection; the action cannot be changed through its arguments. | | `ui_remove_from_selection` | changes state, open-world | `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `device*` (string) | Use this when the user requests to remove from selection using ui action on a paired computer. This tool executes only remove_from_selection; the action cannot be changed through its arguments. | | `type_text` | changes state, open-world | `text*` (string), `method` ("auto" \| "accessibility" \| "clipboard" \| "keys"), `clear` (boolean), `caret_position` ("start" \| "idle" \| "end"), `press_enter` (boolean), `delay_ms` (number), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `window_id` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the task calls for reliable Unicode text entry into a native semantic target or focused native control. Prefer method=auto so Accessibility is used when the target supports verified semantic editing. For Chromium page DOM, use browser_action instead of forcing desktop accessibility text input; auto fails safely when a semantic element rejects the write rather than claiming an unverified paste. Use method=keys only for deliberate physical key-by-key input, and keyboard for shortcuts/navigation/control keys. | | `keyboard` | changes state, open-world | `shortcut` (string), `key` (string), `keys` (array), `window_id` (string), `pid` (number), `app` (string), `title` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the task calls for shortcuts and individual key presses such as Ctrl/Cmd+C, Tab, Enter or Escape. Do not use it to enter normal prose when type_text is available. On Wayland auto uses an already-authorized portal; backend=portal explicitly requests consent. | | `pointer_move` | open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `device*` (string) | Use this when the user requests to move using pointer on a paired computer. This tool executes only move; the action cannot be changed through its arguments. | | `pointer_click` | changes state, open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user requests to click using pointer on a paired computer. This tool executes only click; the action cannot be changed through its arguments. | | `pointer_double_click` | changes state, open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user requests to double click using pointer on a paired computer. This tool executes only double_click; the action cannot be changed through its arguments. | | `pointer_right_click` | changes state, open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user requests to right click using pointer on a paired computer. This tool executes only right_click; the action cannot be changed through its arguments. | | `pointer_down` | changes state, open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user asks to press and hold a mouse button to begin a native desktop drag or selection gesture on a paired computer. This sends a real pointer-button-down event to the current application and leaves the button held until pointer_up; it may change application state. | | `pointer_up` | changes state, open-world | `backend` ("auto" \| "x11" \| "portal"), `x` (number), `y` (number), `button` ("left" \| "right" \| "middle"), `device*` (string) | Use this when the user asks to release a mouse button after pointer_down during a native desktop drag or selection gesture on a paired computer. Releasing the button can complete a drag, click, selection or application action; it does not press the button. | | `drag_drop` | changes state, open-world | `from_x` (number), `from_y` (number), `to_x` (number), `to_y` (number), `from_id` (string), `to_id` (string), `button` ("left" \| "right" \| "middle"), `hold_ms` (number), `duration_ms` (number), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the task calls for a real drag gesture between two UI element ids or coordinates. Prefer element ids from ui_find/ui_snapshot because their current bounds are resolved at execution time; use coordinates only when no semantic endpoints exist. On GNOME Wayland, real drag input requires the consent-backed Remote Desktop portal because XTEST/xdotool drag delivery is not reliable. | | `scroll` | local state | `delta_x` (number), `delta_y` (number), `delta` (number), `direction` ("up" \| "down" \| "left" \| "right"), `wheel_times` (number), `x` (number), `y` (number), `id` (string), `label` (number), `pid` (number), `app` (string), `window_title` (string), `name` (string), `role` (string), `automation_id` (string), `backend` ("auto" \| "x11" \| "portal"), `device*` (string) | Use this when the task calls for native wheel scrolling of a desktop region or semantic UI target. Prefer browser_action scroll_into_view for a known web element and ui_action scroll_into_view for a known accessible desktop element. | | `clipboard_read` | read-only | `device*` (string) | Use this when the user requests to read using clipboard on a paired computer. This tool executes only read; the action cannot be changed through its arguments. | | `clipboard_write` | changes state | `text*` (string), `device*` (string) | Use this when the user requests to write using clipboard on a paired computer. This tool executes only write; the action cannot be changed through its arguments. | | `clipboard_clear` | changes state | `device*` (string) | Use this when the user requests to clear using clipboard on a paired computer. This tool executes only clear; the action cannot be changed through its arguments. | | `open_path` | local state | `path*` (string), `device*` (string) | Use this when the user wants the desktop operating system to open an existing permitted file or directory with its configured default application. The path is checked against the paired computer policy. | | `reveal_path` | local state | `path*` (string), `device*` (string) | Use this when the user needs to reveal a permitted local file or directory in Finder/Explorer/file manager without opening the document itself. | | `notification` | local state | `title` (string), `message*` (string), `timeout_seconds` (number), `device*` (string) | Use this when the user wants a visible native desktop notification on the paired computer. Do not use it as a substitute for replying in chat. | | `record_screen` | changes state | `duration_seconds` (number), `fps` (number), `destination` (string), `device*` (string) | Use this when the task calls for a short bounded screen recording when motion/timing is necessary to diagnose a UI issue. Prefer screenshot_region for static visual verification because it is cheaper and easier to inspect. | ## Images & screenshots Read image files or capture screenshots using native image results. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `read_image` | read-only | `path*` (string), `device*` (string) | Use this when the user wants to inspect or show an image that lives on a paired computer, such as a screenshot, photo, or diagram. It returns native MCP image content; do not use read_binary merely to display an image. | | `take_screenshot` | local state | `directory` (string), `keep` (boolean), `device*` (string) | Use this when the user needs pixels for the entire desktop. Prefer ui_snapshot or browser_snapshot for semantic inspection, and screenshot_region for one window, monitor, or rectangle. | | `screenshot_region` | read-only | `x` (number), `y` (number), `width` (number), `height` (number), `window_id` (string), `pid` (number), `app` (string), `title` (string), `monitor` (string), `monitor_index` (number), `padding` (number), `device*` (string) | Use this when static pixels are required for visual verification but only one window, monitor or rectangle matters. Prefer it over take_screenshot for a full desktop and over record_screen when motion/timing is not required; use ui_snapshot/browser_snapshot first when semantic structure is sufficient. | ## Browser DOM & CDP Use individually declared browser tab, DOM, navigation and action tools. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `browser_tabs` | read-only, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `device*` (string) | Use this when starting CDP browser automation and the target page or tab is not already unambiguous. It lists debuggable Chromium pages from a loopback-only endpoint; use the returned target_id/title/url to scope later browser tools. | | `browser_navigate_url` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `wait` (boolean), `url*` (string), `device*` (string) | Use this when the user requests to navigate to URL using browser navigate on a paired computer. This tool executes only url; the action cannot be changed through its arguments. | | `browser_new_tab` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `wait` (boolean), `url*` (string), `device*` (string) | Use this when the user requests to open new tab using browser navigate on a paired computer. This tool executes only new_tab; the action cannot be changed through its arguments. | | `browser_back` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `wait` (boolean), `device*` (string) | Use this when the user requests to back using browser navigate on a paired computer. This tool executes only back; the action cannot be changed through its arguments. | | `browser_forward` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `wait` (boolean), `device*` (string) | Use this when the user requests to forward using browser navigate on a paired computer. This tool executes only forward; the action cannot be changed through its arguments. | | `browser_reload` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `wait` (boolean), `ignore_cache` (boolean), `device*` (string) | Use this when the user requests to reload using browser navigate on a paired computer. This tool executes only reload; the action cannot be changed through its arguments. | | `browser_snapshot` | read-only, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `max_nodes` (number), `diff_from` (string), `include_screenshot` (boolean), `selector` (string), `device*` (string) | Use this when the user needs to inspect a web page structurally through CDP accessibility. Reuse the last snapshot_id as diff_from to return changed/removed semantic nodes rather than retransmitting the whole page after each step; refresh with a full snapshot when unavailable. Prefer it over desktop ui_snapshot for page content; add include_screenshot=true only when final pixel/layout verification is needed. A selector may be temporarily centered for capture, but the original page scroll position is restored before the tool returns. | | `browser_find` | read-only, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `role` (string), `limit` (number), `device*` (string) | Use this when the user needs to locate visible web elements by CSS selector, text or ARIA role and obtain reusable selectors/bounds. It requires an element criterion; use browser_snapshot, not an empty browser_find, to enumerate page structure. Prefer this before browser_action rather than guessing selectors or coordinates. | | `browser_click` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `browser_text` (string), `device*` (string) | Use this when the user requests to click using browser action on a paired computer. This tool executes only click; the action cannot be changed through its arguments. | | `browser_focus` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `browser_text` (string), `device*` (string) | Use this when the user requests to focus using browser action on a paired computer. This tool executes only focus; the action cannot be changed through its arguments. | | `browser_type` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `browser_text` (string), `text*` (string), `clear` (boolean), `device*` (string) | Use this when the user requests to type using browser action on a paired computer. This tool executes only type; the action cannot be changed through its arguments. | | `browser_set_value` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `browser_text` (string), `value` (string), `device*` (string) | Use this when the user requests to set value using browser action on a paired computer. This tool executes only set_value; the action cannot be changed through its arguments. | | `browser_select` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `browser_text` (string), `option` (string), `device*` (string) | Use this when the user requests to select using browser action on a paired computer. This tool executes only select; the action cannot be changed through its arguments. | | `browser_scroll` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `delta_x` (number), `delta_y` (number), `delta` (number), `direction` ("up" \| "down" \| "left" \| "right"), `wheel_times` (number), `device*` (string) | Use this when the user requests to scroll using browser action on a paired computer. This tool executes only scroll; the action cannot be changed through its arguments. | | `browser_scroll_into_view` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector` (string), `text` (string), `browser_text` (string), `device*` (string) | Use this when the user requests to scroll into view using browser action on a paired computer. This tool executes only scroll_into_view; the action cannot be changed through its arguments. | | `browser_upload` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `selector*` (string), `path` (string), `paths` (array), `device*` (string) | Use this when the user requests to upload using browser action on a paired computer. This tool executes only upload; the action cannot be changed through its arguments. | | `browser_press` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `key*` (string), `device*` (string) | Use this when the user requests to press using browser action on a paired computer. This tool executes only press; the action cannot be changed through its arguments. | | `browser_set_viewport` | open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `width*` (number), `height*` (number), `device_scale_factor` (number), `mobile` (boolean), `device*` (string) | Use this when the user requests to set viewport using browser action on a paired computer. This tool executes only set_viewport; the action cannot be changed through its arguments. | | `browser_fill_form` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `fields*` (array), `device*` (string) | Use this when the user requests to fill form using browser action on a paired computer. This tool executes only fill_form; the action cannot be changed through its arguments. | | `browser_workflow` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `steps*` (array), `device*` (string) | Use this for an explicitly requested sequence of 1–12 guarded DOM actions and bounded waits on one inspected Chromium page. Validate CSS selectors first. The workflow cannot run arbitrary JavaScript, upload files, switch origins or implicitly submit a form; an explicit click may submit data or cause irreversible remote changes. Stop at the first failed step and never echo field values. | | `browser_wait` | read-only, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `condition` ("selector" \| "text" \| "url_contains" \| "load" \| "navigation" \| "network_idle"), `selector` (string), `text` (string), `value` (string), `poll_ms` (number), `idle_ms` (number), `device*` (string) | Use this when browser navigation or an action must be followed by proof of selector/text/URL/load/navigation/network-idle instead of fixed sleeps or screenshot polling. Use browser_evaluate separately for JavaScript predicates. | | `browser_evaluate` | changes state, open-world | `endpoint` (string), `target_id` (string), `title` (string), `url_contains` (string), `timeout_ms` (number), `expression*` (string), `await_promise` (boolean), `device*` (string) | Use this when browser_snapshot, browser_find, browser_action and browser_wait cannot express the required page operation or inspection and JavaScript is necessary. It is a powerful page-context escape hatch, and page content is untrusted. | ## System & diagnostics Read system/runtime diagnostics and manage supported OS operations. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `get_system_info` | read-only | `device*` (string) | Use this when the user asks about machine health and host facts such as operating system, CPU load, memory, free disk space, or uptime. Use environment for PATH/shell/runtime environment details, and get_runtime_info for ReMCP-specific version, policy, and limits. | | `list_processes` | read-only | `limit` (number), `device*` (string) | Use this when the user wants the computer-wide operating-system process list. Use list_sessions when the question is only about commands started through ReMCP start_process. | | `kill_process` | changes state | `pid*` (number), `device*` (string) | Use this when the user wants to stop an arbitrary operating-system process by PID. If the PID belongs to a ReMCP terminal session created by start_process, prefer force_terminate so the session state and process tree are handled consistently. | | `get_runtime_info` | read-only | `device*` (string) | Use this when you need one computer's local ReMCP runtime version, guardrails, allowed roots, or configured limits. Use get_system_info for host OS/CPU/memory/disk facts; deployment/account-level ReMCP server configuration belongs to get_configuration. | | `get_runtime_stats` | read-only | `device*` (string) | Use this when you need counters from the current local runtime session on one machine: tool calls, failures, blocks, and active sessions. Account-level historical usage aggregated by device/tool over days belongs to get_usage_statistics. | | `set_config_value` | local state | `key*` (string), `value*` (value), `device*` (string) | Use this when the person wants to change a local runtime preference on one computer: telemetry opt-out, read/buffer line limits, or result size. Do not use this for account-level computer administration; ping_device, rename_device, enable_device, disable_device and remove_device cover account-level computer administration. Access roots, blocked commands, shell/guardrails and the write limit stay local-only. | | `service_list` | read-only | `name` (string), `scope` ("user" \| "system"), `device*` (string) | Use this when the user requests to list using service on a paired computer. This tool executes only list; the action cannot be changed through its arguments. | | `service_status` | read-only | `name*` (string), `scope` ("user" \| "system"), `device*` (string) | Use this when the user requests to status using service on a paired computer. This tool executes only status; the action cannot be changed through its arguments. | | `service_start` | changes state | `name*` (string), `scope` ("user" \| "system"), `device*` (string) | Use this when the user requests to start using service on a paired computer. This tool executes only start; the action cannot be changed through its arguments. | | `service_stop` | changes state | `name*` (string), `scope` ("user" \| "system"), `device*` (string) | Use this when the user requests to stop using service on a paired computer. This tool executes only stop; the action cannot be changed through its arguments. | | `service_restart` | changes state | `name*` (string), `scope` ("user" \| "system"), `device*` (string) | Use this when the user requests to restart using service on a paired computer. This tool executes only restart; the action cannot be changed through its arguments. | | `event_log` | read-only | `log` (string), `since` (string), `filter` (string), `query` (string), `limit` (number), `device*` (string) | Use this when the user needs to read bounded recent OS logs (Windows Event Log, macOS unified log or systemd journal) when diagnosing a service/app/system problem. Prefer it over an unbounded shell log dump. | | `network_summary` | read-only, open-world | `device*` (string) | Use this when the user requests to summary using network on a paired computer. This tool executes only summary; the action cannot be changed through its arguments. | | `network_interfaces` | read-only, open-world | `device*` (string) | Use this when the user requests to interfaces using network on a paired computer. This tool executes only interfaces; the action cannot be changed through its arguments. | | `network_dns` | read-only | `device*` (string) | Use this when the user asks to inspect the operating system configured DNS resolver server addresses on a paired computer. This reads local DNS configuration only; it performs no DNS lookup, external network request, or network configuration change. | | `network_routes` | read-only, open-world | `device*` (string) | Use this when the user requests to routes using network on a paired computer. This tool executes only routes; the action cannot be changed through its arguments. | | `network_listeners` | read-only, open-world | `device*` (string) | Use this when the user requests to listeners using network on a paired computer. This tool executes only listeners; the action cannot be changed through its arguments. | | `network_test` | read-only, open-world | `host*` (string), `port*` (number), `timeout_ms` (number), `device*` (string) | Use this when the user requests to test using network on a paired computer. This tool executes only test; the action cannot be changed through its arguments. | | `installed_apps` | read-only | `filter` (string), `limit` (number), `device*` (string) | Use this when the user needs to answer what software/packages are installed and their versions. Prefer a filter when looking for one product instead of returning the full inventory. | | `environment` | read-only | `include_env` (boolean), `device*` (string) | Use this when the task calls for PATH, shell, Node/runtime environment paths, architecture and optionally sanitized environment variables. Use get_system_info for host health such as CPU/memory/disk/uptime, and get_runtime_info for ReMCP policy, roots and limits. Secret-looking values remain masked. | | `audio_status` | read-only | `device*` (string) | Use this when the user requests to status using audio on a paired computer. This tool executes only status; the action cannot be changed through its arguments. | | `audio_set_volume` | local state | `volume*` (number), `device*` (string) | Use this when the user requests to set output volume using audio on a paired computer. This tool executes only set_volume; the action cannot be changed through its arguments. | | `audio_mute` | local state | `device*` (string) | Use this when the user requests to mute using audio on a paired computer. This tool executes only mute; the action cannot be changed through its arguments. | | `audio_unmute` | local state | `device*` (string) | Use this when the user requests to unmute using audio on a paired computer. This tool executes only unmute; the action cannot be changed through its arguments. | | `power_lock` | local state | `delay_seconds` (number ≥0 ≤90), `device*` (string) | Use this when the user requests to lock using power action on a paired computer. This tool executes only lock; the action cannot be changed through its arguments. | | `power_sleep` | changes state | `delay_seconds` (number ≥0 ≤90), `device*` (string) | Use this when the user requests to sleep using power action on a paired computer. This tool executes only sleep; the action cannot be changed through its arguments. | | `power_restart` | changes state | `delay_seconds` (number ≥0 ≤90), `device*` (string) | Use this when the user requests to restart using power action on a paired computer. This tool executes only restart; the action cannot be changed through its arguments. | | `power_shutdown` | changes state | `delay_seconds` (number ≥0 ≤90), `device*` (string) | Use this when the user requests to shutdown using power action on a paired computer. This tool executes only shutdown; the action cannot be changed through its arguments. | ## Structured documents Read and edit PDF, DOCX and spreadsheets directly. | Tool | Safety | Parameters | When to use | | --- | --- | --- | --- | | `read_document` | read-only | `path*` (string), `sheet` (string), `max_cells` (number), `device*` (string) | Use this when the user needs structured document content from a PDF, DOCX, XLSX, CSV, JSON or XML file on a paired computer. Returns extracted content and bounded metadata from the document path. | | `edit_spreadsheet` | changes state | `path*` (string), `create` (boolean), `output` (string), `sheet` (string), `edits*` (array), `device*` (string) | Use this when the user needs to create a new XLSX workbook or directly edit XLSX cells/ranges/formulas without launching Excel. Set create=true only for a new path; it fails rather than overwriting an existing workbook. Prefer explicit cells/ranges and write to output when preserving an existing original matters. | | `document_replace` | changes state | `path*` (string), `create` (boolean), `output` (string), `search*` (string), `replacement*` (string), `all` (boolean), `device*` (string) | Use this when the user requests to replace using edit document on a paired computer. This tool executes only replace; the action cannot be changed through its arguments. | | `document_append_paragraph` | changes state | `path*` (string), `create` (boolean), `output` (string), `text*` (string), `device*` (string) | Use this when the user requests to append paragraph using edit document on a paired computer. This tool executes only append_paragraph; the action cannot be changed through its arguments. | | `document_prepend_paragraph` | changes state | `path*` (string), `create` (boolean), `output` (string), `text*` (string), `device*` (string) | Use this when the user requests to prepend paragraph using edit document on a paired computer. This tool executes only prepend_paragraph; the action cannot be changed through its arguments. | | `document_insert_paragraph_before` | changes state | `path*` (string), `create` (boolean), `output` (string), `search*` (string), `text*` (string), `device*` (string) | Use this when the user requests to insert paragraph before using edit document on a paired computer. This tool executes only insert_paragraph_before; the action cannot be changed through its arguments. | | `document_insert_paragraph_after` | changes state | `path*` (string), `create` (boolean), `output` (string), `search*` (string), `text*` (string), `device*` (string) | Use this when the user requests to insert paragraph after using edit document on a paired computer. This tool executes only insert_paragraph_after; the action cannot be changed through its arguments. | | `document_delete_paragraph` | changes state | `path*` (string), `create` (boolean), `output` (string), `search*` (string), `all` (boolean), `device*` (string) | Use this when the user requests to delete paragraph using edit document on a paired computer. This tool executes only delete_paragraph; the action cannot be changed through its arguments. | | `pdf_merge` | changes state | `path` (string), `output*` (string), `output_dir` (string), `pattern` (string), `paths*` (array), `device*` (string) | Use this when the user requests to merge using pdf action on a paired computer. This tool executes only merge; the action cannot be changed through its arguments. | | `pdf_split` | changes state | `path*` (string), `output` (string), `output_dir` (string), `pattern` (string), `pages` (string), `device*` (string) | Use this when the user requests to split using pdf action on a paired computer. This tool executes only split; the action cannot be changed through its arguments. | | `pdf_extract_pages` | changes state | `path*` (string), `output*` (string), `output_dir` (string), `pattern` (string), `pages*` (string), `device*` (string) | Use this when the user requests to extract pages using pdf action on a paired computer. This tool executes only extract_pages; the action cannot be changed through its arguments. | | `pdf_annotations` | read-only | `path*` (string), `device*` (string) | Use this when the user asks to list or inspect annotations, comments, highlights or markup already present in one permitted local PDF file on a paired computer. Requires the PDF path and only returns annotation metadata; it does not edit, save, delete or annotate the PDF. | | `pdf_info` | read-only | `path*` (string), `device*` (string) | Use this when the user asks to inspect an existing local PDF file on an explicitly paired computer and retrieve its metadata and properties, such as page count, title, author or PDF version when the local pdfinfo utility is available. Supply the permitted PDF path. Without pdfinfo, the fallback reports file size in bytes and annotation count. This is read-only: it does not extract page text, edit annotations, write output or replace the source PDF. | ## Contract notes - Every public tool has a human-readable title/description, explicit input schema, output schema for structured results, and MCP safety annotations in the production catalog. - Structured tool calls return `structuredContent` that matches the advertised output schema together with normal MCP content where useful to the model. - Browser/CDP tools are capability-aware and can be enabled or disabled as the local runtime discovers or loses a usable loopback browser endpoint. - `computer_snapshot` is the broad first-look tool for an unfamiliar desktop; once the target is known, prefer the narrowest dedicated tool for the action and verify with semantic state before using pixels. - The website renders this same catalog at [remcp.site/docs#tools](https://remcp.site/docs#tools).