Umbriel runs on your own machine — the client starts it, so there is no endpoint to ping. 78 installs a week from npm. Last commit 15 Aug 2026.
See and drive a whole Windows machine from Bun — apps, input, screen, OCR, registry, OS — via MCP.
We read the source, 20 h ago · rules 3dff92dd89df
A value the model can set ends up inside a file or shell call. That is not a flaw by itself — for a terminal server it is the job — but it is where things go wrong when it is not.
const proc = Bun.spawn(extra.length > 0 ? [command, ...extra] : command.split(' '), { stdout: 'pipe', stderr: 'pipe' });
What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.
Bun.spawn(argv, { stdout: 'ignore', stderr: 'ignore' });
for (const [name, value] of Object.entries(process.env)) if (typeof value === 'string') result[name] = value;
Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.
That is not a flaw by itself — but it is where things go wrong when it is not the job. We re-read this code on every release. Watch it and you hear from us the day another one appears.
This server runs on your own machine — install it with the package manager and the client starts it for you. Package name taken from the official registry entry.
claude mcp add umbriel -- npx -y umbriel
{
"mcpServers": {
"umbriel": {
"args": [
"-y",
"umbriel"
],
"command": "npx"
}
}
}
[mcp_servers.umbriel]
command = "npx"
args = ["-y", "umbriel"]
{
"mcpServers": {
"umbriel": {
"args": [
"-y",
"umbriel"
],
"command": "npx"
}
}
}
{
"mcpServers": {
"umbriel": {
"args": [
"-y",
"umbriel"
],
"command": "npx"
}
}
}
This one needs environment variables set before it will start:
UMBRIEL_PROFILE (Capability profile: 'readonly' (inspect/read only), 'safe' (read + input + window — default), or 'full' (also os + fs tools).), UMBRIEL_OS (Set to '1' to allow the 'os' tools (launch_app/run_program/open_path, kill_process, manage_process, control_service, set_env, registry_get/registry_list/registry_set) AND the 'fs' tools (read_file/write_file/list_dir/stat_path/make_dir/copy_file/move_file/delete_file) regardless of profile.), UMBRIEL_ALLOW (Comma-separated tool names or categories to additionally allow on top of the profile.), UMBRIEL_DENY (Comma-separated tool names or categories to deny, overriding the profile and UMBRIEL_ALLOW.), UMBRIEL_CURSOR (Set to 'never' to forbid the real-cursor fallback entirely (strictly cursor-free). By default clicks/drags are cursor-free but fall back to the real hardware cursor when no cursor-free path exists.), UMBRIEL_FS_ROOT (Sandbox root directory that the fs-category file tools (read_file/write_file/list_dir/stat_path/make_dir/copy_file/move_file/delete_file) are confined to when fs tools are enabled; open_path's path argument is honored too.), UMBRIEL_TRACE (File path to journal every mutating tool call as JSON Lines (tool, category, masked args, ok, observation); secret-bearing args and values are redacted. Unset = no trace.), UMBRIEL_FFI_TRACE (File path to a flush-before-call diagnostic journal of every COM vcall (slot, this-pointer, arg count). Each line is written and flushed to the OS BEFORE the native call, so after an uncatchable crash the last line names the faulting call. Has per-call overhead; unset = off. For debugging native faults only.), UMBRIEL_AUDIT (Controls the default-on stderr audit of mutating tool calls. 'off' is the explicit opt-out (reported at startup); 'verbose' also audits reads.), UMBRIEL_REDACT (Credential masking (default on). 'off' opts out; a regex value overrides the built-in secret shapes masked in clipboard/env/registry reads and the trace journal.).
The author declared them in the registry entry; get the values from the project itself.
Run AI-driven web-app and API security scans (DAST) from Claude or any MCP agent. Windows.
See any site as it looks on a real iPhone, iPad or MacBook — and drive that window over MCP.
Playwright for the Windows desktop, from Bun — drive native GUIs via UI Automation + MCP.
Drive your real WhatsApp inbox from Claude — send, reply, label, assign, and triage via TimelinesAI.
Drive your real, logged-in Chrome from any MCP client — even from a remote machine, no inbound port.
Let AI agents inspect and drive running WPF apps: tree, bindings, screenshots, clicks, text input.
Drive an open 3DStreet scene tab from Claude Desktop or Claude Code via MCP tool calls.
Drive the iOS Simulator from an agent: read the screen, tap/type/swipe, replay flows in CI.
Answers built from our own checks of this server.