Console Stream
FreeNot checkedEnables AI coding agents to access live console logs, errors, and network requests from web applications via a local WebSocket connection, without copying data
About
Enables AI coding agents to access live console logs, errors, and network requests from web applications via a local WebSocket connection, without copying data to chat.
README
Give AI coding agents (Claude Code, Codex CLI, Gemini CLI, etc.) live access to your web app's runtime — console logs, errors, network requests, and navigation events — without copy-pasting anything into chat.
Local-first. No cloud services, no telemetry, no external APIs.
How it works
Web App
│
Extension OR npm package
│
WebSocket
│
localhost
│
mobius-mcp
│
MCP
│
Claude Code / Codex / Gemini CLI
A browser client (extension or npm package) captures runtime events — console.*, uncaught errors, unhandled rejections, fetch/XHR calls, and navigation (including SPA route changes via pushState/replaceState/hash) — and streams them over a WebSocket to a local MCP server. The MCP server keeps a rolling in-memory history and exposes it to AI agents as MCP tools.
Packages
| Path | Description |
|---|---|
apps/mcp-server |
Node.js MCP server; WebSocket hub + MCP tool implementations |
apps/browser-extension |
Chromium extension that captures and streams browser events |
apps/npm-client |
mobius-client npm package for direct app integration |
packages/protocol |
Versioned event schema and message envelope (private, bundled into published packages) |
packages/capture-core |
Runtime hook patching shared by the extension and npm client (private, bundled) |
skill |
Agent skill describing when/how to use the MCP tools to debug a web app |
examples |
Example apps demonstrating integration |
Quick start
mobius-mcp is published on npm — no clone required to use it.
Register the MCP server with your agent. For Claude Code:
claude mcp add mobius-mcp -- npx -y mobius-mcpOr add it directly to your MCP client's config (Claude Code, Codex CLI, Gemini CLI, etc. all read a JSON config in this shape):
{ "mcpServers": { "mobius-mcp": { "command": "npx", "args": ["-y", "mobius-mcp"] } } }Stream your app's runtime into it, either via the browser extension (load unpacked from
apps/browser-extension/dist, see below), or by dropping the npm client into your app:npm install mobius-clientimport { startMobiusStream } from "mobius-client"; startMobiusStream();Ask your agent to check the tab's console/errors/network/navigation via the MCP tools below.
Developing this repo locally
npm install
npm run build
# start the MCP server from source instead of npx
npm run start --workspace=apps/mcp-server
Enabling capture (extension)
The extension never captures anything by default. Click its toolbar icon and hit "Enable tab" on the tab you want to debug — that's the one opt-in. Multiple tabs can be enabled independently. For dev servers you always want captured without clicking every time, add a rule (e.g. localhost:5173) on the extension's settings page (right-click the icon → Options) — matching tabs auto-enable on navigation.
MCP Tools
get_recent_logsget_recent_errorsget_network_requestsget_logs_sinceclear_logsget_connected_tabsget_capture_settings— which event categories (console/errors/network/navigation/dom) a connected tab is actively capturing, so an empty result from another tool can be distinguished from "that category is off"set_active_tabnavigate_to,switch_tab,reload_tab— browser control (extension only)list_tabs— every open tab, not just capture-enabled ones (requires an extension connected somewhere)get_job_status,get_job_result,cancel_job— for longer-running operations added in later stages (recordings, profiling)start_debug_session,end_debug_session— record a time-ordered timeline of console/network/navigation/DOM events instead of correlating separate snapshots by hand (single-tab, doesn't survive a full-page navigation)wait_for_console_error,wait_for_navigation,wait_for_request,wait_for_element— block (with timeout) until a condition occurs instead of pollingget_logs_sincein a looptake_screenshot,capture_full_page,capture_element— extension only, requireschrome.debugger(CDP)capture_dom,capture_accessibility_tree— extension only, requires CDPevaluate_js— run arbitrary JS in a tab and get the result; extension only, requires CDP, fully open (no read-only enforcement)get_response_body,export_har— extension only forget_response_body(requires CDP);export_harworks from stored network events for either client but never includes bodiesstart_cpu_profile,start_memory_profile— extension only, requires CDP, job-based (seeget_job_status/get_job_result)
CDP tools (marked "requires CDP" above) make Chrome show a persistent "being debugged" banner on the tab once used — the debugger attaches on first use and stays attached, it doesn't attach/detach per call. This is a Chrome-level indicator, not something the extension can suppress. start_cpu_profile/start_memory_profile durations are capped at 60s and best-effort beyond ~25-30s — Chrome can terminate an idle MV3 background service worker, which would cut a long profile short.
Client capabilities
Event ingestion (console/errors/network) is identical across both browser clients — the server can't tell them apart. Command capabilities are not: many later-stage features require Chrome DevTools Protocol access, which only the extension has. The protocol reports this via a capabilities field on connect, so commands a client can't support fail with a clear error instead of hanging.
| Capability | Browser extension | npm client (mobius-client) |
|---|---|---|
| Console/error/network/navigation event streaming | ✅ | ✅ |
get_recent_logs / get_recent_errors / get_network_requests / get_logs_since |
✅ | ✅ |
Multi-tab awareness (get_connected_tabs, set_active_tab, get_capture_settings) |
✅ | ✅ (one entry per app instance) |
| Opt-in capture (popup toggle / settings-page rules) | ✅ | n/a — capture starts as soon as startMobiusStream() runs |
Browser control (navigate_to, reload_tab, switch_tab) |
✅ | ❌ |
Debug sessions (start_debug_session/end_debug_session) |
✅ | ✅ (console/network/navigation event types only — no DOM mutations) |
| Screenshots, DOM/accessibility snapshots | ✅ (requires CDP) | ❌ |
| CPU/memory profiling | ✅ (requires CDP) | ❌ |
evaluate_js, network response bodies |
✅ (requires CDP) | ❌ |
| React/Redux/Zustand state, storage inspection | ❌ (planned) | ❌ (planned) |
See ROADMAP.md for what "planned" maps to by stage.
Design principles
- Local-first, zero cloud dependencies, zero telemetry
- Framework agnostic
- Extension and npm client emit an identical, versioned protocol — the server can't tell them apart
See PROJECT.md for the full design doc and ROADMAP.md for staged future work.
Contributing
Contributions are welcome. Please open an issue to discuss significant changes before submitting a PR. See CONTRIBUTING.md.
License
Installing Console Stream
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/Topman-14/mobius-mcpFAQ
Is Console Stream MCP free?
Yes, Console Stream MCP is free — one-click install via Unyly at no cost.
Does Console Stream need an API key?
No, Console Stream runs without API keys or environment variables.
Is Console Stream hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Console Stream in Claude Desktop, Claude Code or Cursor?
Open Console Stream on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Gmail
Read, send and search emails from Claude
by GoogleSlack
Send, search and summarize Slack messages
by SlackRunbear
No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
Discord Server
A community discord server dedicated to MCP by [Frank Fiegel](https://github.com/punkpeye)
Compare Console Stream with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All communication MCPs
