What makes Uindow immune to prompt injections?
It uses genuine OS‑level input (actual cursor movement, real keystrokes) rather than synthetic page events, so injected JavaScript in web pages cannot affect the automation.

@uindow
基本情報
Real browser automation for AI agents. Uindow ships a local MCP server that drives a real, signed Chromium/Electron browser with genuine OS-level input (real cursor movement, real keystrokes, native file dialogs) entirely on the user's own machine.
以下の設定を使って、このサーバーを MCP 対応クライアントに追加してください。
{
"mcpServers": {
"uindow": {
"command": "npx",
"args": [
"-y",
"@uindow/cli",
"mcp"
]
}
}
}Query SDK documentation **Never attempt to guess arguments!** Always call the `app_docs` tool again with **query** set to the method or property you are about to use. This retrieves its full argument details and available code examples, which are usually complete Uindow modules exported in YAML format. Get the full list of available dollar sign ($) object properties and methods, or search for a particular method. Results are sorted in ascending order based on how closely the query string matches the beginning of the paragraph. Use these dollar sign ($) object properties and methods in pure JavaScript **code** blocks when calling `agent_execute` or `src_code_set`. Returns: Documentation for a dollar sign ($) object property or method in Markdown format, or a list of all available dollar sign ($) object properties and methods in Markdown format.
Get application status Check whether Uindow was installed and started on this computer. Returns: `True` if the app was started, `false` otherwise
Start application If Uindow is already running, silently return `false`. Otherwise, download the required version of Electron.js and Uindow as needed, launch the Uindow application, and return `true`. Returns: `True` if the app was launched, `false` if it was already running
Stop application If Uindow was already stopped, or the quit signal could not be delivered, return `false`. Otherwise, issue a quit signal, wait for the app to exit gracefully, and return `true`. Returns: `True` if the app was stopped, `false` otherwise
List agents Get the list of agents that can perform tasks on this machine. Each agent is assigned a unique `index` from 1 to 9, which is used to identify the agent when issuing commands. You may use this list to map an agent's name to its `index` when a user refers to an agent by name, and to check whether the agent is currently executing a task. Returns: List of agents
Create agent Add a new agent with the specified name. A maximum of 9 agents can exist at a time; creating a 10th agent will fail. The name is trimmed and truncated to 64 characters. Use the `agent_list` tool to fetch all available agents and their indexes. Returns: A unique `index` from 1 to 9, which is used to identify this agent with various tools.
Update agent Update an agent's name. The name is trimmed and truncated to 64 characters. Use the `agent_list` tool to fetch all available agents and their indexes. Returns: `True` on success
Delete agent Delete an agent from the list. Use the `agent_list` tool to fetch all available agents and their indexes. Returns: `True` on success, `false` on failure
Get agent status Check whether the agent is currently executing a task. Use the `agent_logs` tool to get the agent status object and the latest logs. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `agent_start` tool to start or unpause the agent as needed. Use the `agent_stop` tool to stop the agent as needed. Returns: Agent status object
Start agent Start or unpause the agent and run the source code (to which users may refer to as a module) as defined using the `src_*` tools. The purpose of the source code is to provide permanence and safe transferability for automations. If you wish to execute SDK methods on the fly (without saving them), call the `agent_execute` tool instead. Use the `agent_list` tool to fetch all available agents and their indexes. Call the `agent_status` tool from time to time or use the `agent_logs` tool to check execution progress. Use the `src_export` tool to review the complete module source code before executing it. Use the `agent_settings_set` tool to set the values for all inputs before running this tool. Use the `agent_results_get` tool to fetch the captured outputs after running this tool. Returns: `True` if the agent was started (it had previously been stopped or paused), `false` if it was already running.
Stop agent Stop the agent and return control back to the user or AI assistant. Use the `agent_list` tool to fetch all available agents and their indexes. Returns: `True` if the agent was stopped (it had been running or paused), `false` if it was already stopped.
Grab agent screenshot Capture a PNG screenshot of the current web page directly as a Base64-encoded string. No need to set up a file output for this agent. It works even if the agent is already executing another task. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `agent_viewport` tool to capture a text version of the viewport if your model does not support images. Returns: PNG screenshot, an object with { mimeType: "image/png", data: "base-64 string" }
Scan agent viewport Get a structured list of the HTML elements currently visible in the agent's viewport. This is a lightweight, text-based alternative to `agent_screenshot` for text-only AI models, and it can be called while the agent is busy executing another task. The first entry is always a synthetic `<viewport>` entry describing the page and the viewport itself. Its `x`, `y`, `width` and `height` are the viewport box that every other entry's coordinates are relative to, and its scroll values describe how far the viewport is scrolled and how much content lies outside it. The remaining entries are ordered by how likely they are to be worth acting on rather than by document position: anchors first, then form controls, then anything else that is interactive, then images and other embedded content. Elements are described lazily, so the list is cut short as soon as `maxResults`; the most useful entries survive either cut. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `app_docs` tool with query set to "doQuery" and maxResults set to 10 to learn more about the available DOM inspection methods. Use the `agent_execute` tool to with `$.do*` methods to perform deeper DOM inspection. Returns: List of DOM elements visible in the viewport
Execute code in an agent Execute asynchronous JavaScript code in the agent and forward the returned value. Remember to use `return` as your last statement; for example: `return await $.navGetTitle();`. The code runs safely outside the browser, so it has no access to window, document, cookies, or other DOM APIs. It can only use plain JavaScript and the dollar sign ($) object to perform the kinds of actions a regular user can perform - navigate, click, scroll, read text, save files, and so on. **Before running this tool, you must first make sure the agent has been stopped using the `agent_status` and `agent_stop` tools**. **Never run this tool without first using the `app_docs` tool twice**: once to list all SDK methods, and again to query the specific methods you intend to use, including their detailed arguments and examples. **You must never wrap your code in an async IIFE** (immediately invoked function expression) because all code blocks in Uindow, both functions and FSM states, are already asynchronous JavaScript. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `app_docs` tool to query the available dollar sign ($) methods and properties for use in the `code` argument of this tool. Returns: Any value returned by the executed code.
Get agent logs Output agent logs generated since the last `agent_logs` tool call. Logs are output as lines of text with the following structure: `[info/success/warning/error] {multi-line message} ({date and time})`. Example: `[info] state: Testing $.sleep (12/12/2020, 10:10:00 PM)` **Logs are present in the `content` value of the MCP tool response, not in `structuredContent`**. The structured content part of the response is an object representing the current agent status: either `stopped`, `paused`, or `running`. *Recommendation*: call `agent_logs` in a loop until the returned status is `stopped` or `paused`. Use the `agent_status` tool to get only the agent status object (without the latest logs). Use the `agent_list` tool to fetch all available agents and their indexes. Use the `agent_start` tool to start or unpause the agent as needed. Use the `agent_stop` tool to stop the agent as needed. Returns: Agent status object
Get settings Fetch the input configurations that will be used by the `$.ioInput*()` SDK methods when starting this agent with `agent_start`. The inputs declared using `src_input_*` tools are rendered as form elements in the Settings tab. Use this tool to get all input keys and their current values as configured by the user. At most 5000 rows will be returned for *table* inputs. Use the `agent_list` tool to fetch all available agents and their indexes. Returns: List of inputs and their values
Update settings Set the value of an input declared with the `src_input_set_*` tools. The value type is resolved from the input's own definition, so pass the natural value for that input: - boolean -> `true` or `false` - int -> `42`, or `[1, 2, 3]` if *isList* is `true` - string -> `"foo"`, or `["foo", "bar"]` if *isList* is `true` - files -> array of **absolute file paths** - table -> array of row objects keyed by the input's *columns* Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Use the `src_input_get` tool to inspect an input's declared type. Returns: Extended list of inputs and their values
Get latest results Fetch the results from the most recent call to either `agent_start` or `agent_execute`. Results are populated only when `$.ioOutput*()`, `$.ioSave*()`, or similar SDK methods are invoked correctly with the appropriate output keys. Outputs declared using `src_output_*` tools are rendered as form elements in the Results tab. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `app_docs` tool to look up *ioOutput* and *ioSave* methods for arguments lists and examples. Returns: List of outputs and their values
Module: get sample (yaml) Get a fully functional Uindow module in YAML format. The module is always an object with these keys: *srcStateMachine*, *srcFunctions*, *srcInputs*, and *srcOutputs*. The sample illustrates the interactions between finite-state machine (FSM) states, functions, inputs, and outputs. It also shows how the *$.args* property can be used when passing arguments to FSM states and functions. Use the `app_docs` tool to look up any dollar sign ($) methods used in the returned code. Use the other `src_*` tools to author your own automation, which users may refer to as a module. Returns: Sample source code in YAML format
Module: get source (yaml) Export the agent's source as a YAML string. The source is always an object with these keys: *srcStateMachine*, *srcFunctions*, *srcInputs*, and *srcOutputs*. To edit these properties, you must use the appropriate tool: - *srcStateMachine* and *srcFunctions*: use the `src_code_*` tools - *srcInputs*: use the `src_input_*` tools - *srcOutputs*: use the `src_output_*` tools Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_sample` tool to better understand how the FSM, states and IO interact. If the user asks to save this automation/module as a file, please use the ".js.yaml" extension. Returns: Agent source code in YAML format
Module: get state or function code Fetch the source code for this finite-state machine (FSM) state, or function. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcStateMachine* to get all state keys. Use the `src_keys_list` tool with section *srcFunctions* to get all function keys. Use the `app_docs` tool to look up any dollar sign ($) methods used in the returned code. Returns: Source code object
Module: set state or function code Set the source code for a finite-state machine (FSM) state (*srcStateMachine*) or a function (*srcFunctions*). **You must never wrap your code in an async IIFE** (immediately invoked function expression) because all code blocks in Uindow, both functions and FSM states, are already asynchronous JavaScript. For *srcStateMachine*: When using the `agent_start` tool, the first defined state is executed. Jump to another state by returning an object with the `next` and `args` keys. Example: `return { next: "another-state-key", args: ["foo", "bar"] }` The new state can access the passed arguments through the `$.args` property. The FSM stops when the last executed state no longer returns an object with a *next* property. A maximum of 64 states can be defined. For *srcFunctions*: Call a function from a state or another function using the *$.fn* SDK method. To learn more about *$.fn*, use the `app_docs` tool with "$.fn" as *query*. Pass arguments as an array; for example: `await $.fn("function-key", ["foo", "bar"])`. The function reads them through the `$.args` property, which is always an array. Unlike FSM states, a function's return value has no special role and does not trigger any state transition. A maximum of 128 functions can be defined. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with the same *section* to get all existing keys. Use the `app_docs` tool to view available SDK methods for the *code* argument. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Updated state or function
Module: list item keys Get a list of all keys defined in a module section. - For *srcStateMachine*: finite-state machine (FSM) states; the first state is executed when the agent starts. - For *srcFunctions*: functions that can be used in states and other functions with `await $.fn("function-key")`. - For *srcInputs*: inputs that can be configured with `src_settings_set` and read from states and functions with `$.ioInput*()`. - For *srcOutputs*: outputs that can be accessed with `src_results_get` and written to from states and functions with `$.ioOutput*()` and `$.ioSave*()`. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_export` tool to review the complete module source code. Returns: List of keys in this section.
Module: reorder item keys Reorder the items in a module *section*. - For *srcStateMachine*: the order matters; the first state is executed when the agent starts. - For *srcFunctions*: the item order does not matter; reorder for ease of debugging. - For *srcInputs*: each input item generates a UI element in the agent *Settings* tab; reorder for improved UX. - For *srcOutputs*: each output item generates a UI element in the agent *Results* tab; reorder for improved UX. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with the corresponding section to list all available items. Use the `src_export` tool to review the complete module source code. Returns: Updated list of keys in this section
Module: update item key Change this item's key to make the source code easier to understand. Please make sure to check and update references to this item by reading the full source code exported with the `src_export` tool. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with the corresponding section to list all available items. Use the `src_export` tool to review the complete module source code. Returns: Updated key
Module: delete item Delete this item, but first make sure it is no longer used by reading the full source code exported with the `src_export` tool. - For the *srcStateMachine* section, no state should still call `return { next: "this-state" }` - For the *srcFunctions* section, no state or function should still call `$.fn("this-function-key")` - For the *srcInputs* section, no state or function should still use `$.ioInput*("this-input-key")` - For the *srcOutputs* section, no state or function should still use `$.ioOutput*("this-output-key")` Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with the corresponding section to list all available items. Returns: Returns `true` if the item was found and removed, `false` otherwise
Module: get input Fetch the definition for this input. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Returns: Input definition
Module: set boolean input Define a *boolean* input that can be configured manually in the *Settings* tab or via the `agent_settings_set` tool. If an input with this key already exists, it will be converted to a *boolean* input with the specified properties. Boolean inputs can act as UI controls when used as dependencies for other non-boolean inputs. If a boolean input is configured to `false` - that is, its checkbox in the *Settings* tab is unchecked - any dependent inputs will be hidden from the application's *Settings* tab. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with the *srcInputs* section to get all input keys. Use the `src_sample` tool to better understand how the FSM, states, and IO interact. Use the `agent_settings_set` tool to set the values for this and other inputs before using the `agent_start` tool. Returns: Input definition
Module: set integer input Define an *integer* input that can be configured manually in the *Settings* tab or via the `agent_settings_set` tool. If an input with this key exists, it will be changed to an *integer* input with these properties. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Use the `agent_settings_set` tool to set the value for this and other inputs before using the `agent_start` tool. Returns: Input definition
Module: set string input Define a *string* input that can be configured manually in the *Settings* tab or via the `agent_settings_set` tool. If an input with this key exists, it will be changed to a *string* input with these properties. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Use the `agent_settings_set` tool to set the value for this and other inputs before using the `agent_start` tool. Returns: Input definition
Module: set files input Define a *files* input that can be configured manually in the *Settings* tab or via the `agent_settings_set` tool. If an input with this key exists, it will be changed to a *files* input with these properties. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Use the `agent_settings_set` tool to set the value for this and other inputs before using the `agent_start` tool. Returns: Input definition
Module: set table input Define a *table* input that can be configured manually in the *Settings* tab or via the `agent_settings_set` tool. If an input with this key exists, it will be changed to a *table* input with these properties. You can define a maximum of 6 input tables. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcInputs* to get all input keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Use the `agent_settings_set` tool to set the value for this and other inputs before using the `agent_start` tool. Returns: Input definition
Module: get output Fetch the definition for this output. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Returns: Output definition
Module: set boolean output Define a *boolean* output that can be viewed manually in the *Results* tab or via the `agent_results_get` tool. If an output with this key exists, it will be changed to a *boolean* output with these properties. *Boolean* outputs are rendered as simple green or red dots in the *Results* tab. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Output definition
Module: set integer output Define an *integer* output that can be viewed manually in the *Results* tab or via the `agent_results_get` tool. If an output with this key exists, it will be changed to an *integer* output with these properties. *Integer* outputs are rendered as a line graph in the *Results* tab. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Output definition
Module: set string output Define a *string* output that can be viewed manually in the *Results* tab or via the `agent_results_get` tool. If an output with this key exists, it will be changed to a *string* output with these properties. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Output definition
Module: set files output Define a *files* output that can be viewed manually in the *Results* tab or via the `agent_results_get` tool. If an output with this key exists, it will be changed to a *files* output with these properties. *Files* outputs are rendered inside a file explorer with previews in the *Results* tab. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. You can optionally hide the rendered file explorer for this output (*visible* set to `false`). Use tool `app_docs` with *query* set to "osFileGetUrl" to learn more about file URLs in output *table* rows. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Output definition
Module: set table output Define a *table* output that can be viewed manually in the *Results* tab or via the `agent_results_get` tool. If an output with this key exists, it will be changed to a *table* output with these properties. You can use a maximum of 6 output tables. *Table* outputs are rendered as an interactive table in the *Results* tab. You must always use the returned *key* property, as it has been sanitized and checked for uniqueness. Use the `agent_list` tool to fetch all available agents and their indexes. Use the `src_keys_list` tool with section *srcOutputs* to get all output keys. Use the `src_sample` tool to better understand how the FSM, states and IO interact. Returns: Output definition
Uindow drives a real, signed Chromium/Electron browser with genuine OS-level input—actual cursor movement, real keystrokes, and native file dialogs—running entirely on your own machine and network. It provides an MCP server so AI agents can create and control web-automation agents that are immune to prompt injections.
Launch the MCP server with npx -y @uindow/cli mcp and configure your MCP‑compatible client (Claude Desktop, Cursor, VS Code, etc.) to use that stdio command. Alternatively, use the integrated no‑code recorder or write automations in pure JavaScript inside the built‑in IDE.
It uses genuine OS‑level input (actual cursor movement, real keystrokes) rather than synthetic page events, so injected JavaScript in web pages cannot affect the automation.
Run `npx -y @uindow/cli mcp` in your terminal. Then configure your MCP client (Claude Desktop, Cursor, VS Code, etc.) with the same command as shown in the README.
Uindow runs on your own machine. The `npx` command fetches the signed Electron binary if not present, or you can use prebuilt binaries for macOS, Windows, and Linux from the Releases page. A free Uindow account
MCP server for fetch web page content using Playwright headless browser.
An MCP server for fetching URLs / Youtube video transcript.
Playwright Model Context Protocol Server - Tool to automate Browsers and APIs in Claude Desktop, Cline, Cursor IDE and More 🔌
Allow LLMs to control a browser with Browserbase and Stagehand
Let Claude Code, Claude Desktop, OpenAI Codex, Kimi and any MCP-capable AI agent create, launch, check and drive browser profiles in Nullprint, the AI antidetect browser. Install with one command.
コメント