Skip to main content
Glama
Prog-up

Web Scraper MCP

by Prog-up

Web Scraper MCP

Un servidor autoalojado del Model Context Protocol que ofrece a un cliente LLM (Claude Code, Cursor, ChatGPT) la misma superficie de herramientas que los servicios de scraping de pago — scrape, crawl, map, search, extract, interact, deep_research — ejecutándose completamente en tu propio hardware.

Sin servicios de proxy/CAPTCHA de pago: el anti-bot es autoalojado (Chromium sin interfaz + playwright-stealth, robots.txt, limitación de velocidad cortés). Los sitios endurecidos aún pueden bloquear; ver Limitaciones.

Herramientas

Herramienta

Qué hace

scrape

Una URL → markdown limpio (sin plantillas). Primero estático, con respaldo automático del navegador para páginas JS.

crawl / check_crawl_status

Trabajo de rastreo BFS en segundo plano (deduplicación, límites de profundidad/páginas); consulta los resultados.

map

Lista los enlaces de una página (opcionalmente del mismo dominio) — decide qué rastrear.

search

Búsqueda web. Backend conectable: DuckDuckGo (predeterminado), SearXNG, Brave o Tavily.

extract

Obtiene una página y extrae JSON estructurado que coincida con tu esquema, mediante un LLM.

browser_navigate / browser_act / browser_close

Controla una sesión de navegador persistente (clic/rellenar/presionar) usando instantáneas ARIA de bajo costo de tokens.

deep_research

Buscar → leer las mejores fuentes → devolver un informe de síntesis con citas.

extract y deep_research requieren ANTHROPIC_API_KEY.

Related MCP server: Universal Web Data Extraction Platform

Inicio rápido

uv sync                      # install deps (uses the pinned uv.lock)
uv run playwright install chromium
export SCRAPER_AUTH_TOKEN=$(openssl rand -hex 32)
uv run web-scraper-mcp       # HTTP server on http://127.0.0.1:8000/mcp

Stdio (local, para un cliente de escritorio): SCRAPER_TRANSPORT=stdio uv run web-scraper-mcp.

Docker

La forma más rápida de empezar es descargando la imagen preconstruida desde DockerHub.

# Pull the latest image
docker pull PROG_UP_USERNAME/web-scraper-mcp:latest

# Run the container (with Anthropic / Claude)
docker run -p 8000:8000 \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  -e ANTHROPIC_API_KEY=sk-ant-api03-... \
  PROG_UP_USERNAME/web-scraper-mcp:latest

# Or run the container over stdio (useful for local MCP clients)
docker run -i --rm \
  -e SCRAPER_TRANSPORT=stdio \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  PROG_UP_USERNAME/web-scraper-mcp:latest

(Asegúrate de reemplazar PROG_UP_USERNAME con tu nombre de usuario real de DockerHub).

Uso de Modelos Locales (Ollama) y Ventanas de Contexto

Si prefieres ejecutar modelos localmente en lugar de usar la API de Anthropic, el servidor es totalmente compatible con Ollama como backend alternativo para las herramientas extract y deep_research.

docker run -p 8000:8000 \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  -e SCRAPER_OLLAMA_HOST=http://host.docker.internal:11434 \
  -e SCRAPER_EXTRACT_MODEL=qwen3.5:2b \
  -e SCRAPER_RESEARCH_MODEL=qwen3.5:2b \
  PROG_UP_USERNAME/web-scraper-mcp:latest

[!WARNING] ¡Las ventanas de contexto son críticas! El scraping web produce una cantidad masiva de Markdown. extract puede enviar hasta 100,000 caracteres y deep_research puede enviar hasta 16,000 caracteres al LLM.

Por defecto, Claude maneja contextos masivos de forma nativa. Sin embargo, la ventana de contexto predeterminada de Ollama (num_ctx) a menudo está configurada a solo 2,048 tokens. Si pasas una página enorme de Wikipedia a un modelo local, truncará silenciosamente el prompt (eliminando tus instrucciones) y devolverá cadenas vacías.

Pasamos automáticamente "num_ctx": 32768 a Ollama en las cargas útiles de la API para evitar esta truncación. ¡Asegúrate de que tu máquina local tenga suficiente RAM/VRAM para soportar una ventana de contexto de 32K al usar Ollama!

Registro en un cliente (mcp.json)

Si se ejecuta vía HTTP:

{
  "mcpServers": {
    "web-scraper": {
      "url": "http://127.0.0.1:8000/mcp",
      "headers": { "Authorization": "Bearer your_secure_token_here" }
    }
  }
}

Si se ejecuta vía stdio (Docker):

{
  "mcpServers": {
    "web-scraper": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "SCRAPER_TRANSPORT=stdio",
        "-e", "SCRAPER_OLLAMA_HOST=http://host.docker.internal:11434",
        "-e", "SCRAPER_EXTRACT_MODEL=qwen3.5:2b",
        "-e", "SCRAPER_RESEARCH_MODEL=qwen3.5:2b",
        "PROG_UP_USERNAME/web-scraper-mcp:latest"
      ]
    }
  }
}

Configuración

Todos los ajustes son variables de entorno (prefijo SCRAPER_), o un archivo .env — ver .env.example.

Variable

Predeterminado

Notas

SCRAPER_AUTH_TOKEN

(sin establecer)

Token Bearer para el endpoint HTTP. Requerido para cualquier despliegue en red; sin establecer = sin autenticación (se advierte).

SCRAPER_HOST / SCRAPER_PORT

127.0.0.1 / 8000

Dirección de enlace. La imagen Docker establece el host 0.0.0.0.

SCRAPER_MAX_CONCURRENT_PAGES

8

Límite de concurrencia de páginas sin interfaz (limitado por RAM/CPU).

SCRAPER_MAX_CRAWL_PAGES / _DEPTH

100 / 3

Límites máximos para trabajos de rastreo.

SCRAPER_PER_DOMAIN_DELAY_S

1.0

Límite de velocidad cortés por dominio.

SCRAPER_RESPECT_ROBOTS

true

Respetar robots.txt.

SCRAPER_ALLOW_PRIVATE_NETWORKS

false

Mantener en false — desactiva la protección SSRF si es true.

ANTHROPIC_API_KEY

(sin establecer)

Habilita extract / deep_research.

SCRAPER_SEARXNG_URL, BRAVE_API_KEY, TAVILY_API_KEY

(sin establecer)

Backends de búsqueda opcionales (el primero configurado gana, si no, DuckDuckGo).

Seguridad

  • Protección SSRF — cada URL obtenida (y cada salto de redirección) se resuelve por DNS y se rechaza si apunta a una dirección privada / de bucle local / enlace local / metadatos de nube. El navegador también aborta las solicitudes de subrecursos a IPs privadas.

  • Autenticación — token Bearer en el transporte HTTP; enlazar a localhost por defecto.

  • Límites de recursos — tamaño de respuesta, tiempo de espera, concurrencia de páginas, límites de páginas/profundidad de rastreo para proteger el host.

  • robots.txt + limitación de velocidad activados por defecto.

  • Contenedor — se ejecuta como usuario no root; secretos solo mediante variables de entorno.

Cadena de suministro — verificación de la imagen

El CI firma la imagen sin claves con cosign (Sigstore) usando la identidad OIDC de GitLab, y adjunta una atestación SBOM SPDX. Verifica antes de ejecutar:

cosign verify \
  --certificate-oidc-issuer https://gitlab.cri.epita.fr \
  --certificate-identity-regexp 'https://gitlab.cri.epita.fr/enzo.juhel/web-scraper//.*' \
  registry.gitlab.cri.epita.fr/enzo.juhel/web-scraper@sha256:...

Benchmark

benchmarks/run.py puntúa nuestro scrape/extract contra conjuntos de datos públicos y la línea base de Crawl4AI, emitiendo una tarjeta de puntuación (F1/precisión por tipo de página + una sección de Limitaciones). Ejecuta localmente o mediante el trabajo manual de CI benchmark:

uv run python benchmarks/run.py --output scorecard.md

Limitaciones

  • Sin proxies/CAPTCHA de pago: los sitios muy protegidos (LinkedIn, Amazon, desafíos de Cloudflare) a veces nos bloquearán. La tarjeta de puntuación del benchmark cuantifica dónde.

  • La extracción de contenido principal es fuerte en artículos, más débil en foros / páginas de productos / listados (una propiedad conocida de todos los extractores).

  • Estado de rastreo/sesión en memoria — de un solo proceso y un solo usuario por diseño.

Desarrollo

uv run pre-commit install        # local lint/secret hooks
uv run ruff check . && uv run ruff format --check .
uv run mypy src
uv run pytest -q
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables web scraping and crawling capabilities for LLM clients, supporting single-page scraping, multi-page website crawling, and web search with multiple engines (Playwright, Cheerio, Puppeteer) and flexible output formats including markdown, HTML, text, and screenshots.
    18
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to extract content from websites using automated static and dynamic scraping engines with built-in anti-bot protections. It provides tools for web data retrieval and stores results in MongoDB with support for JSON and CSV exports.
  • A
    license
    A
    quality
    A
    maintenance
    Web scraping, crawling, and structured data extraction for AI agents. 5 tools: scrape (clean markdown from any URL), crawl (entire sites), map (discover URLs), extract (structured JSON), and search. 833ms avg latency, single binary, self-hostable.
    8
    852
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLMs to fetch and extract web content using browser automation, OCR, and multiple extraction methods, handling JavaScript rendering and anti-scraping techniques.
    17
    MIT

View all related MCP servers

Related MCP Connectors

  • Enable language models to perform advanced AI-powered web scraping with enterprise-grade reliabili…

  • Scrape, crawl, map & search the web. Open-source, self-hostable Rust crawler & search for AI agents.

  • Live web access for agents: scrape, SERP search, crawl/map, 74 collectors, datasets, proxies.

View all MCP Connectors

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/Prog-up/web-scraper-mcp'

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