MCP Connector

Scrape and Convert Web Pages to Markdown

MCP server that scrapes webpages with Puppeteer and AI vision, auto-bypassing cookie banners, CAPTCHAs, and paywalls, then outputs Markdown.

Works with openai

90
Spark score
out of 100
Updated 5 months ago
Version 1.0.0
Models
gpt 4o

Add to Favorites

Why it matters

Automate the extraction of structured content from web pages, including those with interactive elements like CAPTCHAs and paywalls, converting them into clean Markdown format.

Outcomes

What it gets done

01

Parse web pages using Puppeteer in stealth mode.

02

Handle cookie consent banners, CAPTCHAs, and paywalls with AI.

03

Extract main content and convert HTML to well-formatted Markdown.

04

Support multiple communication modes for integration.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-puppeteer-vision | bash

Capabilities

Tools your agent gets

scrape-webpage

Parses web pages and converts them to markdown with AI-powered interaction handling for cookies, CAPTCHAs, and paywalls.

Overview

Puppeteer vision MCP server

An MCP server that scrapes webpages using Puppeteer, with an AI vision model that automatically handles cookie banners, CAPTCHAs, paywalls, age gates, and other interactive obstacles. Extracts main content with Mozilla's Readability and converts it to well-formatted Markdown via Turndown, exposed as a single scrape-webpage MCP tool. Use when scraping pages blocked by interactive overlays like cookie consent, CAPTCHAs, or paywalls and you want an AI model to bypass them automatically before extracting Markdown content.

What it does

Puppeteer vision MCP server provides a single MCP tool, scrape-webpage, that scrapes a webpage using Puppeteer with stealth mode, uses a vision-capable AI model to automatically handle interactive elements blocking content - cookie consent banners, CAPTCHAs, newsletter or subscription prompts, paywalls and login walls, age verification prompts, interstitial ads, and similar - extracts the main content with Mozilla's Readability, and converts it to well-formatted Markdown using Turndown with custom rules for code blocks, tables, and other structured content. The AI-driven interaction step analyzes screenshots of the page to decide on actions like clicking, typing, or scrolling to bypass overlays, repeating up to a configurable number of attempts.

When to use - and when NOT to

Use this when you need to scrape pages blocked by cookie banners, CAPTCHAs, paywalls, login walls, or other interactive overlays, and want an AI model to detect and dismiss them automatically before extracting clean Markdown content.

Not needed for scraping simple static pages with no interactive obstacles, since the AI-driven interaction step adds vision-model calls and interaction attempts that a plain scraper wouldn't need.

Capabilities

Exposes one tool, scrape-webpage, with parameters url (required), autoInteract (optional, default true), maxInteractionAttempts (optional, default 3), and waitForNetworkIdle (optional, default true). The response returns markdown content plus metadata (message, success, contentSize). It can run in stdio (default, for direct process integration with LLM tools that manage processes), sse (Server-Sent Events over HTTP, connect at /sse), or http (Streamable HTTP transport with full session management and resumable connections, connect at /mcp) transport modes, configurable via TRANSPORT_TYPE. A DISABLE_HEADLESS option lets you watch the browser interact with the page in real time instead of running headless.

How to install

Requires Node.js, npm, and an OPENAI_API_KEY, set via a .env file or shell environment variables. Recommended install is via npx:

npx -y puppeteer-vision-mcp-server

Optional environment variables include VISION_MODEL (default gpt-4.1, any vision-capable model), API_BASE_URL (to point at an OpenAI-compatible provider such as Together.ai, Groq, Anthropic, or a local deployment), TRANSPORT_TYPE (stdio/sse/http), PORT (default 3001, used in sse/http modes), and DISABLE_HEADLESS. As an MCP tool, it's configured in an orchestrator's config with command: npx, args: ["-y", "puppeteer-vision-mcp-server"], and the same environment variables. For local development, clone the repository, run npm install and npm run build, add an OPENAI_API_KEY to a .env file, and run npm start or npm run dev for automatic rebuilding. Customization points include vision-analyzer.ts for the AI prompt, page-interactions.ts for action types, webpage-scraper.ts for Puppeteer options, and markdown-formatters.ts for Turndown rules. Key dependencies are @modelcontextprotocol/sdk, puppeteer, puppeteer-extra, @mozilla/readability, jsdom, turndown, sanitize-html, openai, express, and zod.

Who it's for

Developers and MCP orchestrators who need to scrape webpages that require interactive handling - cookie banners, CAPTCHAs, paywalls, or age gates - and want clean Markdown output without writing that interaction logic themselves, including those who want to network-expose the scraper over SSE or HTTP rather than run it as a local stdio process.

Source README

MseeP.ai Security Assessment Badge

Puppeteer vision MCP Server

This Model Context Protocol (MCP) server provides a tool for scraping webpages and converting them to markdown format using Puppeteer, Readability, and Turndown. It features AI-driven interaction capabilities to handle cookies, captchas, and other interactive elements automatically.

Now easily runnable via npx!

Features

  • Scrapes webpages using Puppeteer with stealth mode
  • Uses AI-powered interaction to automatically handle:
    • Cookie consent banners
    • CAPTCHAs
    • Newsletter or subscription prompts
    • Paywalls and login walls
    • Age verification prompts
    • Interstitial ads
    • Any other interactive elements blocking content
  • Extracts main content with Mozilla's Readability
  • Converts HTML to well-formatted Markdown
  • Special handling for code blocks, tables, and other structured content
  • Accessible via the Model Context Protocol
  • Option to view browser interaction in real-time by disabling headless mode
  • Easily consumable as an npx package.

Quick Start with NPX

The recommended way to use this server is via npx, which ensures you're running the latest version without needing to clone or manually install.

  1. Prerequisites: Ensure you have Node.js and npm installed.

  2. Environment Setup:
    The server requires an OPENAI_API_KEY. You can provide this and other optional configurations in two ways:

    • .env file: Create a .env file in the directory where you will run the npx command.
    • Shell Environment Variables: Export the variables in your terminal session.

    Example .env file or shell exports:

    # Required
    OPENAI_API_KEY=your_api_key_here
    
    # Optional (defaults shown)
    # VISION_MODEL=gpt-4.1
    # API_BASE_URL=https://api.openai.com/v1   # Uncomment to override
    # TRANSPORT_TYPE=stdio                     # Options: stdio, sse, http
    # USE_SSE=true                             # Deprecated: use TRANSPORT_TYPE=sse instead
    # PORT=3001                                # Only used in sse/http modes
    # DISABLE_HEADLESS=true                    # Uncomment to see the browser in action
    
  3. Run the Server:
    Open your terminal and run:

    npx -y puppeteer-vision-mcp-server
    
    • The -y flag automatically confirms any prompts from npx.
    • This command will download (if not already cached) and execute the server.
    • By default, it starts in stdio mode. Set TRANSPORT_TYPE=sse or TRANSPORT_TYPE=http for HTTP server modes.

Using as an MCP Tool with NPX

This server is designed to be integrated as a tool within an MCP-compatible LLM orchestrator. Here's an example configuration snippet:

{
  "mcpServers": {
    "web-scraper": {
      "command": "npx",
      "args": ["-y", "puppeteer-vision-mcp-server"],
      "env": {
        "OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
        // Optional:
        // "VISION_MODEL": "gpt-4.1",
        // "API_BASE_URL": "https://api.example.com/v1",
        // "TRANSPORT_TYPE": "stdio", // or "sse" or "http"
        // "DISABLE_HEADLESS": "true" // To see the browser during operations
      }
    }
    // ... other MCP servers
  }
}

When configured this way, the MCP orchestrator will manage the lifecycle of the puppeteer-vision-mcp-server process.

Environment Configuration Details

Regardless of how you run the server (NPX or local development), it uses the following environment variables:

  • OPENAI_API_KEY: (Required) Your API key for accessing the vision model.
  • VISION_MODEL: (Optional) The model to use for vision analysis.
    • Default: gpt-4.1
    • Can be any model with vision capabilities.
  • API_BASE_URL: (Optional) Custom API endpoint URL.
    • Use this to connect to alternative OpenAI-compatible providers (e.g., Together.ai, Groq, Anthropic, local deployments).
  • TRANSPORT_TYPE: (Optional) The transport protocol to use.
    • Options: stdio (default), sse, http
    • stdio: Direct process communication (recommended for most use cases)
    • sse: Server-Sent Events over HTTP (legacy mode)
    • http: Streamable HTTP transport with session management
  • USE_SSE: (Optional, deprecated) Set to true to enable SSE mode over HTTP.
    • Deprecated: Use TRANSPORT_TYPE=sse instead.
  • PORT: (Optional) The port for the HTTP server in SSE or HTTP mode.
    • Default: 3001.
  • DISABLE_HEADLESS: (Optional) Set to true to run the browser in visible mode.
    • Default: false (browser runs in headless mode).

Communication Modes

The server supports three communication modes:

  1. stdio (Default): Communicates via standard input/output.
    • Perfect for direct integration with LLM tools that manage processes.
    • Ideal for command-line usage and scripting.
    • No HTTP server is started. This is the default mode.
  2. SSE mode: Communicates via Server-Sent Events over HTTP.
    • Enable by setting TRANSPORT_TYPE=sse in your environment.
    • Starts an HTTP server on the specified PORT (default: 3001).
    • Use when you need to connect to the tool over a network.
    • Connect to: http://localhost:3001/sse
  3. HTTP mode: Communicates via Streamable HTTP transport with session management.
    • Enable by setting TRANSPORT_TYPE=http in your environment.
    • Starts an HTTP server on the specified PORT (default: 3001).
    • Supports full session management and resumable connections.
    • Connect to: http://localhost:3001/mcp

Tool Usage (MCP Invocation)

The server provides a scrape-webpage tool.

Tool Parameters:

  • url (string, required): The URL of the webpage to scrape.
  • autoInteract (boolean, optional, default: true): Whether to automatically handle interactive elements.
  • maxInteractionAttempts (number, optional, default: 3): Maximum number of AI interaction attempts.
  • waitForNetworkIdle (boolean, optional, default: true): Whether to wait for network to be idle before processing.

Response Format:

The tool returns its result in a structured format:

  • content: An array containing a single text object with the raw markdown of the scraped webpage.
  • metadata: Contains additional information:
    • message: Status message.
    • success: Boolean indicating success.
    • contentSize: Size of the content in characters (on success).

Example Success Response:

{
  "content": [
    {
      "type": "text",
      "text": "# Page Title\n\nThis is the content..."
    }
  ],
  "metadata": {
    "message": "Scraping successful",
    "success": true,
    "contentSize": 8734
  }
}

Example Error Response:

{
  "content": [
    {
      "type": "text",
      "text": ""
    }
  ],
  "metadata": {
    "message": "Error scraping webpage: Failed to load the URL",
    "success": false
  }
}

How It Works

AI-Driven Interaction

The system uses vision-capable AI models (configurable via VISION_MODEL and API_BASE_URL) to analyze screenshots of web pages and decide on actions like clicking, typing, or scrolling to bypass overlays and consent forms. This process repeats up to maxInteractionAttempts.

Content Extraction

After interactions, Mozilla's Readability extracts the main content, which is then sanitized and converted to Markdown using Turndown with custom rules for code blocks and tables.

Installation & Development (for Modifying the Code)

If you wish to contribute, modify the server, or run a local development version:

  1. Clone the Repository:

    git clone https://github.com/djannot/puppeteer-vision-mcp.git
    cd puppeteer-vision-mcp
    
  2. Install Dependencies:

    npm install
    
  3. Build the Project:

    npm run build
    
  4. Set Up Environment:
    Create a .env file in the project's root directory with your OPENAI_API_KEY and any other desired configurations (see "Environment Configuration Details" above).

  5. Run for Development:

    npm start # Starts the server using the local build
    

    Or, for automatic rebuilding on changes:

    npm run dev
    

Customization (for Developers)

You can modify the behavior of the scraper by editing:

  • src/ai/vision-analyzer.ts (analyzePageWithAI function): Customize the AI prompt.
  • src/ai/page-interactions.ts (executeAction function): Add new action types.
  • src/scrapers/webpage-scraper.ts (visitWebPage function): Change Puppeteer options.
  • src/utils/markdown-formatters.ts: Adjust Turndown rules for Markdown conversion.

Dependencies

Key dependencies include:

  • @modelcontextprotocol/sdk
  • puppeteer, puppeteer-extra
  • @mozilla/readability, jsdom
  • turndown, sanitize-html
  • openai (or compatible API for vision models)
  • express (for SSE mode)
  • zod

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.