pinchtab-mcp

MCP server for browser automation — control Chrome or any Chromium browser via accessibility tree snapshots.

$ npx pinchtab-mcp
npm version license stars

Why pinchtab-mcp

🌳

Accessibility Tree

Interact via semantic element refs (e0, e1, …) instead of fragile CSS selectors or pixel coordinates.

🤖

Human-Like Input

Real mouse events and character-by-character typing by default. Works with autocomplete, keystroke listeners, SPAs.

🔌

Zero Config

PinchTab is bundled as a dependency. Auto-starts on first call, stops on exit. Just npx pinchtab-mcp.

🌐

Any Chromium Browser

Chrome, Brave, Edge, Yandex Browser, Arc — set CHROME_BINARY or connect to an existing session via CDP_URL.

📸

Screenshots + Snapshots

Visual screenshots for discovery, compact accessibility snapshots for fast interaction. Diff mode for multi-step flows.

19 Tools

Navigate, click, type, hover, focus, select, scroll, press keys, wait for selectors, screenshot, eval JS, export PDF, extract text.

Setup

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "pinchtab": {
      "command": "npx",
      "args": ["-y", "pinchtab-mcp"]
    }
  }
}

Add to .cursor/mcp.json or .vscode/mcp.json:

{
  "servers": {
    "pinchtab": {
      "command": "npx",
      "args": ["-y", "pinchtab-mcp"]
    }
  }
}
$ claude mcp add pinchtab -- npx -y pinchtab-mcp

Agent Workflow

pinchtab_navigate — go to URL (use waitMs to get snapshot in one call)
pinchtab_snapshot — get element refs (e0, e1, …); use filter='interactive' for fewer tokens
pinchtab_click / pinchtab_type — interact by ref (use waitMs for post-action snapshot)
pinchtab_wait_for_selector — wait for dynamic content instead of fixed delays
pinchtab_snapshot — verify result

Available Tools

ToolDescription
pinchtab_list_instancesList all open browser instances
pinchtab_navigateNavigate to a URL — new tab support, waitMs for auto-snapshot
pinchtab_snapshotGet accessibility tree with element refs. Supports filter, compact format, diff mode
pinchtab_screenshotTake a page screenshot (base64 JPEG)
pinchtab_clickClick element by ref — real mouse events, waitMs for auto-snapshot
pinchtab_typeType text into input — human-like keystrokes, clearFirst for React/Vue/Angular
pinchtab_pressPress keyboard key — optionally on a specific element
pinchtab_hoverHover over element — reveal tooltips, dropdowns
pinchtab_focusFocus element — trigger autocomplete, focus-dependent UI
pinchtab_selectSelect option in a dropdown by value or visible text
pinchtab_scrollScroll page or element in any direction
pinchtab_waitWait N seconds (1-30, default 3)
pinchtab_wait_for_selectorWait for CSS selector to appear — polls every 500ms, up to 15s
pinchtab_get_textGet readable page text (~800 tokens)
pinchtab_evalExecute JavaScript in page context
pinchtab_pdfExport current page as PDF
pinchtab_close_tabClose current or specific tab by ID
pinchtab_cookiesGet all cookies for the current page
pinchtab_healthCheck if PinchTab server is running

Configuration

MCP Server

VariableDefaultDescription
PINCHTAB_URLhttp://127.0.0.1:9867PinchTab API endpoint
PINCHTAB_TOKENAuth token (must match BRIDGE_TOKEN)
PINCHTAB_BIN(auto)Explicit path to PinchTab binary

PinchTab

VariableDefaultDescription
CHROME_BINARY(bundled)Path to browser binary — Yandex, Brave, Edge, etc.
CDP_URLConnect to a running browser (e.g. http://localhost:9222)
BRIDGE_HEADLESStrueSet false to see the browser window
BRIDGE_PORT9867HTTP API port
BRIDGE_TOKENAuth token
BRIDGE_PROFILE~/.config/pinchtab/chrome-profileBrowser profile directory
BRIDGE_MAX_TABS20Maximum open tabs
BRIDGE_BLOCK_ADSfalseBlock ads
BRIDGE_BLOCK_IMAGESfalseBlock images (faster scraping)
BRIDGE_BLOCK_MEDIAfalseBlock video/audio
BRIDGE_NO_ANIMATIONSfalseDisable CSS animations
BRIDGE_STEALTHlightAnti-detection level
BRIDGE_TIMEZONE(system)Override timezone
BRIDGE_USER_AGENT(auto)Override User-Agent
CHROME_FLAGSExtra flags passed to the browser

Custom Browser Examples

# Yandex Browser
CHROME_BINARY="/Applications/Yandex.app/Contents/MacOS/Yandex" npx pinchtab-mcp

# Brave
CHROME_BINARY="/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" npx pinchtab-mcp

# Connect to an existing browser (keeps your tabs, cookies, logins)
/Applications/Yandex.app/Contents/MacOS/Yandex --remote-debugging-port=9222
CDP_URL="http://localhost:9222" npx pinchtab-mcp

# Visible browser for debugging
BRIDGE_HEADLESS=false npx pinchtab-mcp