The signed-in tab, for your AI client
omnisnap-mcp reads the Chrome window you already have open, including a page behind SSO, and returns selectors ranked to survive the next redeploy. It does not drive the browser. The one tool that can click asks you first.
- 01 Add the server to your AI client. The same command works everywhere.
- 02 In the extension, turn on Connect to AI and type the six-digit code your client shows. Once.
Needs OmniSnap AI Studio 1.9 or later, Chrome 116 or newer, and Node.js 18 or newer. Package: npm. Source: GitHub.
{
"mcpServers": {
"omnisnap": {
"command": "npx",
"args": ["-y", "omnisnap-mcp"]
}
}
}
Where the config goes
Anything that speaks MCP over stdio takes the same command. These are the usual files.
| Client | Where it goes |
|---|---|
| Claude Code | claude mcp add omnisnap -- npx -y omnisnap-mcp |
| Claude Desktop |
claude_desktop_config.json in Application Support on macOS, or
%APPDATA%\Claude\ on Windows.
|
| Cursor | ~/.cursor/mcp.json, or .cursor/mcp.json in a project. |
| VS Code | .vscode/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | cline_mcp_settings.json, from the MCP Servers pane. |
| Codex | ~/.codex/config.toml |
| Goose | Settings, Extensions, Add, as a stdio command. |
Twenty-two tools, three agreements
The tier is who has to agree. Reading needs no extra permission. Moving the camera changes what is on screen. Acting waits for a real click from you.
It reads
| Tool | What comes back |
|---|---|
| omnisnap_status | Whether the bridge is paired, and how to fix it if not. |
| annotate_interactive | A numbered screenshot, a selector for each number, and how much of the page you are seeing. |
| collect_selectors | Every selector for an element, ranked, with the reason, and counted on the live page. |
| get_page_object | A page object for Playwright, Selenium, Cypress or WebdriverIO. |
| verify_selectors | Which of your existing selectors have rotted. |
| read_page | The page as text, with a heading outline. |
| capture_page | A screenshot of the page. |
| capture_element | A screenshot of one element. |
| capture_matrix | The page at three widths, side by side. |
| get_diagnostics | Web Vitals, failed requests, console errors and storage. |
| watch_page | Waits, then reports the errors, failed requests and layout shifts that happened. |
| get_design_tokens | Palette with a contrast audit, type scale and spacing. |
| measure_accessibility | WCAG failures, with selectors. |
| inspect_element | Box model and computed styles for one element. |
| list_tabs | Which tabs can be read. |
It moves the camera
These change what is on screen, not what the page contains. One capture covers one viewport. On a long page that is a few percent of it.
| Tool | What it does |
|---|---|
| scroll_to | See the rest of the page. |
| set_viewport | Hold the page at 375, 768 or 1440, so later tools answer about that width. |
| set_color_scheme | Light or dark. Dark mode is where contrast regressions hide. |
| hover | Photograph a dropdown or a tooltip. An ordinary capture never sees them. |
| focus_element | Photograph a focus ring. |
It asks before it acts
| Tool | What it does |
|---|---|
| propose_action | Proposes a click or a keystroke. The extension outlines the element on the page. Nothing happens unless you approve. |
| await_user_selection | You click the element you mean. The client gets it, with ranked selectors. |
After annotate_interactive numbers an element, the other tools accept
element: 5 instead of a selector you would otherwise retype.
Four ways to start
Slash commands the server ships, so the client does not have to invent the job.
- /write-test
- /file-bug
- /audit-accessibility
- /extract-design-system
Off until you turn it on
The bridge binds to localhost. No web page can reach it. Pairing needs a code you carry across by hand. If your client is not showing a code, type nothing.
0 outside reach
The server listens on 127.0.0.1. A page in the browser cannot open that socket.
6 digits, by hand
You read the code from your AI client and type it into the extension. Single use.
A click you make
Approve accepts a real click from you. A script on the page cannot forge that.
No telemetry
No account and no remote config. The pairing token stays in a file on your machine.
The bridge stays on your machine. The AI client you pair is a different program. If that client uses a cloud model, the page you asked it to look at reaches that model. Leave Connect to AI off and nothing about the extension changes.
npx omnisnap-mcp --doctor
--doctor checks the port, then waits and prints the code to type. The
extension guide on the
homepage shows the same pairing in the product. Capture help lives
on Support.
The extension comes first
The server has nothing to read until OmniSnap AI Studio is installed and Connect to AI is on. The shortcut is Alt + Shift + S.