Skip to content
Agentmart
Submit a tool

NexusBrowser

Your real Chrome, driven in background tabs.

Connector by pironjulien · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 4
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/pironjulien-nexus-browser

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Your real Chrome, driven in background tabs. Needs the NexusBrowser bridge and extension.

Use cases: browser-automation, web-scraping

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
13 read · 22 write · 1 delete · 13 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 49

Read from the source code; the running server may list different tools.

Read 13 · Look things up without changing anything.

  • browser_axtree
  • browser_check
  • browser_check_handoff
  • browser_content
  • browser_find
  • browser_get_cookies
  • browser_handle_dialog
  • browser_interactive_map
  • browser_list_tabs
  • browser_logs
  • browser_screenshot
  • browser_vision_inspect
Show 1 more tools
  • browser_webmcp_tools

Write 22 · Create, change, send or run things.

  • browser_batch
  • browser_cdp_send
  • browser_click
  • browser_close_tab
  • browser_download_status
  • browser_eval
  • browser_fill
  • browser_fill_form
  • browser_group_tabs
  • browser_hover
  • browser_navigate
  • browser_network_record
Show 10 more tools
  • browser_network_stop
  • browser_press_key
  • browser_release_tab
  • browser_scroll
  • browser_select_option
  • browser_select_tab
  • browser_type_keys
  • browser_upload
  • browser_wait_download
  • browser_webmcp_call

Delete 1 · Delete, drop, revoke or wipe things.

  • browser_drag_and_drop

Not yet classified 13 · We could not tell from the name and description.

  • browser_active_tab
  • browser_adopt_tab
  • browser_export
  • browser_export_gsuite
  • browser_network_requests
  • browser_network_response
  • browser_new_tab
  • browser_pdf
  • browser_reload
  • browser_wait_for
  • browser_wait_load
  • browser_wait_network_idle
Show 1 more tools
  • browser_youtube_transcript

Secrets and settings it asks for

Other settings (environment variables or headers).

  • NEXUS_BROWSER_AGENT

Network hosts it talks to 5

  • docs.astral.sh · found in code
  • docs.google.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • julienpiron.fr · found in code

Files it touches

  • Your home directory (~)
  • Any path the agent passes to its tools

Tools (49)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • browser_active_tab

    Identity (id, title, URL) of the user's active tab, read-only: it stays the user's (to act on it at the user's explicit request: browser_adopt_tab).

  • browser_adopt_tab

    Takes control of a USER tab (no agent drives it): refused by default. user_asked=True only when the user explicitly asked to act in THIS tab. Give the tab back at the end with browser_release_tab. ORPHAN tab of my agent (state "orphan" in browser_list_tabs: its session died, server restarted or crashed): taken back without user_asked. A tab of another agent, or of another live session, is always refused.

  • browser_axtree

    Extracts the page's full semantic accessibility tree (AXTree) via CDP. The value of a password, a one-time code or a bank card: "[masked value]".

  • browser_batch

    Runs several NexusBrowser tools in order in ONE call (fewer round trips), and stops at the first error. steps: [{"tool": "browser_fill", "args": {"locator": {"label": "Email"}, "value": "a@b.c"}}, {"tool": "browser_click", "args": {"locator": {"role": "button", "name": "Next"}}}, {"tool": "browser_wait_for", "args": {"text": "Welcome"}}] tab_id (optional) applies to every step that does not give its own. At most 30 steps; browser_batch cannot be nested. Each step goes through its own tool's checks: an outward gesture without the user's accord stops the batch with its accord_re…

  • browser_cdp_send

    Runs a Chrome DevTools Protocol command on the tab, from an ALLOWLIST OF COMMANDS kept by the extension: DOM reads (DOM.getDocument, querySelector, describeNode, getBoxModel, getOuterHTML...), Accessibility.getFullAXTree, Runtime.evaluate, Page.captureScreenshot, getLayoutMetrics, printToPDF, Input.dispatch* (agent's tab), display Emulation.*, Network.enable/disable, Log/Console. Everything else is refused (cookies, storage, request bodies, Fetch, IO, injected scripts, browser targets...): use the dedicated tool. world (Runtime.evaluate only): "isolated" (default) evaluates in the extension's…

  • browser_check

    Checks (checked=True) or unchecks (checked=False) a checkbox, a radio button or a role=checkbox/switch with a real CDP click, only if the state differs; the state is read back afterwards (verified, changed). E.g. locator={"role": "checkbox", "name": "I agree"} or {"label": "Newsletter"}.

  • browser_check_handoff

    Proactively detects a 2FA screen (SMS, Google Authenticator), a CAPTCHA or Cloudflare Turnstile.

  • browser_click

    Clicks an element with a real CDP mouse click (isTrusted events), tab left in the background. The element is scrolled to the center of the view; the clicked point must hit the element itself (not an overlay), otherwise an explicit error and no click elsewhere. Crosses Shadow DOM, same-origin and cross-origin iframes (frame field of the response). Auto-waits up to timeout_ms. Targeting, one of: - locator (takes precedence): Playwright-inspired role and label locator: {"role": "button", "name": "Submit"} (explicit or implicit ARIA role: button, link, textbox, checkbox, radio, combobox, head…

  • browser_close_tab

    Closes tab tab_id of this session (or an orphan tab of my agent).

  • browser_content

    Extracts the web page content. Modes: interactive (clickable elements/inputs), text (plain text), html (DOM). The value of a password, a one-time code or a bank card is never returned: "[masked value]" appears in its place.

  • browser_download_status

    Lists recent Chrome downloads (name, state, bytes received, danger) to track a downloaded file.

  • browser_drag_and_drop

    Performs a real CDP mouse drag and drop (pressed, moves with the button down, released) or moves a slider between two targets (locators, selectors, mark numbers or viewport {x, y} coordinates). The emergency stop interrupts a drag in progress (button released). Response: method ("cdp", "cdp+html5_fallback" if no trusted drop happened on a draggable source, or "js_fallback"), drop_events, trusted_drop and trusted_drag. A drag whose source or destination says send, pay, publish... (e.g. "Slide to pay"): accord required, as for browser_click. Bare coordinates are not read.

  • browser_eval

    Runs a JavaScript expression in the PAGE WORLD (its variables and functions, like the DevTools console) and returns the result. The only tool that runs code there: the page can see and tamper with what happens in it. The other tools read and act from an isolated world the page cannot see. FULL PAGE ACCESS, nothing is masked in the result: the script reads everything the page reads (non-HttpOnly cookies via document.cookie, localStorage, sessionStorage, IndexedDB, form fields, passwords included) and fetch goes out with the user's session. The masking of the other tools (cookies, headers, bodi…

  • browser_export

    Exports the MAIN content of the page (article, documentation, post) without menus, ads, cookie banners, sidebars or footers: the tool for READING a page (browser_content(mode="text"/"html") returns everything). format: "markdown" (default: headings, paragraphs, lists, absolute links, tables, code blocks), "text" (structured plain text) or "html" (cleaned HTML: structural tags only, no attributes or scripts). selector (CSS) or locator (like browser_find, strict): export one area only. max_chars bounds `content` (truncation reported: truncated, total_chars). Response: content, metadata (title, …

  • browser_export_gsuite

    Exports the Google Docs, Sheets or Slides file open in the tab through Google's official export URL, with the user's session (fetch from the page, cookies never read or returned). format: Docs md (default), txt, html, docx, pdf, odt, rtf, epub; Sheets csv (default), tsv, xlsx, pdf, ods (csv/tsv: one sheet, the URL's `gid` or the gid parameter); Slides txt (default), pdf, pptx, odp. Text (md, txt, html, csv, tsv) returned in `text` (max_chars; truncation reported, the full text then written to disk, output_path); binaries (docx, xlsx, pdf, pptx...) written to ~/.nexus/nexus-browser/exports/, p…

Show 34 more tools
  • browser_fill

    Types text with real keyboard events (trusted typing) into an input, textarea or contenteditable (rich editors such as Gmail, Notion), in the main frame or an iframe (cross-origin included). Flow: focus by a real CDP click on the field (or DOM focus); replace=True: real Ctrl+A then text (Input.insertText: trusted beforeinput/input); replace=False: append at the end; per_key=True: key by key (trusted keydown/keyup, slower); keys: keys or shortcuts sent afterwards (["Enter"], ["Control+Enter"], ["Tab"]). The value is read back: verified (true/false), value ("[masked value]" for a password, a on…

  • browser_fill_form

    Fills several fields in ONE call, in order, with the same gestures as browser_fill, browser_select_option and browser_check (trusted typing), then READS BACK the whole form without any gesture. Each field: "mark" (number from browser_interactive_map, call it first) and one value: "value" (text), "option" (visible text of a <select> option) or "checked" (true/false). E.g. [{"mark": 1, "value": "Marie"}, {"mark": 4, "option": "Lille"}, {"mark": 6, "checked": false}]. Everything is validated before the first gesture. Stops at the first unconfirmed field (error, dialog open, value refused or reset…

  • browser_find

    Lists, without acting, the elements matching a locator (see browser_click) in all frames. Response: count, unique (an action would be unambiguous), engine ("ax" = Chrome accessibility tree, "dom"), frames, and for each candidate: role, name, tag, id, frame (frame, crossOriginFrame), visible, enabled, checked/expanded/selected/level, value, box (main viewport coordinates).

  • browser_get_cookies

    Lists the cookies of the tab (or of urls) via CDP Network.getCookies: name, domain, path, expiry, httpOnly, secure, sameSite. Never their values by default (session secrets). include_values=True: values included ONLY for a local development origin (localhost, 127.0.0.1, [::1], *.localhost, *.test: the tab, or each of the urls) and only for cookies of those domains; clear refusal for any other origin. An action, not a read: refused during the emergency stop and never retried automatically.

  • browser_group_tabs

    Puts tabs of this session into a named (default: the agent's name), colored tab group. Supported colors: 'grey', 'blue', 'red', 'yellow', 'green', 'pink', 'purple', 'cyan', 'orange'. Response: updated=false (and warning) if Chrome did not apply the title, color or collapsed state.

  • browser_handle_dialog

    Answers the JavaScript dialog (alert, confirm, prompt, beforeunload) open in tab tab_id (never another tab's dialog). No dialog is ever accepted automatically: when a command opens one, its response reports it (dialog / pendingDialogs fields: type and message, for the targeted tab only). Read the message, then choose: - accept=True: OK / Leave page; accept=False: Cancel / Stay. - prompt_text: text entered in a prompt dialog before accepting.

  • browser_hover

    Hovers an element with a real CDP mouse move (isTrusted events), tab left in the background. Reveals dropdown menus, submenus, tooltips and hidden popovers. Response: method ("cdp" or "js_fallback") and trusted_hover. An element covered by an overlay is reported as an error; nothing else is hovered. Targeting, one of: - mark: badge number from browser_interactive_map or vision_inspect (e.g. mark=5) - selector: CSS selector or mark hash (e.g. "#5", ".dropdown-trigger") - text: visible text of the element (e.g. "Options") - locator: role and label locator (see browser_click), takes precedence.

  • browser_interactive_map

    Extracts a condensed map of the visible interactive elements ([#1] button, [#2] input...). Recommended discovery tool: 85% to 95% fewer tokens than raw HTML or AXTree. Gives for each visible element: its mark number, tag, ARIA role, text label, optimized CSS selector and box_2d coordinates [ymin, xmin, ymax, xmax] (0-1000). Lets you chain clicks and fills directly with browser_click(mark=N) or browser_fill(mark=N, value=...).

  • browser_list_tabs

    Lists the tabs open in Chrome (id, title, URL) and, for each, the agent driving it (owner), whether it belongs to THIS session (mine) and its state: "mine" (this session), "orphan" (orphaned by my agent: dead session, take it back with browser_adopt_tab, or close / release it), "other" (another agent or another live session) or "user" (the user's tab, no agent). Only mine=true tabs accept page commands.

  • browser_logs

    Returns the stream of errors and messages from the tab's DevTools console.

  • browser_navigate

    Navigates tab tab_id to the URL (http, https, data: or about:blank; never file:// or chrome://). url="back" or "forward": previous or next page of this tab's history (the browser's back and forward buttons).

  • browser_network_record

    Starts (or extends) the tab's network recording for duration_s seconds (at most 600): the debugger stays attached until then, even without commands. Stop earlier with browser_network_stop. Without a requested recording, the debugger is detached after 30 s of inactivity (log kept, bodies lost).

  • browser_network_requests

    Network requests recorded for the tab (ring buffer of 500), most recent last: url, method, status, type (Document, Fetch, XHR, Script...), mimeType, size (bytes received), duration_ms, state, failed and errorText, request_id (for browser_network_response). Filters: filter (URL fragment or "/regex/"), method, status (200, "4xx", "400-499"), resource_type, failed_only. include_headers=True adds headers; Cookie, Set-Cookie, Authorization and any header whose name suggests a token, key, session, signature or password are always masked, as are sensitive URL parameters (access_token, code, key, sig…

  • browser_network_response

    Response body of a request from browser_network_requests (Network.getResponseBody), truncated to max_bytes (truncated). Secret fields masked by the extension, at any depth: JSON (access_token, refresh_token, id_token, token, password, secret, api_key, client_secret, authorization, session...) and forms (a=1&token=...); masked = number of masked values. A binary body is reported (binary, size) and returned as base64 only with include_binary=True.

  • browser_network_stop

    Stops network recording and detaches the debugger from the tab (the log already captured stays readable).

  • browser_new_tab

    Opens a new Chrome tab at the given URL (or about:blank) and returns its id: the tab_id to pass to every following command. The tab belongs to THIS agent session (enforced by the extension). By default in the background (background=True) without stealing the user's focus, in the tab group named after the agent (Antigravity, Claude or Codex); group="": no group. Only http, https, data: or about:blank URLs (never file://, chrome://).

  • browser_pdf

    Generates a high-fidelity vector A4 PDF export of the tab's page.

  • browser_press_key

    Presses a real key or shortcut via CDP on the focused element: Enter, Escape, Tab, Backspace, ArrowDown, F5, or a combination "Control+A", "Shift+Tab", "Control+Shift+K" (key, code, windowsVirtualKeyCode, modifiers). Enter, Control+Enter or Space toward an outward control (a focused send/pay/order button, or the submit button of the focused field's form): accord required, as for browser_click.

  • browser_release_tab

    Gives the tab back to the user without closing it (ownership removed, debugger detached). For an adopted tab, or an orphan tab of my agent.

  • browser_reload

    Reloads the page of tab tab_id.

  • browser_screenshot

    Screenshot of the tab, of the whole page (full_page=True), or of one element cropped to the pixel (PNG), even if the page has scrolled. By default, the image is written to ~/.nexus/nexus-browser/screenshots/ and only its path is returned (output_path): no bulky base64 in the response. Do not open a capture larger than 500 KB with an image reader. Targeting: - selector: CSS selector of the element to crop (e.g. "#dashboard-card") - mark: mark number to crop (e.g. mark=4) - output_path: absolute PNG path (optional, otherwise the local cache) - full_page=True: the whole scrollable page, beyond t…

  • browser_scroll

    Scrolls the web page by y pixels down (down) or up (up).

  • browser_select_option

    Selects an option of a <select> (targeted by locator, e.g. {"label": "Plan"}, or selector) by value or by visible text, then fires input and change events (like Playwright selectOption). A custom list (role=combobox without <select>) is driven with browser_click on the list, then on {"role": "option", ...}.

  • browser_select_tab

    Activates and brings to the front this session's tab (steals the user's focus: only at the user's request).

  • browser_type_keys

    Types text key by key via CDP Input.dispatchKeyEvent (trusted keydown/keypress/input/keyup), for fields that require real keys (input masks, page shortcuts). No target: the focused element; with locator or selector: focus first (real click), append at the end, value read back (verified). keys: keys or shortcuts sent afterwards (["Enter"]). The emergency stop interrupts typing in progress. A line break in text, or a submitting key, toward an outward button of the field's form: accord required, as for browser_click (the typed text is part of it).

  • browser_upload

    Uploads one or more files (e.g. .aab, .apk, .zip) without opening or blocking on the native Windows file dialog. Refused (by the bridge itself) for any file in a secrets folder: ~/.nexus, ~/.nexusagy, ~/.ssh, ~/.codex, ~/.claude, ~/.gemini, ~/.android, ~/.git-credentials, ~/.config/gcloud, %APPDATA%/gcloud, Chrome profile, the user's secrets vault... (normalized paths: \\?\, \\localhost\C$, links and junctions resolved).

  • browser_vision_inspect

    Places numbered Set-of-Mark (SoM) badges on interactive elements and captures the view for visual analysis; the numbers are then used with browser_click(mark=N). Returns the list of elements with box_2d [ymin, xmin, ymax, xmax] on a [0-1000] scale. The capture is written by default to ~/.nexus/nexus-browser/screenshots/ (full-resolution PNG, path returned in output_path). inline=True attaches it to the response as an image instead: WebP, long side at most 1568 px and 1.15 megapixels, at most 500 KB; data.image gives its size and css_per_image_px to read a position on it, and each marker its i…

  • browser_wait_download

    Waits for a download started in the tab (link click...) to finish and returns its path, size (bytes) and type (mime). Candidates: downloads started since the agent's last action on the tab (or since_ms, a timestamp in milliseconds), coming from the tab's origin. A file Chrome flags as dangerous is never accepted by the agent: explicit error. timeout_ms: at most 115000.

  • browser_wait_for

    Waits until a visible element shows the text (case-insensitive substring) or matches the locator (see browser_find), in every frame; with gone=True, until none is left (a spinner, "Loading...", a closed dialog). Use it after an action whose result appears later: no fixed pause needed. timeout_ms: at most 115000. Response: count of matching elements and elapsed_ms; an error if the timeout is reached.

  • browser_wait_load

    Waits until the document is settled and complete (document.readyState === 'complete'). timeout_ms: at most 115000 (bridge limit); the response is awaited for timeout_ms + 5 s.

  • browser_wait_network_idle

    Waits until network traffic settles (0 active Fetch/XHR request for idle_ms). Call it after a click, a submission or a navigation in a single-page application (React, Angular, Vue, Google Cloud / Play Store consoles) before inspecting the DOM. timeout_ms: at most 115000 (bridge limit).

  • browser_webmcp_call

    Calls a WebMCP tool exposed by the page (see browser_webmcp_tools) with input, a JSON object matching its inputSchema; origin picks one when several frames expose the same name. Runs the page's own handler through Chrome's executeTool from the extension's isolated world; timeout_ms bounds it (then cancelled). Same guardrail as clicks: a tool the page marks consequential, or whose name, title, description or form submit button says send, pay, order, book, publish, call, transfer... is refused with a summary of the EXACT call (tool, origin, input, page) and a one-time token; resend the same call…

  • browser_webmcp_tools

    Lists the WebMCP tools the PAGE ITSELF exposes to agents (document.modelContext, native in Chrome 149+ on sites enrolled in the WebMCP origin trial): name, title, description, inputSchema, annotations (readOnlyHint, consequentialHint, untrustedContentHint), origin, frame, and for a declarative tool (an HTML form) its submit buttons and form target. Read without any gesture, from the extension's isolated world. When a page offers a tool for the task, calling it (browser_webmcp_call) is more reliable than clicking through its interface. supported=false: the page exposes none. Names, descriptions…

  • browser_youtube_transcript

    Transcript of the YouTube video open in the tab (the player's caption tracks, read in the page world: the only export that needs it). lang: wanted language code ("fr", "en"...): manual track first, then auto-generated (track.auto: true), else YouTube's automatic translation (track.translated); omitted = the video's default track. format: "json3" (default) or "vtt". Response: timed_text ("[mm:ss] text" per line), text (plain text), track, available_tracks, title, channel, truncated (max_chars). If YouTube requires its player's token, the player's captions are turned on briefly then restored (e…

Signals

Stars
4
Forks
0
Open issues
0
Weekly downloads
955
Last commit
Oct 24, 2026 (4 days ago)
Last release
Oct 26, 2026 (2 days ago)
Last package publish
Oct 24, 2026 (4 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.pironjulien/nexus-browser
Version
2.26.1
Auth
No auth
Packages
pypi nexus-browser
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 26, 2026

More from pironjulien

Cite this page

NexusBrowser MCP server. Agent Mart. https://agentmart.dev/connectors/pironjulien-nexus-browser (last updated 2026-10-26)