Labsco
scottconfusedgorilla logo

sncro.net

from scottconfusedgorilla

Live browser debugging for AI assistants β€” DOM, console, network via MCP.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeQuick setup

sncro-relay

Open-source components of sncro β€” the MCP relay, the browser-side agent, and the framework plugins that let AI coding assistants inspect a live browser.

What this repo contains

PathWhat
relay/FastAPI app that exposes an MCP server plus long-poll endpoints for agent.js
relay/static/agent.jsBrowser-side script injected by the middleware; pushes console + DOM data to the relay
middleware/sncro_middleware.pyFastAPI / Starlette plugin β€” drop-in middleware for FastAPI apps
middleware/sncro_flask.pyFlask plugin β€” drop-in middleware for Flask apps
trysncro/try.sncro.net β€” a deliberately-broken demo app for exercising sncro end-to-end

How it works

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    MCP     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   long-poll   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Claude Code  │──tools────▢│  relay   │◀──────────────│  agent.js   β”‚
 β”‚ (or other    β”‚            β”‚ (relay/) β”‚   snapshots   β”‚ (injected   β”‚
 β”‚  MCP client) │◀──results──│          │──────────────▢│  by plugin) β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                              β–²
                                                              β”‚ same-origin
                                                              β”‚ cookies
                                                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                       β”‚  your app   β”‚
                                                       β”‚ (plugin is  β”‚
                                                       β”‚  installed) β”‚
                                                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  1. Claude calls create_session (MCP tool) β†’ relay returns a 9-digit session key + URL
  2. User visits the URL in the browser where their app is running β†’ confirms via "Allow sncro debugging?"
  3. The plugin drops a cookie, agent.js is injected into subsequent HTML responses on that origin
  4. agent.js pushes baseline data (console, errors) and long-polls for on-demand queries (query_element, get_page_snapshot, etc.)

Using sncro

Most users don't need to run the relay yourself β€” the hosted version at relay.sncro.net is free-tier friendly. Register your project at sncro.net and grab your project key.

FastAPI: drop middleware/sncro_middleware.py into your project, then:

from middleware.sncro_middleware import SncroMiddleware, sncro_routes

app = FastAPI(debug=True)  # sncro only loads when debug=True
if app.debug:
    app.include_router(sncro_routes)
    app.add_middleware(SncroMiddleware, relay_url="https://relay.sncro.net")

Flask: drop middleware/sncro_flask.py into your project, then:

from sncro_flask import init_sncro

app = Flask(__name__)
if app.debug:
    init_sncro(app, relay_url="https://relay.sncro.net")

Both middlewares only activate in debug mode β€” zero overhead in production.

Contributing

We love new framework plugins. CONTRIBUTING.md has the full spec for what a plugin must do β€” cookies, routes, security headers β€” plus the test template. Django, Rails, Express, Next.js, ASP.NET, Go β€” all welcome.

Bug reports and security issues: see SECURITY.md.

License

MIT. See LICENSE.

The dashboard at sncro.net (project management, billing, admin) lives in a separate proprietary repo.