Skip to content

Repository files navigation

Webby

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.

Development

mise install
mise exec -- mix setup
mise exec -- mix phx.server

The 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/health

Run the verification suite:

MIX_ENV=test mise exec -- mix test
MIX_ENV=test mise exec -- mix credo --strict
npm test --prefix extension

For 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 release

Production 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.

Design

About

Local bridge from browser-native WebMCP tools to any MCP client

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages