crawlbrulee

Scraping web nativo de la UE para agentes de IA y desarrolladores: convierte cualquier página en markdown, capturas de pantalla y más

Documentación

el servidor oficial de Model Context Protocol — @crawlbrulee/mcp. permite que agentes compatibles con MCP (Claude Code, Cursor, Codex, Claude Desktop) extraigan páginas, mapeen sitios y consulten el uso como llamadas de herramientas nativas. envuelve @crawlbrulee/sdk, habla stdio y es ejecutable con npx. código abierto bajo Apache-2.0 — fuente en GitHub.

instalación

Claude Code:

claude mcp add crawlbrulee \
  --env CRAWLBRULEE_API_KEY=cwbl_... \
  -- npx -y @crawlbrulee/mcp

Cursor — añade a ~/.cursor/mcp.json:

{
  "mcpServers": {
    "crawlbrulee": {
      "command": "npx",
      "args": ["-y", "@crawlbrulee/mcp"],
      "env": { "CRAWLBRULEE_API_KEY": "cwbl_..." }
    }
  }
}

el mismo patrón funciona para Codex, Claude Desktop y cualquier host stdio de MCP: establece command: npx, args: ["-y", "@crawlbrulee/mcp"] y reenvía CRAWLBRULEE_API_KEY en el bloque de entorno.

como plugin — el plugin crawlbrulee incluye este servidor con las habilidades del agente y solicita tu clave durante la instalación. en Claude Code:

/plugin marketplace add crawlbrulee/crawlbrulee-skills
/plugin install crawlbrulee@crawlbrulee

configuración

variable de entornorequeridadescripción
CRAWLBRULEE_API_KEYsíclave de API enviada como Authorization: Bearer ….

la clave se lee en la primera llamada a una herramienta, por lo que un error tipográfico aparece como un error claro de herramienta en lugar de un fallo al iniciar.

herramientas

herramientadescripción
scrapeobtiene una url → markdown, html, enlaces, imágenes, captura de pantalla, metadatos, elementos.
scrape_asyncenvía un trabajo de extracción de forma asíncrona; devuelve un job_id inmediatamente.
scrape_statusconsulta el estado de un trabajo asíncrono (pending / running / done / failed).
scrape_resultobtiene el resultado de un trabajo asíncrono completado (misma forma que scrape).
mapenumera las urls de un sitio (sitemap + descubrimiento en la página).
usagecréditos actuales, cuota, concurrencia, tiempo de reinicio. no acepta argumentos.
whoamiidentidad de la organización y del token detrás de la clave configurada.

ejemplo de entrada de scrape — solo se requiere url:

{
  "url": "https://example.com",
  "extract": { "markdown": true, "links": true },
  "require_js": false,
  "proxy": "basic"
}

para leer valores con nombre en lugar de toda la página, añade extract.elements a la entrada de scrape o scrape_async. cada clave es un nombre, cada valor un selector css o un objeto:

{
  "url": "https://books.toscrape.com/",
  "extract": {
    "elements": {
      "heading": "h1",
      "books": {
        "selector": "article.product_pod",
        "all": true,
        "fields": {
          "title": { "selector": "h3 a", "output": "attribute", "attribute": "title" },
          "price": ".price_color"
        }
      }
    }
  }
}

los valores se devuelven en elements, con los mismos nombres, sin coste adicional. consulta elements para los formatos de solicitud, reglas de selector y límites.

flujo de trabajo asíncrono

usa scrape_async en lugar de scrape para páginas de larga duración (renderizado js pesado, capturas de pantalla de página completa). acepta la misma entrada que scrape, además de un webhook: { url, metadata } opcional. consulta scrape_status con el job_id devuelto hasta que el estado sea done, luego llama a scrape_result para obtener la página. si se adjuntó un webhook al enviar, entregamos un único POST scrape.complete firmado a esa url cuando el trabajo finaliza (con metadata repetido bajo data.metadata), para que un agente pueda omitir la consulta por completo.

{ "job_id": "job_abc123" }

objeto de uso

las respuestas de scrape, scrape_result y map (y scrape_status una vez que un trabajo está done) incluyen un bloque response_meta.usage de nivel superior, para que un agente pueda informar qué se entregó y cuánto costó la llamada. cada operación incluye { total_credit_cost, engine_credit_cost, proxy_multiplier, engine, proxy }; las operaciones de extracción también incluyen screenshot_slicing_credit_cost. map no lo hace y limita engine a http | cache.

los fallos de herramientas devuelven un resultado de error mcp: [<errorName>] <message>, con (HTTP <status>) añadido solo cuando aplica un estado http. si CRAWLBRULEE_API_KEY no está configurado en el host, las llamadas fallan con un error sintético missing_api_key (en lugar de un fallo al iniciar) — los agentes pueden ramificar según el código de error en cualquier caso.