Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OMNISNAP_PORTNoPort the bridge listens on. Must match the extension.8787
OMNISNAP_LOG_LEVELNoLog level: silent, error, warn, info, or debug.info
OMNISNAP_STATE_DIRNoDirectory where the pairing token lives.~/.omnisnap
OMNISNAP_PAIRING_TTL_MSNoHow long a pairing code lasts, in milliseconds.120000
OMNISNAP_CALL_TIMEOUT_MSNoPer-call timeout in milliseconds.30000
OMNISNAP_MAX_FRAME_BYTESNoMaximum size in bytes for any single message from the extension.25165824
OMNISNAP_MAX_IMAGE_BYTESNoMaximum image size in bytes. Past this a capture is refused rather than sent.8388608
OMNISNAP_CAPTURE_TIMEOUT_MSNoCapture timeout in milliseconds. Captures get longer.120000
OMNISNAP_MAX_CONCURRENT_CALLSNoMaximum number of calls in flight at once.6

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

OmniSnap reads the user's real, logged-in browser through a paired Chrome extension.

Reach for it when a question is about a page that actually exists: what it looks like now, which selectors a test should use, why it is slow, or what its design system is. It reads pages; it does not drive them, so it will not click or navigate.

Before acting on a page, call annotate_interactive: it returns a numbered screenshot plus a selector for each number, which is far more reliable than inferring a selector from markup. If a tool reports the extension is not paired, relay its instructions to the user verbatim.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
omnisnap_statusA

Reports whether the OmniSnap browser extension is paired with this server, and which tab is active. Call this first when any other OmniSnap tool fails, and to get pairing instructions.

list_tabsA

Lists the open browser tabs OmniSnap can act on, with their titles and URLs. Use it to find the right tab before capturing or collecting selectors.

capture_pageA

Takes a screenshot of the active tab and returns it as an image the model can see. Captures the full scrollable page by default, including pages that scroll inside a panel. Use it to check layout, verify a fix visually, or see what the user is describing.

capture_elementA

Screenshots a single element, given a CSS selector. Cheaper and far easier to reason about than a full page when the question is about one component.

annotate_interactiveA

Returns a screenshot with every interactive element outlined and numbered, plus a table mapping each number to its best selector and a stability score. This is the tool to use before acting on a page: look at the image, pick a number, then use that number's selector. Far more reliable than guessing a selector from the DOM.

collect_selectorsA

Given a description or a CSS hint, returns every selector that could reach the element, ranked by how likely it is to survive a redeploy and checked against the live page so you know whether it matches one element or several. Prefer the top result. A selector built on a generated class such as css-1x2y3z is scored down because it changes whenever the bundler runs.

get_page_objectB

Exports the selectors collected in the browser as a ready page object. The best selector differs per framework: Playwright can match a role and an accessible name, Selenium cannot and falls back to CSS or XPath for the same element, so always pass the framework you are actually writing for.

verify_selectorsA

Takes a list of selectors and reports, for each, how many elements it matches on the page now. Use it to find selectors that have rotted after a UI change, before a test run does.

get_diagnosticsA

Returns Web Vitals, failed and slow network requests, console errors, storage use and the exact browser environment for the active tab. This is measured in the user's real session, so it reflects their network, their extensions and their data, which a clean automated browser cannot show you.

get_design_tokensA

Extracts the design system the page actually uses: palette with contrast audit, type scale, radii, shadows and spacing. Use it to match a new component to an existing product, or to find accessibility problems in the live UI.

measure_accessibilityA

Audits the live page for contrast failures, missing accessible names, skipped heading levels and touch targets below the minimum size. Returns the offending elements with selectors.

inspect_elementA

Returns the box model, computed typography, colours and spacing for a single element. Use it when a design question needs numbers rather than a picture.

scroll_toA

Scrolls the page. Use it to see the rest of a page: annotate_interactive and the screenshots only cover what is on screen, and its "coverage" field says how much of the page that is. Scroll, then capture again. This moves the camera, not the hands: it cannot click, type or navigate.

await_user_selectionA

Arms the element picker in the browser and waits for the user to click the elements they mean, then returns them with ranked selectors. Use this instead of guessing when a page has several things that match the description ("the save button", "that broken card"), or when you cannot find what the user is describing. Asking costs one turn; picking the wrong element costs the whole task.

read_pageA

Returns the page's text and heading outline. Use this first when the question is what the page says rather than what it looks like: it costs a fortieth of a screenshot and a model reads a paragraph far more reliably than a picture of one. Reach for a capture when the question is visual.

propose_actionA

Proposes clicking an element or typing into a field. The extension outlines the element and asks the user to approve; nothing happens unless they do. Use it to reach states that only exist after an interaction: an open menu, a validation error, the next step of a form. That is where most defects are. The user may decline. If they do, do not retry: ask them what they want instead.

set_viewportA

Holds the page at a phone, tablet or desktop width, and leaves it there. Every tool afterwards, including the numbered map, the accessibility audit and the measurements, then answers about that width, which is how you find what is wrong at 375px rather than just noticing that something is. Call it with reset to give the page back. Chrome shows a debugging banner while this is held; that is Chrome, not the page.

set_color_schemeA

Shows the page as if the user preferred light or dark, without them changing anything. Dark mode is where contrast regressions hide, because it is the theme nobody screenshots. Use "auto" to hand it back.

hoverA

Puts the pointer on an element and returns a screenshot of what that reveals: dropdowns, tooltips, hover styling. These states cannot be reached any other way: a synthetic event fires the page handlers but leaves the CSS untouched, so this uses a real pointer move. Nothing is clicked.

focus_elementB

Focuses an element and returns a screenshot. Use it to check focus rings, which are the most commonly missing accessibility feature and are invisible in an ordinary capture.

watch_pageA

Watches the page for a number of seconds and reports the console errors, failed requests and layout shifts that happen during it. Every other tool here asks a question and gets an answer as of that instant; most of what goes wrong does not wait to be asked. Use it while the user reproduces something, or just after a change, when asking afterwards would find a page that looks fine.

capture_matrixA

Captures the full page at phone, tablet and desktop widths and returns them side by side in one image. Use it to check a responsive change in a single look, rather than three captures you have to hold in mind at once.

Prompts

Interactive templates invoked by user choice

NameDescription
write-testCollects stable selectors from the open page and writes a test against them.
file-bugTurns the live page and its diagnostics into a defect report.
audit-accessibilityChecks the live page against WCAG AA and reports what to fix.
extract-design-systemPulls the palette, type scale and spacing out of the live page.

Resources

Contextual data attached and managed by the client

NameDescription
latest-captureThe most recent screenshot taken in the browser, with its metadata.
selector-guideThe ranking OmniSnap applies and why, what makes a selector fragile, and how the right choice differs between Playwright, Selenium and Cypress. Read this before writing tests.
diagnostics-guideWhat the vitals thresholds mean, and the two mistakes that produce confidently wrong defect reports. Read this before writing one up.
bridge-helpInstall and pairing steps for the browser extension.

TDQS

A3.8/5.0

Scored across 22 tools

Disambiguation4/5

Tools mostly carve out distinct jobs—visual capture vs. text reading vs. inspection vs. selector discovery—and the descriptions clarify when to use which. There is residual overlap among the screenshot variants (capture_page, capture_element, capture_matrix), selector tools (collect_selectors, await_user_selection, annotate_interactive), and accessibility surfaces (get_design_tokens, measure_accessibility), so an agent could still pause.

Naming Consistency4/5

All tool names use snake_case and most follow a clear verb_noun or verb_object pattern such as capture_page, verify_selectors, and set_viewport. Minor exceptions like omnisnap_status and the bare hover keep it from being perfectly uniform, but the convention is predictable.

Tool Count3/5

At 22 tools, the surface is heavy for a browser-extension inspection server, though each tool maps to a real capability. Several could be consolidated or grouped, especially the capture variants and selector helpers, making this borderline in the 16–25 tool range.

Completeness4/5

The set covers status/tabs, visual and text capture, selector discovery and verification, design-token extraction, accessibility auditing, element inspection, and interactive state probing. Minor gaps remain around page navigation, raw DOM/HTML export, and richer interaction such as keypresses or select controls, but most browser-QA workflows are reachable.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues