Because the script is injected same-origin by your own middleware, it inherits the cookies you are already logged in with — which is exactly the state a bug usually lives in, and the state a headless browser has to be laboriously talked into. The trade is that it only works on apps you can add middleware to, and only in debug mode; there is no overhead in production because the plugin never loads there.
A relay that connects an MCP client to a live browser session on your own app. A small middleware injects a script into your pages in debug mode; the script pushes console output and DOM data to the relay, and the assistant reads it through MCP tools.
- `create_session` returns a 9-digit session key and a URL; you open it in the browser where your app is running and confirm the prompt
- `get_page_snapshot` and `query_element` pull page state on demand, while console output and errors are pushed as baseline data
- Drop-in middleware for FastAPI and Starlette, and a separate plugin for Flask
- The browser side runs inside your own origin, so it sees the page as your logged-in session sees it
A hosted relay at `https://relay.sncro.net/tools/mcp` over streamable HTTP, at version 0.9.4 — most people never run the relay themselves. Register the project at sncro.net to get a project key. On the app side, add the middleware file to your project and enable it behind your debug flag: FastAPI takes `SncroMiddleware` plus `sncro_routes`, Flask calls `init_sncro` with the app and the relay URL. Both activate only in debug mode.
