Feedthrough injects a lightweight bridge into any running page and exposes DOM state, console logs, and network requests as MCP tools — so any AI agent can inspect and drive your app in real time.
Demo
Describe a bug in plain language. The agent reproduces it in the running page, finds the cause, and fixes it — over MCP, without ever leaving the chat.
The name
Many physics and chemistry experiments run inside a sealed vacuum chamber, with all the air pumped out so nothing contaminates the experiment. The catch: you still need to control instruments inside the chamber and read their measurements, and the smallest air leak ruins the run. A feedthrough is the part that solves this — a specially engineered connector that carries electrical signals through the chamber wall while keeping the vacuum perfectly intact. You can't reach inside, but the feedthrough lets you observe and control what's happening in there anyway.
The parallel is exact. Feedthrough extracts runtime debug data from inside a running web app without disturbing it, and sends control signals back in — clicks, keystrokes, DOM queries — without breaking the execution environment.
Architecture
Three components, one WebSocket, zero changes to your production build.
The difference
Every other browser MCP tool controls the browser from the outside via Puppeteer or CDP. That means Chrome only, a separate controlled browser, and no access to your app's internals.
Launch a separate browser, drive it remotely, hope the public-facing DOM tells the whole story.
Runs in the same JavaScript context as your app, with full access to everything the page knows.
Quick start
No config files, no separate browser to launch.
// .claude/settings.json (Claude Code example) { "mcpServers": { "feedthrough": { "command": "npx", "args": ["@feedthrough/mcp"] } } }
Eight first-party adapters — Vite, Next.js, Nuxt, SvelteKit, Remix, webpack, Cypress, Playwright. Pick yours, drop in one line. Dev only, zero cost in production.
Install: npm ↗
// vite.config.ts import { feedthrough } from "@feedthrough/vite"; defineConfig({ plugins: [feedthrough()] });
Once the bridge connects you'll see:
[feedthrough] browser connected > Why is the counter showing the wrong number? Agent: I'll check the console logs and inspect the element. get_console_logs() → total: 1, 2, 3 inspect_element("#count") → textContent: "2, 4, 6" State increments by 2 but logs show +1. Bug on line 47: setViews(views + 2)
MCP Tools
Observe, interact, and preview live fixes — all the moment a browser connects.
Framework support
One adapter per framework — mechanism shown on each card. All published under @feedthrough on npm.
Don't see yours? Open an issue to suggest an adapter for an additional framework.