All MCP Servers
Dev Tools & GitMCP Registrynpm18 toolsA · 91

ai-browser MCP server

io.github.Glittering · Updated

Visible Electron browser driven by a semantic accessibility tree: 17 MCP tools, no screenshots.

At a glance

ai-browser is an MCP server in the Dev Tools & Git category. It runs locally over stdio via `npx -y @glittering0717/ai-browser`, and declares no required credentials. It exposes 18 tools, including browse_navigate, browse_get_tree and browse_act. It scores A (91/100) on the MCP Skills Hub health score as of Oct 28, 2026.

Source 5GitHub stars

One-click install

Opens your editor and pre-fills the config. Your editor will ask before adding it.

How to install ai-browser in your AI client

Setup for Claude Code, Claude Desktop, Cursor, Codex, Windsurf, Cline and VS Code — copy-paste ready.

How to install ai-browser in Claude CodeAnthropic's agentic CLI

  1. Add the server

    bash
    claude mcp add ai-browser -- npx -y @glittering0717/ai-browser
  2. Verify it's connected

    bash
    claude mcp list
  3. Sharing it with your team?

    Add `--scope project` to write it to .mcp.json in the repository root, which you can commit (with the secrets left as environment variables).

  4. Use it in a session

    Ask Claude to use the tools this server exposes (e.g. browse_navigate, browse_get_tree, browse_act). It discovers them automatically.

What tools does ai-browser expose? (18)

Taken from the project's README — the server itself was not queried, so check its docs for the exact schemas.

  • browse_navigateLoad a URL in your tab or the given tab.
  • browse_get_treeRead the page as a semantic tree + page context (modals, messages, stats).
  • browse_act`click` / `type` (append at caret) / `setContent` (replace all) / `clear` / `focus` / `hover` / `scroll_to` / `upload` / `get_value` (read-only) / `drag` / `press` / `wheel` on a `data-ai-id`.
  • browse_diff`snapshot` a baseline, then `diff` to get added / removed / changed paths with before/after values. This is how you prove an action did anything.
  • browse_capabilitiesProbe what a page affords and which route to take on it (see below).
  • browse_repaintForce the compositor to redraw the tab when the window shows a stale page; returns `repaint_count`.
  • browse_downloadsList a tab's downloads with their on-disk paths. Downloads are asynchronous — poll this after clicking an export button.
  • browse_canvasRead `` through captured draw calls: `list` / `read` / `configure` / `capture`. Experimental — see the canvas section below.
  • browse_evaluateRun a JS *expression* in page context (5000-char cap, Node identifiers rejected).
  • browse_scrollScroll the page, or scroll an element into view.
  • browse_waitPoll until `button_enabled` / `modal_appeared` / `text_contains` / `url_contains`.
  • browse_tabsTabs: `list` / `new` / `close` / `switch` / `window`. `switch` = default; add `show:true`. `new` never steals the view unless `show:true`.
  • browse_networkChrome-DevTools-style network inspection: `list` (filter by method / URL / status / type), `get` (request + response headers and bodies), `clear`, `configure`.
  • browse_quitShut the whole browser down and release the process.
  • committeddispatched and acked by the page
  • noneprovably nothing happened (no such target, bad params, CDP down)
  • unknowncannot prove nothing happened — timeout, paste dispatched but never consumed, half a key sequence
  • verdictis an explicit `"changed"` / `"unchanged"`, so "nothing happened" is never inferred from

What the code can do

Read from the published package source — never executed. Parsed 71 of 71 source files.

This server can run other programs on your machine, read and write files and execute code it builds at runtime.

How it was published

  • No provenance attestation — there is nothing linking this published artifact to a specific source commit.
  • 1 npm maintainer — a single point of compromise · last published by glittering0717.

Maintainer of this package and think something here is wrong? Tell us and we'll correct it.

Before you install

Signals gathered from the source repo and package registry — not a safety verdict.

What it can reach

  • Runs code on your machine — Executes as a local process with your user's permissions, including filesystem access.
  • Downloads at launch — The package is fetched from its registry each run unless you pin a version.
  • Last commit today — Actively maintained.
  • 5 GitHub stars — Very little community usage so far.
  • 4.3k weekly downloads — Regularly installed by other developers.

Client compatibility

Claude Code: NativeClaude Desktop: NativeCursor: NativeCodex CLI: NativeWindsurf: NativeCline: NativeVS Code: Native

Health score

A · 91

Maintenance, adoption, transparency and packaging — not a safety audit. How this is calculated

  • Maintenance30%100%

    Last commit 0 days ago.

  • Adoption20%54%

    5 stars, 4275 weekly downloads.

  • Transparency20%100%

    4/4: ✓ public source repo, ✓ declared license, ✓ documentation, ✓ discoverable tool list.

  • Provenance15%100%

    Package and registry entry point at the same repository.

  • Packaging15%100%

    Publishes a pinned version (2.3.1).

Documentation

Full README

AI Browser

<b>中文读者请看这里:README-CN.md(3 分钟速读 + 中文安装指引)</b>

<b>A real browser whose only operator is your agent.</b> It reads pages as a semantic tree instead of screenshots, acts through trusted browser input — and because it is a normal, visible Electron window, a human can reach for the mouse at any time.

<em>A noisy real-world feed (300+ accessibility nodes) becomes a typed structure — then one <code>ui.act</code> switches the feed and the tree changes with it. Every call is a raw JSON-RPC message over one WebSocket: no SDK, no coordinates.</em>

Reproduce: <code>npm start</code> then <code>node examples/feed-tree.mjs</code>

<em>Human + agent, same browser, same socket. The agent drives, then simply stops and watches; a person clicks an article in the real window, the agent notices the new tab on its next read, and continues on the page the human chose. No lock, no hand-off API.</em>

Try it yourself: <code>npm start</code> then <code>node examples/human-takeover.mjs</code> — click anything when it says <em>YOUR TURN</em>.

What it is. An Electron app that exposes its tabs over two equivalent interfaces — an MCP server (20 browse_* tools) and a raw WebSocket JSON-RPC API (ws://localhost:9223, methods ui.*). Your agent navigates, reads a structured semantic tree (role / label / value / states / actions), and clicks or types by data-ai-id. There is no screenshot step and no OCR: src/ contains no capture call at all.

What it is not. It is not headless. The window really opens, really renders, and stays interactive — see Letting a human step in. Nor does it "co-drive" with you: the hand-off is a conversation between the agent and the user, not a browser API.

Security note. The WebSocket server has no authentication — it listens on localhost and trusts whoever connects. Do not expose port 9223 beyond loopback, and avoid untrusted networks.


Install

Install the prebuilt package unless you have a reason not to. Option A is one file you double-click: no Node.js, no dependency tree, no build step. Source install (Option C) pulls a ~276 MB node_modules plus a ~100 MB Electron engine download on top — only use it when no package fits your platform, the package misbehaves, or you specifically need to run from source.

Option A — macOS install package (recommended)

Excerpt — the full document is on GitHub.

Maintain ai-browser? Add a badge to your README

Shows its health grade, and links readers to install steps for every client.

markdown
[![ai-browser on MCP Skills Hub](https://mcp-skills-hub.vercel.app/badge/io-github-glittering-ai-browser)](https://mcp-skills-hub.vercel.app/mcps/io-github-glittering-ai-browser)

Catalog data refreshed . Something wrong? Report it.