Browser Scraper logo

Browser Scraper

by @eurafaeldecarvalho

Stealth Chrome MCP server for scraping protected pages, extracting Markdown or structured data, and browser interaction.

Install Browser Scraper

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "eurafaeldecarvalho-browser-scraper": {
      "command": "npx",
      "args": [
        "-y",
        "@eurafaeldecarvalho/browser-scraper"
      ]
    }
  }
}

Settings โ†’ Developer โ†’ Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Install not yet sandbox-testedโ€” we haven't run this command through our automated sandbox yet. Not a red flag; we're working through the catalog.

Overview

@eurafaeldecarvalho/browser-scraper exposes a real Chrome browser to AI agents through MCP, using the Chrome DevTools Protocol without the Runtime.enable automation signal. It can navigate pages, pierce closed Shadow DOM and cross-origin iframes, return Markdown or accessibility snapshots, and perform interactions such as clicking and typing. Use it when ordinary HTTP clients or headless automation are blocked, or when an agent needs structured access to complex page content. The server runs locally, requires Node.js 20+ and Chrome or Chromium, and supports Claude Code, Cursor, and Codex.

Use cases

  • Scrape bot-protected pages with browser escalation
  • Extract product data from pages with embedded JSON-LD
  • Give an AI agent clickable accessibility snapshots
  • Traverse closed Shadow DOM and cross-origin iframes
  • Run selector-based extraction without an LLM on every page

Key features

  • Raw CDP control of real Chrome
  • Markdown, metadata, and structured extraction
  • Closed Shadow DOM and cross-origin iframe traversal
  • Cloudflare Turnstile checkbox handling
  • MCP, CLI, and Node.js library interfaces
  • Optional LLM-generated selector extraction

Security & health

What it can reach and how reliably it runs โ€” from our own checks, not the maintainerโ€™s claims.

ActiveLast checked Today

Recent health check succeeded.

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 8h ago via OSV.dev ยท @eurafaeldecarvalho/browser-scraper (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks โ€” not a rating.

GitHub stars12Stargazers on the source repository.
npm downloads1kPackage downloads in the last 30 days.
Last commit11d agoMost recent push to the default branch.

How Browser Scraper works

What @eurafaeldecarvalho/browser-scraper does

@eurafaeldecarvalho/browser-scraper gives MCP-compatible agents access to a locally running Chrome instance for web scraping and browser automation. It reads page content through the Chrome DevTools Protocol and can expose the result as clean Markdown, metadata, structured data, links, or an accessibility snapshot with references that an agent can use for interaction.

The browser layer is designed for sites that detect conventional headless automation. It avoids sending Runtime.enable, keeps browser identity signals consistent across user agent, Client Hints, WebGL, timezone, and locale, and uses human-like mouse and keyboard input. Cloudflare Turnstile checkbox flows can be handled with solveTurnstile(). These measures improve access to protected pages but do not guarantee a bypass; IP reputation and the target's defenses remain relevant.

How it works

The package can be used as a Node.js library, command-line program, or MCP server. The library is organized around Browser, Tab, and Element objects: create a browser, open a tab, navigate to a URL, find elements, and perform actions before closing the browser.

For simpler extraction, scrape() starts with plain HTTP and escalates to browser or stealth browser access only when needed. Its result identifies the least expensive tier that succeeded. Browser-based extraction reads Chrome's DOM tree over CDP without injecting scripts into the page. DOM traversal can include closed Shadow DOM roots and cross-origin iframe documents.

The MCP and CLI interfaces are intended for agent workflows. Secret values can be supplied through {{SECRET}} placeholders so credentials are not exposed to the model, an allow-list can restrict permitted domains, and page content is fenced as untrusted data.

Setup and configuration

Install the package with npm or pnpm:

Terminal
npm install @eurafaeldecarvalho/browser-scraper

The package requires Node.js 20 or newer and a local Chrome or Chromium installation. Chrome is detected automatically, or a specific executable can be supplied with chromePath. A basic MCP registration for Claude Code is:

Terminal
claude mcp add browser-scraper -- npx -y @eurafaeldecarvalho/browser-scraper mcp

AWS Lambda deployments also use the optional @sparticuz/chromium package. Profile history seeding can use Node's built-in node:sqlite on Node 22.5 or newer, or the optional better-sqlite3; if neither is available, that seeding step is skipped. LLM helpers are available through the /ai import and require ai, plus zod when using Zod schemas.

Tools and capabilities

  • Navigate pages and locate elements with selectors.
  • Click, type, and use human-like mouse or keyboard input.
  • Capture screenshots.
  • Convert main page content to Markdown, with optional query filtering and configurable link output.
  • Extract page metadata such as title, description, canonical URL, language, social metadata, and JSON-LD.
  • Produce accessibility snapshots with clickable references for agents.
  • Traverse closed Shadow DOM and cross-origin iframes.
  • Handle Cloudflare Turnstile checkbox flows with solveTurnstile().
  • Escalate from HTTP retrieval to browser or stealth browser access through scrape().
  • Generate CSS selectors with an LLM once, then extract with run() without an LLM; runOrHeal() can regenerate selectors when a site changes.
  • Control network behavior, use persistent profiles, and warm browser identities.

Limitations and notes

The package is not a general CAPTCHA solver. It does not solve reCAPTCHA v2, hCaptcha, or Arkose image challenges; those require a separate solver service. It can maintain high reCAPTCHA v3 scores through human-like input and warmed profiles.

Stealth results depend on the production environment. Datacenter IP reputation can prevent access before JavaScript executes, while render-hash checks may require a real GPU and a suitable residential or mobile proxy. GPU-less Lambda environments can expose different browser surfaces from desktop Chrome, so detection results should be tested against the binary and infrastructure being deployed.

The project is licensed under MIT and is designed for local use without a hosted service, API key, or per-page charge. Proxy access and any optional LLM are supplied separately by the user.

Reviews

No reviews yet โ€” be the first to share how it worked for you.

Frequently Asked Questions about Browser Scraper

@eurafaeldecarvalho/browser-scraper is an MCP server that connects AI agents to real Chrome over the Chrome DevTools Protocol. Its main tools support page navigation, element finding and interaction, Markdown and metadata extraction, accessibility snapshots, screenshots, Cloudflare Turnstile handling, and structured scraping through browser or HTTP tiers.

Install it with npm or run it through npx; Claude Code can register it with `claude mcp add browser-scraper -- npx -y @eurafaeldecarvalho/browser-scraper mcp`. Node.js 20 or newer and a local Chrome or Chromium installation are required.

Yes, it works with Cursor through its MCP server interface. The package also supports Claude Code and Codex, and the MCP process can be started with the package's `mcp` command.

It is not a general CAPTCHA solver. It supports Cloudflare Turnstile checkbox handling and can maintain high reCAPTCHA v3 scores through human-like input and warmed profiles, but reCAPTCHA v2, hCaptcha, and Arkose image challenges require a separate solver service.

Yes, its `find()`, `markdown()`, and `snapshot()` capabilities can reach closed Shadow DOM roots and cross-origin iframe documents. This makes it suitable for pages whose relevant content is not visible to ordinary DOM or readability-based extractors.

Related MCP servers

Add a badge to your READMEShow itโ€™s listed โ€” live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewBrowser Scraper AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/eurafaeldecarvalho-browser-scraper?style=directory)](https://allmcps.com/mcp/eurafaeldecarvalho-browser-scraper)
HTML Embed
<a href="https://allmcps.com/mcp/eurafaeldecarvalho-browser-scraper"><img src="https://allmcps.com/api/badge/eurafaeldecarvalho-browser-scraper?style=directory" alt="Browser Scraper on AllMCPs" /></a>