Skip to main content
Glama
zzyyyds1231

text-browser-agent

by zzyyyds1231

# text-browser-agent

让 AI 用纯文本看懂网页,浏览器自动化从此不烧视觉 token。

Windows browser automation bridge for AI agents. Drives real Chrome via Puppeteer/CDP with an agent-friendly API — AX-tree text snapshots, no vision tokens needed. Ships as both a CLI and a Model Context Protocol (MCP) server.

Node License Platform GitHub stars


Why this exists

Browser automation for AI agents usually burns vision tokens on screenshots — expensive, slow, and error-prone. This tool takes a different route:

The accessibility (AX) tree is already text.

text-browser-agent converts any page into a plain-text snapshot via snapshotText(), so any cheap text model can "see" and drive a real Chrome browser. No images, no vision round-trips.

Vision-based

text-browser-agent

Cost (100 pages)

~$0.38

~$0.00

Speed

slow (image round-trips)

fast (pure text)

Model needed

vision-capable

any text LLM

Structure

pixels

roles + refs (reliable clicks)


Related MCP server: Playwright MCP

Features

  • AX-tree text snapshotssnapshotText() returns the page as structured text.

  • Full interaction — click, fill, type, press keys, scroll, hover.

  • Raw CDP — allowlisted cdp() for power users.

  • MCP server — official @modelcontextprotocol/sdk, works with any MCP client.

  • Headless or headed--headless for automation, headed for human viewing.

  • Persistent task spaces — real, saved task spaces (not stubs).

  • Security-first — no shell execution, URL/SSRF allowlist, CDP allowlist, screenshot path sandbox. See SECURITY.md.


Installation

# from the project directory
npm install
npm link          # exposes the `text-browser-agent` CLI globally

Prerequisites:

  • Node.js >= 22

  • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe (override with CHROME_PATH). If the browser wasn't downloaded: npx puppeteer browsers install


Quick start

1. Environment check

text-browser-agent --doctor

2. Run a script (helpers injected)

@'
await openOrReuseTab("https://example.com")
console.log(await snapshotText())
'@ | text-browser-agent nodejs

Headless:

@'
await openOrReuseTab("https://example.com")
console.log(await snapshotText())
'@ | text-browser-agent nodejs --headless

3. MCP server — connect and go

The MCP server uses the official @modelcontextprotocol/sdk, so it works with any MCP client (Claude Code, Cursor, Cline, opencode, etc.) with zero custom glue.

text-browser-agent --mcp            # headed (visible Chrome)
text-browser-agent --mcp --headless # headless (recommended for automation)

Add it to your client's MCP config as a stdio server:

{
  "mcpServers": {
    "text-browser-agent": {
      "command": "text-browser-agent",
      "args": ["--mcp", "--headless"]
    }
  }
}

A ready-to-copy config lives in mcp.example.json.

Claude Code — add to .mcp.json (project) or ~/.claude.json (global):

{
  "mcpServers": {
    "text-browser-agent": {
      "command": "text-browser-agent",
      "args": ["--mcp", "--headless"]
    }
  }
}

Cursor — Settings → MCP → Add server, choose "command", enter text-browser-agent --mcp --headless.

opencode — add to opencode.json:

{
  "mcp": {
    "text-browser-agent": {
      "type": "local",
      "command": ["text-browser-agent", "--mcp", "--headless"]
    }
  }
}

The server exposes 26 tools: openOrReuseTab, listTabs, switchTab, closeTab, currentTab, gotoAndWait, pageInfo, snapshotText, captureScreenshot, click, doubleClick, hover, scrollBy, scrollToBottomUntil, fillInput, typeText, pressKey, js, cdp, serverFetch, browserFetch, and task-space management (useOrCreateTaskSpace, listTaskSpaces, newTaskSpace, completeTaskSpace, handOffTaskSpace).


API reference

Task spaces (persisted)

useOrCreateTaskSpace(name) · listTaskSpaces() · newTaskSpace(name) · switchTaskSpace(name) · claimTaskSpace(name) · completeTaskSpace(name) · handOffTaskSpace(name) · takeOverTaskSpace(name) · waitForAgentControl()

Tabs / navigation

openOrReuseTab(url, opts?) · listTabs() · switchTab(targetId) · closeTab(targetId) · currentTab() · gotoAndWait(url, opts?) · pageInfo()

Observation

snapshotText(opts?) · captureScreenshot(opts?) · cliLog(...) · drainEvents()

Mouse

click(sel, opts?) · doubleClick(sel) · hover(sel) · scrollBy(delta) · scrollToBottomUntil(pred, opts?) · scroll({dy})

Keyboard / input

typeText(text, opts?) · fillInput(sel, text) · pressKey(key)

CDP / JS / network

js(expression) · cdp(method, params?) · browserFetch(url) · serverFetch(url, opts?)


Environment variables

Variable

Default

Description

CHROME_PATH

C:\Program Files\Google\Chrome\Application\chrome.exe

Chrome executable

EGO_DATA_DIR

%TEMP%\text-browser-agent-data

Browser user-data + task persistence

EGO_SHOT_DIR

%TEMP%\text-browser-agent-shots

Screenshot output sandbox

EGO_HEADLESS

0

1 to default to headless

EGO_DEBUG

set to enable debug logging


Security

This tool is default-deny: no shell execution, URL/SSRF allowlist, CDP method allowlist, and a screenshot path sandbox. It is a local tool and does not listen on any port. Read SECURITY.md for the full threat model.


License

MIT. Underlying puppeteer is Apache-2.0 (Copyright The Chromium Authors).


Contact

Questions, feedback, or collaboration? Reach out on WeChat:

WeChat: 1127765955

If you find this tool useful, a ⭐ on GitHub goes a long way. Thanks!

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zzyyyds1231/text-browser-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server