web-scrapper-stdio
Servicio de Web Scrapper (MCP Stdin/Stdout & HTTP)
Un servidor MCP basado en Python para un web scraping headless robusto: extrae el contenido de texto principal de páginas web y genera Markdown, texto o HTML para una integración fluida con IA y automatización.
Características principales
Scraping con navegador headless (Playwright, BeautifulSoup, Markdownify)
Genera Markdown, texto o HTML
Diseñado para integración MCP (Model Context Protocol) stdio/JSON-RPC
Transporte dual: stdio (predeterminado) y HTTP transmitible para modo de servicio compartido
Pool de navegadores persistente: Chromium permanece activo entre solicitudes para un scraping rápido
DOM wait inteligente: Estabilización de contenido basada en MutationObserver en lugar de esperas fijas
Dockerizado, con imágenes preconstruidas
Configurable mediante variables de entorno
Manejo robusto de errores (tiempos de espera, errores HTTP, Cloudflare, etc.)
Limitación de tasa por dominio
Fácil integración con herramientas de IA e IDEs (Cursor, Claude Desktop, Continue, JetBrains, Zed, etc.)
Instalación con un clic para Cursor, instalador interactivo para Claude
Related MCP server: Fetcher MCP
Inicio rápido
Ejecutar con Docker (modo stdio — un contenedor por cliente)
docker run -i --rm ghcr.io/justazul/web-scrapper-stdioEjecutar como servicio HTTP compartido (un contenedor, múltiples clientes)
docker run -d --name web-scraper \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HTTP_PORT=8080 \
-e BROWSER_POOL_SIZE=3 \
-p 8080:8080 \
--shm-size=3gb \
ghcr.io/justazul/web-scrapper-stdioO con Docker Compose:
docker compose --profile service up -dInstalación con un clic (Cursor IDE)
Modos de transporte
stdio (predeterminado)
Cada cliente MCP inicia su propio contenedor mediante docker run -i. Simple, sin configuración, funciona con cualquier cliente MCP.
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/justazul/web-scrapper-stdio"]
}
}
}HTTP transmitible (servicio compartido)
Ejecute un contenedor persistente que sirva a múltiples clientes MCP a través de HTTP. Ahorra recursos al ejecutar múltiples instancias de herramientas de IA (por ejemplo, múltiples sesiones de Claude Code).
Inicie el servicio:
docker run -d --name web-scraper \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HTTP_PORT=8080 \
-p 8080:8080 \
--shm-size=3gb \
ghcr.io/justazul/web-scrapper-stdioConéctese desde su cliente MCP:
{
"mcpServers": {
"web-scrapper": {
"url": "http://localhost:8080/mcp"
}
}
}Integración con herramientas de IA e IDEs
Este servicio admite la integración con una amplia gama de herramientas de IA e IDEs que implementan el Model Context Protocol (MCP). A continuación, se muestran ejemplos de configuración listos para usar para los entornos más populares. Reemplace la imagen/etiqueta según sea necesario para compilaciones personalizadas.
Cursor IDE
Agréguelo a su .cursor/mcp.json (nivel de proyecto) o ~/.cursor/mcp.json (global):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}Claude Desktop
Agréguelo a su configuración MCP de Claude Desktop (normalmente claude_desktop_config.json):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}Claude Code
Agréguelo a su .mcp.json o ~/.claude.json global:
Modo stdio (un contenedor por sesión):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/justazul/web-scrapper-stdio"]
}
}
}Modo HTTP (servicio compartido — inicie el servicio primero):
{
"mcpServers": {
"web-scrapper": {
"url": "http://localhost:8080/mcp"
}
}
}Continue (Plugin de VSCode/JetBrains)
Agréguelo a su continue.config.json o mediante la configuración MCP del plugin de Continue:
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}IntelliJ IDEA (Asistente de IA de JetBrains)
Vaya a Settings > Tools > AI Assistant > Model Context Protocol (MCP) y agregue un nuevo servidor. Use:
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}Zed Editor
Agréguelo a su configuración MCP de Zed (consulte la documentación de Zed para la ruta exacta):
{
"mcpServers": {
"web-scrapper-stdio": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/justazul/web-scrapper-stdio"
]
}
}
}Uso
Servidor MCP (Herramienta/Prompt)
Este web scrapper se utiliza como una herramienta MCP (Model Context Protocol), lo que permite que sea utilizado directamente por modelos de IA u otras automatizaciones.
Herramienta: scrape_web
Parámetros:
url(cadena, requerido): La URL a scrapearmax_length(entero, opcional): Longitud máxima del contenido devuelto (predeterminado: ilimitado)timeout_seconds(entero, opcional): Tiempo de espera en segundos para la carga de la página (predeterminado: 30)user_agent(cadena, opcional): Cadena de User-Agent personalizada pasada directamente al navegador (predeterminado: un agente aleatorio)wait_for_network_idle(booleano, opcional): Esperar a que la actividad de red se estabilice antes de scrapear (predeterminado: true)custom_elements_to_remove(lista de cadenas, opcional): Elementos HTML adicionales (selectores CSS) a eliminar antes de la extraccióngrace_period_seconds(flotante, opcional): Tiempo de espera para el renderizado JS después de la navegación. Utiliza MutationObserver para una detección inteligente. Establezca en 0 para omitir por completo. (predeterminado: 0.5)output_format(cadena, opcional):markdown,textohtml(predeterminado:markdown)click_selector(cadena, opcional): Si se proporciona, hace clic en el elemento que coincide con este selector después de la navegación y antes de la extracción
Retorna:
Contenido con formato Markdown extraído de la página web, como una cadena
Los errores se informan como cadenas que comienzan con
[ERROR] ...
Ejemplo: Uso de click_selector y custom_elements_to_remove
{
"url": "http://uitestingplayground.com/clientdelay",
"click_selector": "#ajaxButton",
"grace_period_seconds": 10,
"custom_elements_to_remove": [".ads-banner", "#popup"],
"output_format": "markdown"
}Prompt: scrape
Parámetros:
url(cadena, requerido): La URL a scrapearoutput_format(cadena, opcional):markdown,textohtml(predeterminado:markdown)
Retorna:
Contenido extraído de la página web en el formato elegido
Nota:
Markdown se devuelve de forma predeterminada, pero se puede solicitar texto o HTML a través de
output_format.El scrapper no verifica robots.txt e intentará obtener cualquier URL proporcionada.
No se incluye ninguna API REST o herramienta CLI; esta es una herramienta pura MCP stdio/JSON-RPC.
El scrapper siempre extrae el contenido completo de
<body>de las páginas web, aplicando solo la eliminación de ruido esencial (eliminando script, style, nav, footer, aside, header y etiquetas similares que no son de contenido). El scrapper detecta y maneja las pantallas de desafío de Cloudflare, devolviendo una cadena de error específica.
Configuración
Puede anular la mayoría de las opciones de configuración utilizando variables de entorno:
Configuración principal
DEFAULT_TIMEOUT_SECONDS: Tiempo de espera para cargas de página y navegación (predeterminado: 30)DEFAULT_MIN_CONTENT_LENGTH: Longitud mínima de contenido para texto extraído (predeterminado: 100)DEFAULT_MIN_CONTENT_LENGTH_SEARCH_APP: Longitud mínima de contenido para dominios search.app (predeterminado: 30)DEFAULT_MIN_SECONDS_BETWEEN_REQUESTS: Retraso mínimo entre solicitudes al mismo dominio (predeterminado: 2)DEFAULT_GRACE_PERIOD_SECONDS: Período de gracia predeterminado para renderizado JS (predeterminado: 0.5)DEBUG_LOGS_ENABLED: Establezca entruepara habilitar registros de nivel de depuración (predeterminado:false)
Pool de navegadores
BROWSER_POOL_ENABLED: Habilitar pool de navegadores persistente (predeterminado:true). Establezca enfalsepara el inicio del navegador por solicitud (comportamiento original).BROWSER_POOL_SIZE: Número de instancias de Chromium a mantener activas (predeterminado: 2). Cada instancia utiliza ~100-200MB de RAM.
Transporte
MCP_TRANSPORT: Modo de transporte —stdioostreamable-http(predeterminado:stdio)MCP_HTTP_PORT: Puerto del servidor HTTP cuando se usa transporte streamable-http (predeterminado: 8080)MCP_HTTP_HOST: Dirección de enlace del servidor HTTP (predeterminado:0.0.0.0)
Bypass de Cloudflare
CAPTCHA_API_KEY: Clave API para el servicio de resolución de captcha. Cuando se establece, los desafíos de Cloudflare Turnstile se resuelven automáticamente. Cuando está vacío (predeterminado), las páginas protegidas por CF devuelven un error.CAPTCHA_PROVIDER: Proveedor de resolución de captcha —2captcha,capsolverocapmonster(predeterminado:2captcha)CAPTCHA_BASE_URL: Endpoint de API del resolvedor personalizado (predeterminado: utiliza la URL oficial del proveedor)CAPTCHA_TIMEOUT: Tiempo de espera en segundos para la resolución de captcha (predeterminado: 120)
Configuración de pruebas
DEFAULT_TEST_REQUEST_TIMEOUT: Tiempo de espera para solicitudes de prueba (predeterminado: 10)DEFAULT_TEST_NO_DELAY_THRESHOLD: Umbral para omitir retrasos artificiales en las pruebas (predeterminado: 0.5)
Manejo de errores y limitaciones
El scrapper detecta y devuelve errores por fallos de navegación, tiempos de espera, errores HTTP (incluido 404) y desafíos anti-bot de Cloudflare.
La limitación de tasa se aplica por dominio (predeterminado: 2 segundos entre solicitudes).
Bypass de Cloudflare: Utiliza Patchright (anti-detección a nivel de CDP) para evasión pasiva. La mayoría de los sitios protegidos por CF se scrapean sin activar un desafío. Cuando se activa un desafío Turnstile y se establece
CAPTCHA_API_KEY, se resuelve automáticamente a través de una API de terceros.Limitaciones:
Sin API REST o herramienta CLI (solo MCP stdio/JSON-RPC)
Sin soporte para contenido que no sea HTML (PDF, imágenes, etc.)
Sin autenticación o gestión de sesiones para páginas protegidas
No destinado a scrapear a gran escala o violar los términos del sitio
Desarrollo y pruebas
Ejecución de pruebas (Docker Compose)
Todas las pruebas deben ejecutarse usando Docker Compose. No ejecute pruebas fuera de Docker.
Todas las pruebas:
docker compose up --build --abort-on-container-exit testSolo pruebas del servidor MCP:
docker compose up --build --abort-on-container-exit test_mcpSolo pruebas del scrapper:
docker compose up --build --abort-on-container-exit test_scrapperEjecución de benchmarks
docker compose run --rm benchmarkLos resultados se almacenan en benchmarks/RESULTS.md.
Contribución
¡Las contribuciones son bienvenidas! Por favor, abra issues o pull requests para correcciones de errores, características o mejoras. Si planea realizar cambios significativos, abra un issue primero para discutir su propuesta.
Licencia
Este proyecto está bajo la Licencia MIT.
This server cannot be installed
Maintenance
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
- AlicenseAqualityAmaintenanceThis server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.189,405MIT
- -licenseCquality-maintenanceA server that allows fetching web page content using Playwright headless browser with AI-powered capabilities for efficient information extraction.29,5437
- Alicense-qualityCmaintenanceA context-optimized web scraping server that converts HTML to markdown/text and applies CSS selectors server-side, reducing token usage by 70-90% while providing AI tools with clean, filtered web content.7MIT
- Alicense-qualityDmaintenanceProvides advanced web scraping with HTTP client, smart content extraction to Markdown, browser automation via Playwright, screenshot/PDF generation, and Docker sandbox execution environments.1MIT
Related MCP Connectors
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Zenrows MCP server — Fetch, Extract, Batch, and Browser Sessions for AI coding assistants
Converts any URL to clean, LLM-ready Markdown using real Chrome browsers
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/JustAzul/web-scrapper-stdio'
If you have feedback or need assistance with the MCP directory API, please join our Discord server