Atlas / MCP servers / alexis14kl / browser-ipc-cdp

browser-ipc-cdpBLOCK

mcp/alexis14kl/browser-ipc-cdp

browser-ipc-cdp — Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinámico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automáticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks

Verdict
BLOCK
Grade
F
Trust score
46 /100
Exposed tools
103 72r · 22w · 9d
Transport
stdio
License
MIT
Stars
3
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](#) [](#) [](#) [](#) [](https://www.npmjs.com/package/browser-ipc-cdp) [](LICENSE)

Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinamico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automaticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks de registry, sin configuracion manual.

npm i browser-ipc-cdp
npx browser-ipc-cdp

Despues /mcp en Claude Code y listo. El wrapper resuelve el puerto dinamico solo, no hay que reescribir .mcp.json cuando cambia.

Novedades

v3.15.0 — el navegador ya no se queda "sin internet"

Si alguna vez, usando el MCP, una pestaña se quedaba a medio cargar (sin error en consola, sin nada en el log) y parecia que Brave habia perdido internet: eso era un bug, y esta arreglado. Actualiza con:

npx -y browser-ipc-cdp@latest    # y reconecta con /mcp

Eran dos causas, las dos en la intercepcion de requests (setup_request_interception, mock_api, block_resources, capture_payloads, add_auth_header, redirect_to_local, throttle_api):

  1. Requests pausadas que nadie reanudaba. Al activar la intercepcion, el navegador puede mandar la confirmacion y la primera rafaga de requests pausadas juntas; el manejador todavia no estaba escuchando y esas requests se quedaban esperando para siempre. Era intermitente porque dependia del timing de la red local. → El manejador ahora se registra antes de activar la inte
Read from source at commit 3577593b4a17OBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add browser-ipc-cdp -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "browser-ipc-cdp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (103)

72 read · 22 write · 9 destructive. Blast radius: 9 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add_auth_headerwriteInject an Authorization (or any) header into matching requests in flight. Authenticate without touching code.
analyze_network_waterfallreadAnalyze the page resource waterfall using PerformanceResourceTiming API. Detects mixed content (HTTP on HTTPS pages), slow resources, cross-origin requests and connection protocol breakdown. No monitoring session needed.
block_resourcesdestructiveBlock resource categories to speed up pages or remove noise. Categories: images, fonts, analytics, ads, scripts, styles, media.
block_urlsreadBlock requests matching URL patterns. Pass empty array to unblock all.
bypass_cspwriteEnable or disable Chrome\
capture_payloadswriteCapture request payloads (POST body, headers) for matching URLs without altering them. Call get_intercepted_requests to read captured data.
clear_browser_cachedestructiveClear the browser HTTP cache. Useful before performance tests or to force fresh resource loads.
clear_request_interceptiondestructiveStop request interception and remove all active rules.
clear_storagedestructiveClears localStorage, sessionStorage, or both on the current page.
clickreadClicks on the provided element
click_atreadClicks at the provided coordinates
click_by_textreadEncuentra un elemento por su texto VISIBLE y hace click en UNA sola llamada (sin snapshot ni uid). Hace scroll al elemento y dibuja el overlay del cursor de la IA. Ideal para ahorrar tokens y round-trips.
close_heapsnapshotreadCloses a previously loaded memory heapsnapshot, freeing its memory.
close_pagereadCloses the page by its index. The last open page cannot be closed.
compare_heapsnapshotsreadLoads two memory heapsnapshots and returns the comparison. If classIndex is provided, returns detailed diff for that class, otherwise returns summary diff.
delete_cookiesdestructiveDeletes cookies by name (optionally filtered by url/domain/path).
detect_third_party_scriptsreadIdentify all third-party scripts, iframes and stylesheets on the current page. Classifies known services (Analytics, CDN, Ads, Tracking) and flags unknown third parties — useful for supply chain attack surface mapping.
dragreadDrag an element onto another element
emulatereadEmulates various features on the selected page.
emulate_networkreadThrottle or simulate network conditions (offline, 3G, etc.) for the current page.
evaluatereadEvaluates a JavaScript script
evaluate_in_framereadEvaluates a JavaScript expression inside a specific iframe. Get frameId with get_frames first.
evaluate_scriptreadEvaluate a JavaScript function inside the currently selected page${cliArgs?.categoryExtensions ?
execute_3p_developer_toolwriteExecutes a tool exposed by the page.
execute_webmcp_toolwriteExecutes a WebMCP tool exposed by the page.
fillreadType text into an input, text area or select an option from a <select> element.
fill_by_labelreadRellena campos de formulario por su ETIQUETA visible (o placeholder/aria-label/name), sin snapshot ni uid. Acepta un campo (
fill_formreadFill out multiple form elements (inputs, selects, checkboxes, radios) at once. ALWAYS prefer this tool over multiple individual
find_by_textreadLocaliza elementos por su texto VISIBLE sin un snapshot completo. Barato en tokens: devuelve solo las coincidencias (texto, tag, coordenadas de click). Prefiérelo a take_snapshot para ubicar un elemento concreto.
get_accessibility_treereadReturns the accessibility tree of the current page. Useful for understanding page structure and finding interactive elements.
get_console_entryreadGet a specific console message by index from the monitor_console buffer.
get_console_messagereadGets a console message by its ID. You can get all messages by calling ${LIST_CONSOLE_MESSAGES_TOOL_NAME}.
get_cookiesreadReturns cookies for the current page or filtered by URLs. Uses CDP Network.getCookies which operates BELOW the JS sandbox — returns ALL cookies including HttpOnly (inaccessible to document.cookie). Useful for session token extraction in security audits.
get_dom_elementreadQuery DOM elements by CSS selector. Returns attributes, text content, and outer HTML.
get_framesreadReturns the frame tree of the current page (main frame + all iframes) with id, url, name and depth.
get_heapsnapshot_class_nodesreadLoads a memory heapsnapshot and returns instances of a specific class with their IDs.
get_heapsnapshot_detailsreadLoads a memory heapsnapshot and returns all available information including statistics, static data, and aggregated node information. Supports pagination for aggregates.
get_heapsnapshot_dominatorsreadLoads a memory heapsnapshot and returns the dominator chain for a specific node ID. This helps to identify which objects are keeping the target node alive.
get_heapsnapshot_duplicate_stringsreadLoads a memory heapsnapshot and returns duplicate strings grouped by their value.
get_heapsnapshot_edgesreadLoads a memory heapsnapshot and returns outgoing edges (references) for a specific node ID.
get_heapsnapshot_retainersreadLoads a memory heapsnapshot and returns retainers for a specific node ID.
get_heapsnapshot_retaining_pathsreadLoads a memory heapsnapshot and returns retaining paths for a specific node ID. This helps to understand why a node is not being garbage collected.
get_heapsnapshot_summaryreadLoads a memory heapsnapshot and returns snapshot summary stats.
get_indexed_db_datareadRead records from an IndexedDB object store.
get_intercepted_requestsreadReturns all requests captured since interception was last started.
get_local_storagereadReturns localStorage entries of the current page. Get all or a specific key.
get_network_requestreadGets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel.
get_request_bodyreadGet full details of a specific network request including request/response headers, POST body and response body. Pass a URL substring or the requestId from monitor_network.
get_session_storagereadReturns sessionStorage entries of the current page. Get all or a specific key.
get_tab_idreadGet the tab ID of the page
grant_permissionsdestructiveGrant or reset browser permissions for an origin (geolocation, camera, microphone, notifications, etc.).
handle_dialogreadIf a browser dialog was opened, use this command to handle it
hoverreadHover over the provided element
ignore_cert_errorsreadIgnore or restore HTTPS certificate errors (useful for testing self-signed certs).
inject_errordestructiveForce an HTTP error response on matching requests. Ideal for chaos/resilience testing.
install_extensionwriteInstalls a Chrome extension from the given path.
lighthouse_auditreadGet Lighthouse score and reports for accessibility, SEO, best practices, and agentic browsing. This excludes performance. For performance audits, run ${startTrace.name}
list_3p_developer_toolsreadLists all third-party developer tools the page exposes for providing runtime information. Third-party developer tools can be called via the
list_extensionsreadLists all the Chrome extensions installed in the browser. This includes their name, ID, version, and enabled status.
list_indexed_dbreadList all IndexedDB databases and their object stores for the current page origin.
list_network_requestsreadList all requests for the currently selected page since the last navigation.
list_pagesreadGet a list of pages${args?.categoryExtensions ?
list_webmcp_toolsreadLists all WebMCP tools the page exposes.
mock_apireadReturn a synthetic JSON response for a URL pattern. Test UI without a real backend.
monitor_consolereadList browser console messages captured via persistent CDP session (log, warn, error, info, debug). Distinct from list_console_messages — this uses a live WebSocket session and accumulates across navigations. Auto-starts on first call.
monitor_networkreadList all captured network requests via persistent CDP session (passive, no interception). Distinct from list_network_requests — accumulates across navigations. Shows URL, method, status, type, size, duration. Auto-starts on first call.
navigatereadLoads a URL
navigate_pagereadGo to a URL, or back, forward, or reload. Use project URL if not specified otherwise.
new_pagereadOpen a new tab and load a URL. Use project URL if not specified otherwise.
performance_analyze_insightreadProvides more detailed information on a specific Performance Insight of an insight set that was highlighted in the results of a trace recording.
performance_start_tracewriteStart a performance trace on the selected webpage. Use to find frontend performance issues, Core Web Vitals (LCP, INP, CLS), and improve page load speed.
performance_stop_tracewriteStop the active performance trace recording on the selected webpage.
press_keyreadPress a key or key combination. Use this when other input methods like fill() cannot be used (e.g., keyboard shortcuts, navigation keys, or special key combinations).
print_to_pdfreadExports the current page as a PDF file and saves it to disk.
redirect_to_localreadRedirect API calls from a production domain to a local dev server. Test prod frontend against local backend.
reload_extensionreadReloads an unpacked Chrome extension by its ID.
resize_pagereadResizes the selected page
screencast_startwriteStarts recording a screencast (video) of the selected page in specified format.
screencast_stopwriteStops the active screencast recording on the selected page.
screenshotreadTakes a screenshot
scroll_toreadScroll the page to a position or element. Supports smooth and instant behavior.
security_audit_headersreadAudit HTTP security headers of the current page (CSP, HSTS, X-Frame-Options, CORS, etc.). Grades each header A-F and lists misconfigurations. Useful for defensive audits and demonstrating header-based vulnerabilities.
select_pagereadSelect a page as a context for future tool calls.
set_cookiewriteSets a cookie on the current page.
set_download_pathwriteControl file download behavior: allow (with path), deny, or default.
set_extra_headerswriteAdd extra HTTP headers to every request made by the page. Pass empty object to clear. Simpler alternative to add_auth_header when you need persistent headers without interception.
set_geolocationdestructiveOverride geolocation for the current page. Omit params to clear override.
set_local_storagewriteSets a localStorage entry on the current page.
set_session_storagewriteSets a sessionStorage entry on the current page.
spoof_fingerprintreadMulti-layer browser fingerprint spoofing: patches navigator.userAgent (HTTP headers + JS), platform, vendor, language, screen dimensions, devicePixelRatio and WebGL renderer. Presets: mobile-android, mobile-ios, desktop-windows, desktop-mac, desktop-linux. Use restore=true to reset all overrides.
start_css_coveragewriteStart collecting CSS rule usage. Run actions on the page, then call stop_css_coverage to get unused rules.
start_js_coveragewriteStart collecting JavaScript code coverage. Run actions on the page, then call stop_js_coverage to get results.
stealth_checkreadDetect browser automation fingerprints that anti-bot systems use to identify CDP/Playwright/Puppeteer/Selenium sessions. Reports exposed signals and rates overall detectability risk.
stop_css_coveragewriteStop CSS coverage and return unused rules. Shows which CSS selectors were never matched.
stop_js_coveragewriteStop JS coverage and return results showing which scripts and functions were executed.
take_heapsnapshotreadCapture a heap snapshot of the currently selected page. Use to analyze the memory distribution of JavaScript objects and debug memory leaks.
take_screenshotreadTake a screenshot of the page or element.
throttle_apiwriteAdd artificial latency to specific API requests. Test loading states, skeleton screens, and timeout handling.
trigger_extension_actionwriteTriggers the default action of an extension by its ID.
type_textreadType text using keyboard into a previously focused input
uninstall_extensiondestructiveUninstalls a Chrome extension by its ID.
upload_filewriteUpload a file through a provided element.
wait_forreadWait for the specified text to appear on the selected page.
04

Trust audit

BLOCKgrade F · trust 46/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (13 observation(s))
Network
declared (4 observation(s))
Shell
declared (11 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

CRITICALObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
src/tools/security.js:1182
atob( ... 'eval(
Why it matters. decodes a payload and executes it
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-formatter-worker.js:8377
eval(val) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-heap-snapshot-worker.js:824
eval(val) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/tools/security.js:490
description: 'Enable or disable Chrome\'s CSP enforcement for the current page via Page.setBypassCSP. When enabled, all Content-Security-Policy directives (script-src, connect-src, etc.) are ignored —
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/tools/security.js:500
description: 'After toggling, inject a canary eval() to confirm bypass is active. Default: true.',
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/tools/security.js:1181
{ rx: /eval\s*\(/g,                    label: 'eval()',           weight: 3 },
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
block_resources, clear_browser_cache, clear_request_interception, clear_storage, delete_cookies, grant_permissions, inject_error, set_geolocation, uninstall_extension
Why it matters. 9 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
tests/cursor-overlay.test.js:42
const accept = crypto.createHash('sha1')
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
tests/cursor-overlay.test.js:175
const accept = crypto.createHash('sha1')
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
node_modules/chrome-devtools-mcp/build/src/telemetry/watchdog/ClearcutSender.js:7
import { logger } from '../../utils/logger.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
node_modules/chrome-devtools-mcp/build/src/telemetry/watchdog/main.js:9
import { logger, flushLogs, saveLogsToFile } from '../../utils/logger.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-formatter-worker.js:518
{ mod(require("../../lib/codemirror")); }
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-formatter-worker.js:520
{ define(["../../lib/codemirror"], mod); }
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-formatter-worker.js:584
mod(require("../../lib/codemirror"));
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:180
chrome-devtools-mcp ──> http://127.0.0.1:9333 (proxy, puerto FIJO)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:273
CDP URL:    http://127.0.0.1:58553
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:279
http://127.0.0.1:{PUERTO}/json/version   → Info del navegador
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:280
http://127.0.0.1:{PUERTO}/json/list      → Pestanas abiertas
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:920
| MCP "brave" no conecta | Verificar el proxy: `curl http://127.0.0.1:9333/json/version`. Si responde 502, el navegador no tiene CDP activo: relanzar con `npx browser-ipc-cdp` o dejar que el auto-laun
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-formatter-worker.js:10016
static fromHex(hex, text) {
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/chrome-devtools-mcp/build/src/third_party/devtools-heap-snapshot-worker.js:2463
static fromHex(hex, text) {
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/tools/security.js:1182
{ rx: /atob\s*\(/g,                    label: 'atob()',           weight: 3 },
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/chrome-devtools-mcp/package.json
@eslint/js, @google/genai, @rollup/plugin-commonjs, @rollup/plugin-json, @rollup/plugin-node-resolve, @stylistic/eslint-plugin, @blackwell-systems/gcf, @toon-format/toon
Why it matters. 27 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
chrome-devtools-mcp
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 3577593b4a17full audit observations/trust-audit/mcp-server/alexis14kl__browser-ipc-cdp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-113577593b4a17BLOCKF46first audit
06

Questions

What is the browser-ipc-cdp MCP server?

browser-ipc-cdp — Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinámico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automáticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks

What tools does browser-ipc-cdp expose?

103 in total: 72 read-only, 22 that write, and 9 that can delete or overwrite (block_resources, clear_browser_cache, clear_request_interception, clear_storage, delete_cookies). Every one is listed on this page with its risk.

Is browser-ipc-cdp safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (46/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 9 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does browser-ipc-cdp need?

No credential environment variables were found in its source, so it appears to need none.

How does browser-ipc-cdp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as browser-ipc-cdp at 3.15.0.

How current is this page?

The grade is for one exact copy of the source (3577593b4a17), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement