Webby is a standalone local bridge from browser-native WebMCP tools to any standards-compatible MCP client. It is a Phoenix/Elixir application designed to run continuously as a per-user background service.
The current implementation provides a loopback-only Phoenix service, SQLite WAL
persistence, atomic runtime discovery metadata, a JSON health endpoint, a local
LiveView dashboard, and durable browser-extension pairing over a versioned
Phoenix Channel protocol with single-use Ed25519 authentication challenges.
The unpacked Manifest V3 extension now scans already-permitted sites by default,
offers explicit broad all-tabs scanning with continuous disclosure, and records
sanitized WebMCP catalogs in the local discovery inbox. Discoveries can be
explicitly promoted into durable page registrations, which bind matching open
documents to live catalog sessions. The authenticated Streamable HTTP endpoint
at /mcp exposes one stable webby broker tool for inspecting status, browsers,
discoveries, registered pages, sessions, and current catalogs. Explicitly scoped
clients can invoke page.call; Webby pins each call to a browser, immutable Chrome
document ID, and catalog revision, propagates cancellation, bounds arguments,
results, and execution time, and stores metadata-only invocation audits.
Webby is independent software. It has no dependency on Labby or any other MCP gateway, and no particular MCP client receives privileged integration.
mise install
mise exec -- mix setup
mise exec -- mix phx.serverThe local dashboard is available at http://127.0.0.1:6477/ and health can be checked with:
curl --fail http://127.0.0.1:6477/healthRun the verification suite:
MIX_ENV=test mise exec -- mix test
MIX_ENV=test mise exec -- mix credo --strict
npm test --prefix extensionFor extension development, load the extension directory as an
unpacked Chrome extension, open its popup, set the loopback Webby URL if needed,
and submit a pairing request for approval in the local dashboard.
Build a production release:
MIX_ENV=prod mise exec -- mix assets.deploy
MIX_ENV=prod mise exec -- mix releaseProduction startup binds exclusively to 127.0.0.1:6477 unless WEBBY_PORT
selects a different loopback port. On first launch, Webby creates a stable,
owner-only signing secret under its platform configuration directory;
SECRET_KEY_BASE can override it for managed deployments.
Automatic retention runs hourly by default. It marks invocation audits left in
started state for more than 60 seconds as abandoned, retains invocation audits
and discoveries for 30 days, and retains closed document sessions and resolved
pairing requests for 7 days. Managed deployments can tune the positive-integer
settings below:
| Environment variable | Default | Unit or effect |
|---|---|---|
WEBBY_RETENTION_INTERVAL_MS |
3600000 |
Milliseconds between maintenance runs |
WEBBY_ABANDONED_AFTER_SECONDS |
60 |
Seconds before an incomplete invocation is reconciled |
WEBBY_INVOCATION_RETENTION_DAYS |
30 |
Days to retain completed invocation audits |
WEBBY_DISCOVERY_RETENTION_DAYS |
30 |
Days to retain stale discoveries |
WEBBY_SESSION_RETENTION_DAYS |
7 |
Days to retain closed document sessions |
WEBBY_PAIRING_RETENTION_DAYS |
7 |
Days to retain resolved pairing requests |
WEBBY_RETENTION_BATCH_SIZE |
500 |
Rows pruned per category and batch (maximum 5000) |
When a maintenance batch reaches that limit, Webby immediately runs another batch. It briefly yields after every ten batches, then resumes until the backlog is drained. This lets old rows drain promptly without allowing retention work to monopolize the application indefinitely.