{"name":"io.github.frsorrentino/chrome-bridge","slug":"frsorrentino-chrome-bridge","title":null,"description":"Your real, logged-in Chrome as an MCP server: 59 token-efficient web-dev tools. ChromeOS included.","url":"https://mcp.market/server/frsorrentino-chrome-bridge","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":32,"stars":4,"forks":0,"downloads_week":117,"last_push_at":"2026-09-16T06:43:28.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/frsorrentino/chrome-bridge","website":null,"version":"1.17.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"chrome-bridge-mcp","version":"1.17.0","transport":{"type":"stdio"}}],"tools":[{"name":"assert","description":"Assert a page condition, polling until timeout: element exists/visible (optionally with count or containing text), text on page, tab url/title. Patterns: substring, or \"/…/\" for regex. Recorded flows replay it as a test.","write_action":false,"price_micros":0,"input_schema":null},{"name":"audit","description":"One-call page audit, pick the kinds: accessibility, keyboard (tab order and focus issues), SEO, security headers, broken links,","write_action":true,"price_micros":0,"input_schema":null},{"name":"click","description":"Click an element by CSS selector or by a ref (n1, n2…) from get_interactives or navigate. A real pointer sequence: it can submit,","write_action":false,"price_micros":0,"input_schema":null},{"name":"clipboard","description":"Read or write the system clipboard (text). Activates the tab first.","write_action":true,"price_micros":0,"input_schema":null},{"name":"cookie_audit","description":"Cookie and consent-banner audit: clears this site's cookies, reloads, records cookies and third-party requests BEFORE consent,","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_tab","description":"Open a new tab, optionally at a URL, and make it the implicit target of later commands in this session.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dismiss_overlays","description":"Dismiss cookie banners/modal overlays: OneTrust, Cookiebot, Usercentrics, then generic heuristic. Idempotent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"drag_and_drop","description":"Drag an element onto another. html5 = DragEvent+DataTransfer; pointer = pointer/mouse events (sortable libraries).","write_action":true,"price_micros":0,"input_schema":null},{"name":"element_screenshot","description":"Screenshot cropped to one element or to a viewport region (PNG), optionally enlarged. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"emulate_media","description":"Make the page believe it runs elsewhere, until reset or reload: prefers-color-scheme, prefers-reduced-motion, print mode,","write_action":false,"price_micros":0,"input_schema":null},{"name":"execute_js","description":"Run JavaScript in the page (MAIN world). Requires the extension's \"Allow user scripts\" toggle; errors explain setup if disabled.","write_action":true,"price_micros":0,"input_schema":null},{"name":"extract","description":"Read repeated non-tabular structures — product cards, list items, search results — as one record per item:","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_table","description":"Read a real <table> as JSON: thead cells become keys, each row an object. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_form","description":"Batch fill form fields with React-compatible events. Handles input, select, checkbox, radio, and textarea.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_setting","description":"Where is a setting in an unknown admin panel: follows the panel's menu links (same origin) until a page contains the keyword and","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_text","description":"Find text on the page: parent selector, context, visibility, position per match. Attaches nearby interactive elements (with refs for click/type_text/hover) for the first visible match.","write_action":false,"price_micros":0,"input_schema":null},{"name":"full_page_screenshot","description":"Full-page capture by scrolling: stitched segments of ~2 viewports (≤1568px), or one image per viewport with stitch=false.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_frames","description":"List frames (main + iframes) with frameId, parent, URL — for the frame_id parameter of DOM tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_interactives","description":"List actionable elements (buttons, links, inputs, [role], [onclick]) with ready-to-use CSS selector, label, position, flags. Prefer this over dumping HTML to discover selectors.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_info","description":"Get page metadata: meta tags, scripts, stylesheets, links, and forms","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_status","description":"Check bridge status: extension connection, server mode (primary/relay), port, version","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_storage","description":"Read localStorage, sessionStorage or cookies of the current origin (type=all for every one). Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tabs","description":"List every open tab with id, url, title, active flag and mine (created by this session). Read-only. Find a tab_id when the implicit","write_action":false,"price_micros":0,"input_schema":null},{"name":"handle_dialogs","description":"Auto-accept/dismiss future JS dialogs (alert/confirm/prompt), logging them. reset restores native dialogs and returns the log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"handoff","description":"Hand the browser to the user for what only a person can do — 2FA, CAPTCHA, login, a choice — and wait: a banner in the page shows your","write_action":false,"price_micros":0,"input_schema":null},{"name":"hover","description":"Hover over an element (mouseenter/mouseover), by CSS selector or ref.","write_action":false,"price_micros":0,"input_schema":null},{"name":"http_auth","description":"Set/clear credentials for HTTP Basic/Digest auth dialogs (browser-wide, in-memory only).","write_action":false,"price_micros":0,"input_schema":null},{"name":"http_request","description":"HTTP request sent from the browser, with the logged-in user's cookies: fetches what a server-side request gets a login page for","write_action":false,"price_micros":0,"input_schema":null},{"name":"inject_css","description":"Inject a CSS rule into the page. Stays until the next navigation or reload, and re-injecting the same id","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage_downloads","description":"List downloads, start one, or wait for the newest to finish. Files land in the browser Downloads folder, not on the server.","write_action":false,"price_micros":0,"input_schema":null},{"name":"measure_spacing","description":"Measure the gap, overlap and distance in CSS pixels between two elements, with their margins and paddings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"modify_dom","description":"Change an element in the live DOM: setAttribute, removeAttribute, addClass, removeClass, setStyle,","write_action":false,"price_micros":0,"input_schema":null},{"name":"monitor_network","description":"Monitor network requests. source=page: XHR/fetch hook (installed on first call); source=browser: all requests incl. static assets; source=websocket: connections and messages. format=har exports HAR 1.2.","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_tab","description":"Move an existing tab into another window (chrome.tabs.move), keeping id, history and page state; works on chrome-untrusted://","write_action":false,"price_micros":0,"input_schema":null},{"name":"navigate","description":"Navigate a Chrome tab to a URL. Returns a preview of interactive elements with refs usable in click/type_text/hover.","write_action":false,"price_micros":0,"input_schema":null},{"name":"network_rules","description":"Network interception, browser-wide, survives reloads until cleared: block, redirect, set/remove headers, stub a synthetic body, or record real API responses and replay them with forced errors/latency (local helper; from HTTPS pages the stub host must be trusted).","write_action":true,"price_micros":0,"input_schema":null},{"name":"press_key","description":"Send a key to the focused element (or to selector, focusing it first) as a real keydown/keypress/keyup","write_action":true,"price_micros":0,"input_schema":null},{"name":"query_dom","description":"Query DOM elements by CSS selector, returning structure, attributes, bounding rect, and computed styles.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_console","description":"Read console messages captured since page load, incl. uncaught errors and unhandled rejections.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_form","description":"Read a form as the user filled it — label, type, value, checked/selected, required-but-empty, browser validity — to check it against the","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_page","description":"Read the page as text (default), markdown, raw HTML, or accessibility tree. Read-only. markdown keeps headings, links and","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_page","description":"Save the full page (DOM, styles, images) as an MHTML archive file on the server filesystem.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot","description":"Screenshot of the visible viewport only (PNG), at the current scroll position, or one per viewport preset with presets. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_diff","description":"Visual regression: save a named baseline (viewport, element, or a PNG such as the design mockup) and compare later — changed-pixel % and a red-highlighted diff; or compare_urls: production vs staging in this tab, pixels plus text diff, logged-in pages included. Baselines are in-memory (lost on service worker restart).","write_action":false,"price_micros":0,"input_schema":null},{"name":"scroll","description":"Scroll. action=to: once to element/coordinates; action=until: repeatedly until element visible, network idle, or no new content (infinite scroll).","write_action":false,"price_micros":0,"input_schema":null},{"name":"session_fixture","description":"Snapshot localStorage, sessionStorage and cookies of the current origin into a named fixture (a logged-in state, usually),","write_action":false,"price_micros":0,"input_schema":null},{"name":"session_record","description":"Record the commands of this session as a replayable jsonl (chrome-bridge replay --file <path>); observe what the user does in a tab (\"watch how I do it\") into the same format plus a readable procedure, never recording sensitive values; export a recording as a Playwright test for CI. Replays target the tab they navigate.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_geolocation","description":"Override navigator.geolocation with fixed coordinates (page-level patch). reset restores native.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_storage","description":"Write, delete or clear a localStorage/sessionStorage key, or a cookie with its path, domain and expiry.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tab_action","description":"Tab lifecycle: close, activate, reload, back, forward, discard, mute, duplicate, close_session (only tabs this session created).","write_action":false,"price_micros":0,"input_schema":null},{"name":"tile_windows","description":"Tile Chrome windows over one monitor in equal parts with no gap. Only Chrome windows. The monitor is the one of a","write_action":false,"price_micros":0,"input_schema":null},{"name":"track_events","description":"Decode the tracking beacons the page fired (GA4, Meta Pixel, Google Ads, TikTok, LinkedIn, Pinterest, Microsoft Ads, GTM, Hotjar, Clarity)","write_action":false,"price_micros":0,"input_schema":null},{"name":"type_text","description":"Put text into an input, textarea or contenteditable, by selector or ref. Replaces the whole value through the","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_file","description":"Set a file on input[type=file] from the server filesystem via DataTransfer (max 10MB).","write_action":true,"price_micros":0,"input_schema":null},{"name":"viewport_resize","description":"Resize the Chrome **window** to a preset (mobile 375x812, tablet 768x1024, desktop 1440x900) or explicit dimensions;","write_action":false,"price_micros":0,"input_schema":null},{"name":"wait_for","description":"Block until a condition holds: element, text, function (JS expression; needs the \"Allow user scripts\" toggle),","write_action":false,"price_micros":0,"input_schema":null},{"name":"watch","description":"Keep watching a page in the background — \"tell me when the pipeline is green / the Approve button appears / this number changes\" —","write_action":false,"price_micros":0,"input_schema":null},{"name":"watch_dom","description":"Watch DOM mutations (MutationObserver). First call installs the watcher; later calls read accumulated mutations.","write_action":false,"price_micros":0,"input_schema":null},{"name":"window_layout","description":"Save the current window arrangement under a name, restore, list or delete. save overwrites silently. Window ids do not survive","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-19T20:15:57.400Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:15:57.380Z","components":{"code":{"score":20,"max":25,"notes":["40 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"extension/service-worker.js: … let fn; try { fn = new Function(`return (${userCode});`); } catch …"}],"inputs":{"packages":[{"registryType":"npm","identifier":"chrome-bridge-mcp","version":"1.17.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-09-11T08:27:04.651Z","repositoryUrl":"git+https://github.com/frsorrentino/chrome-bridge.git","weeklyDownloads":117}],"repo":{"found":true,"owner":"frsorrentino","repo":"chrome-bridge","archived":false,"pushedAt":"2026-09-16T06:43:28Z","stars":4,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/149787678?v=4","ownerCreatedAt":"2023-11-03T11:02:40Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/149787678?v=4&s=128","source":"registry"},"presence":{"stars":4,"forks":0,"downloadsWeek":117,"license":"MIT","lastPushAt":"2026-09-16T06:43:28.000Z","score":32}}}},"grade_history":[],"reviews":[]}