Web navigation and verification for agents.
SnapSurf tells an agent what its last action changed: a compact semantic digest of the page, a typed diff after each action, and assertions over that exact diff. It runs locally as an MCP server or CLI with its own Chromium session.
What it does
browser_openreturns a compact semantic digest of the page with element ids.browser_verifyreturns a typed diff after each action: content, state, layout, clickability.browser_assertchecks that exact diff by its id, including changes beyond the displayed list.
Add it to your MCP client
{
"command": "npx",
"args": ["-y", "-p", "@zumer/snapsurf@latest", "snapsurf-mcp"]
}Requires Node.js 22 or newer. The first launch installs Playwright’s Chromium. The server uses its own browser session; it does not inherit your browser’s logins.
Use it
# terminal 1: the daemon
npx -y @zumer/snapsurf serve
# terminal 2: a local smoke check
npx -y @zumer/snapsurf open 'data:text/html,<h1>Local%20check</h1>'
npx -y @zumer/snapsurf assert '{"exists":"Local check"}'
npx -y @zumer/snapsurf stopWhere it fits
A semantic diff answers whether the observed page changed. It does not replace a pixel comparison against a saved visual baseline.
SnapSurf runs its own Chromium session with its own cookies and storage, so it cannot use your everyday browser’s sign-ins. Its observation code also works as an in-page library built on SnapDOM.
Bundles its own SnapDOM runtime; installing another SnapDOM version does not replace it.
Add it to your MCP clientPer-client snippetsUsage and API referenceThe loop and the rules for agents