robert lora
August 20, 2026 at 10:56 PM

🌘 umbra

i wanted to drive my own signed-in chrome from whatever llm i'm working with, not just claude in chrome. so i built umbra. pair it with a local key, point any mcp client at it, and it runs your browser in the background without stealing focus. nothing leaves the machine.

it's two pieces: a chrome extension that owns every browser action, and a small companion server on your machine that hands a browser tool surface to your mcp client. they talk over a websocket on 127.0.0.1, signed with an hmac of a key you generate yourself. the extension does nothing until that pairing exists.

a local agent driving Chrome from the terminalMCP tool calls driving the browserUmbra runs in the background without stealing focuseach session owns only the tabs it openedlocal-only pairing on a key you generate

the short version

  • model-agnostic. any mcp client works. you're not tied to one assistant.
  • stays out of your way. actions run in the background, on owned tabs, without pulling chrome to the front.
  • owned tabs only. a tab you opened yourself can't be read, clicked, or closed by any agent.
  • local by construction. the only host it can reach is a program on your own machine.

get it

install the extension from the chrome web store, then pair the companion server with one command:

npx -y @umbra-mcp/server pair

that prints the config block to drop into your mcp client. the privacy details are here (short version: it collects nothing).