Volver al blog

CrewAI + Scrapeless: Brinda a tu agente Crew datos web en vivo

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

21-Jul-2026

Un equipo de CrewAI es útil solo hasta donde los agentes pueden acceder a las herramientas. Si le das a un agente de investigación nada más que un modelo de lenguaje, describirá con confianza una página que nunca abrió.

Conectar ese equipo al Servidor MCP Sin Scrapear soluciona el lado de entrada: los agentes obtienen control del navegador, extracción de páginas, búsqueda en Google y tendencias de Google como herramientas ordinarias de CrewAI, mientras que el renderizado, el enrutamiento proxy y la detección de anti-sabotaje permanecen en el servidor. Esta guía ejecuta la conexión de extremo a extremo y muestra la lista de herramientas, los esquemas de argumentos y el markdown que devuelve una llamada real.

Lo que esta configuración le da a tu equipo

Tus agentes obtienen 21 herramientas invocables de una sola conexión. El Servidor MCP Sin Scrapear las expone a través de HTTP transmitible, y crewai-tools convierte cada una en una BaseTool estándar de CrewAI que cualquier agente puede poseer.

Las herramientas se dividen en tres grupos:

  • Recuperación de páginasscrape_markdown, scrape_html y scrape_screenshot obtienen una URL y la devuelven en la forma que solicitaste.
  • Control del navegador en vivo — dieciséis herramientas browser_* que crean una sesión y luego hacen clic, escriben, desplazan, navegan, esperan y toman instantáneas dentro de ella.
  • Superficies de búsquedagoogle_search y google_trends.

Debido a que el trabajo ocurre del lado del servidor, el proceso de equipo se mantiene pequeño. No hay un navegador local que instalar, ni un grupo de proxies que gestionar, y no hay una versión de controlador que mantener alineada con un lanzamiento de Chrome.

Por qué el Servidor MCP Sin Scrapear

La especificación del Protocolo de Contexto del Modelo define cómo un cliente descubre e invoca herramientas en un servidor, lo que hace que una conexión valga más que un envoltorio escrito a mano: la lista de herramientas, los esquemas de argumentos y el sobre de resultados llegan todos del servidor en lugar de estar codificados a mano en tu proyecto. Las llamadas viajan como mensajes JSON-RPC 2.0, por lo que el formato de solicitud y respuesta es un estándar publicado en lugar de una convención de proveedor.

Scrapeless publica un punto final alojado, por lo que no hay un servidor que ejecutar. El transporte es HTTP transmitible, el mecanismo HTTP del protocolo, y la autenticación es un solo encabezado. Todo lo que necesita un agente de CrewAI es un diccionario. La misma clave respalda también al Navegador de Extracción de Scrapeless, que es el navegador en la nube que utilizan las herramientas browser_*, y la referencia de parámetros para cada herramienta vive en la documentación de Scrapeless.

Requisitos Previos

  • Python 3.10 o posterior. Tanto crewai como crewai-tools declaran actualmente >=3.10,<3.14.
  • Una clave API de Scrapeless del panel de control.
  • Una clave de proveedor de modelo para el LLM que utilice tu equipo. CrewAI usa por defecto OpenAI y lee OPENAI_API_KEY.

Nota: Los ejemplos a continuación se ejecutaron con una clave de Scrapeless pero sin una clave de proveedor de modelo. La conexión MCP, la descubrimiento de herramientas, los esquemas de argumentos, la invocación de herramientas y el adjunto de agentes se ejecutaron en vivo. La llamada final crew.kickoff() es una brecha de requisitos previos: necesita una clave de modelo, y el artículo marca ese paso en lugar de mostrar una salida inventada.

Instalación

bash Copy
pip install "crewai==1.15.4" "crewai-tools[mcp]==1.15.4"

El extra [mcp] incluye la biblioteca cliente mcp y mcpadapt, que es la capa que convierte las definiciones de herramientas MCP en herramientas nativas del marco.

Si tu entorno ya tiene un stack de OpenTelemetry, instala esos dos paquetes juntos como se muestra en lugar de uno a la vez. crewai fija opentelemetry-sdk~=1.42, y un conjunto de exportadores parcialmente actualizado causa un error de importación antes de que se ejecute cualquier parte de tu código.

Establece la clave en tu shell:

bash Copy
export SCRAPELESS_API_KEY="tu_clave_api_aquí"

Conectar a través de HTTP transmitible

MCPServerAdapter toma un diccionario que describe el servidor. La entrada headers lleva la clave API de Scrapeless:

python Copy
import os
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "https://api.scrapeless.com/mcp",
    "transport": "streamable-http",
    "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}

with MCPServerAdapter(server_params) as tools:
    names = sorted(t.name for t in tools)
    print(f"cantidad de herramientas: {len(names)}")
    for n in names:
        print("  -", n)

Ejecutarlo lista lo que el servidor realmente ofrece:

text Copy
cantidad de herramientas: 21
  - browser_click
  - browser_close
  - browser_create
  - browser_get_html
  - browser_get_text
  - browser_go_back
  - browser_go_forward
  - browser_goto
  - browser_press_key
  - browser_screenshot
  - browser_scroll
  - browser_scroll_to
  - browser_snapshot
  - browser_type
  - browser_wait
  - browser_wait_for
  - google_search
  - google_trends
  - scrape_html
  - scrape_markdown
  - scrape_screenshot

Dos detalles que vale la pena destacar. Los nombres son planos: no hay prefijo de servidor ni espacio de nombres con puntos, así que scrape_markdown es la cadena literal que un agente llamará. Y el administrador de contexto es importante: abre la sesión al entrar y la cierra al salir, por eso el adaptador se escribe como un bloque with en lugar de un constructor simple.

Dar a un Agente Solo las Herramientas que Necesita

Entregar las 21 herramientas a cada agente hace que el trabajo del modelo sea más difícil, no más fácil. MCPServerAdapter acepta nombres de herramientas después del diccionario del servidor y devuelve solo esas:

python Copy
import os
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "https://api.scrapeless.com/mcp",
    "transport": "streamable-http",
    "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}

with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
    print("herramientas filtradas:", [t.name for t in tools])
    for t in tools:
        schema = getattr(t, "args_schema", None)
        fields = list(schema.model_fields) if schema else "n/a"
        print(f"  {t.name} args: {fields}")
text Copy
herramientas filtradas: ['scrape_markdown', 'google_search']
  scrape_markdown args: ['url']
  google_search args: ['q', 'hl', 'gl']

Los esquemas de argumentos provienen del servidor, por lo que son el contrato real: scrape_markdown toma una sola url, y google_search toma una consulta más códigos de idioma y país. Un agente de investigación que solo necesita leer páginas y realizar búsquedas obtiene exactamente dos herramientas y no tiene un acceso de sesión de navegador para malutilizar.

¿Listo para integrar esto en tu propio equipo? Crea una cuenta gratuita en Scrapeless y conéctate con la clave desde tu panel de control.

Adjuntar las Herramientas a un Equipo

Las herramientas van directamente al constructor de Agent, y el agente entra en un Crew con su tarea:

python Copy
import os
from crewai import Agent, Task, Crew
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "https://api.scrapeless.com/mcp",
    "transport": "streamable-http",
    "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}

with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
    analyst = Agent(
        role="Analista de Investigación Web",
        goal="Convertir páginas públicas en markdown limpio para análisis posterior.",
        backstory="Trabaja con fuentes web públicas y devuelve notas estructuradas.",
        tools=tools,
        verbose=False,
    )
    print("herramientas del agente:", [t.name for t in analyst.tools])

    task = Task(
        description="Obtener https://quotes.toscrape.com/js/ y resumir los autores presentes.",
        expected_output="Una lista de nombres de autores encontrados en la página.",
        agent=analyst,
    )
    crew = Crew(agents=[analyst], tasks=[task], verbose=False)
    print("agentes del equipo:", len(crew.agents), "| tareas del equipo:", len(crew.tasks))
text Copy
herramientas del agente: ['scrape_markdown', 'google_search']
agentes del equipo: 1 | tareas del equipo: 1

El agente sostiene tanto herramientas proporcionadas por el servidor como el equipo está ensamblado. Todo hasta este punto funciona solo con la clave de Scrapeless.

Nota: crew.kickoff() es el único paso que necesita una clave de proveedor de modelo. Sin OPENAI_API_KEY configurada, CrewAI genera ValueError: OPENAI_API_KEY is required antes de la primera llamada al modelo, por lo que la ejecución se muestra como la línea que agregas más que como salida capturada.

python Copy
    result = crew.kickoff()
    print(result)

Qué Devuelve una Llamada a una Herramienta

Llamar a una herramienta directamente es la forma más rápida de ver la forma devuelta sin gastar tokens del modelo. scrape_markdown toma la URL y devuelve markdown:

python Copy
import os
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "https://api.scrapeless.com/mcp",
    "transport": "streamable-http",
    "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}

with MCPServerAdapter(server_params, "scrape_markdown") as tools:
    tool = list(tools)[0]
    md = tool.run(url="https://quotes.toscrape.com/js/")
    text = md if isinstance(md, str) else str(md)
    print("caracteres de markdown:", len(text))
    print("contiene a Einstein:", "Einstein" in text)
    print("primeros 180:", text[:180].replace("\n", " "))
text Copy
caracteres de markdown: 1580
contiene a Einstein: True
primeros 180: Respuesta:  "# [Quotes to Scrape](https://quotes.toscrape.com/)\n\n[Login](https://quotes.toscrape.com/login)\n\n“El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. 

La página objetivo construye su lista de citas en el navegador en lugar de enviarla en el HTML inicial, y las citas están presentes en el markdown de todos modos: el servidor renderizó la página antes de convertirla. Esa es la diferencia práctica entre una herramienta MCP respaldada por una infraestructura real y una simple búsqueda HTTP: el agente solicita una página y recibe la página que un usuario vería.
Markdown también es el formato que un modelo de lenguaje maneja de la manera más económica. Los encabezados, enlaces y la estructura de párrafos se mantienen, mientras que los scripts, estilos y el marcado de diseño no, por lo que el agente utiliza su contexto en el contenido.

Conclusión

Conectar CrewAI al Servidor MCP Scrapeless requiere un diccionario y un gestor de contexto. El servidor proporciona 21 herramientas con sus propios esquemas de argumentos, crewai-tools las convierte en herramientas nativas de CrewAI, y nombrar herramientas específicas en el adaptador mantiene la superficie de cada agente lo suficientemente pequeña para que un modelo la utilice bien.

La parte que vale la pena llevar a tu propio proyecto es el filtro de herramientas. Un equipo donde el agente de investigación tiene scrape_markdown y google_search, y un agente de navegación separado tiene el conjunto browser_*, brinda a cada modelo un menú corto y un trabajo claro.

Comienza con el plan gratuito de Scrapeless para obtener una clave, revisa los precios de Scrapeless cuando determines una carga de trabajo, y lee la visión general del Servidor MCP Scrapeless para tener la referencia completa de herramientas.

FAQ

P: ¿Cuál es el endpoint del Servidor MCP Scrapeless para CrewAI?

El endpoint alojado es https://api.scrapeless.com/mcp, accesible a través del transporte streamable-http con tu clave en el encabezado x-api-token. CrewAI no necesita ningún proceso de servidor local, porque las herramientas se sirven de forma remota.

P: ¿Cuántas herramientas expone el Servidor MCP Scrapeless?

Una conexión en vivo devuelve 21 herramientas: dieciséis herramientas de control de sesión browser_*, tres herramientas de recuperación de páginas (scrape_markdown, scrape_html, scrape_screenshot) y dos herramientas de búsqueda (google_search, google_trends). Revisa la lista en tiempo de ejecución en lugar de asumir, ya que un servidor puede agregar herramientas entre lanzamientos.

P: ¿Puedo limitar qué herramientas MCP recibe un agente?

Sí. Pasa los nombres de las herramientas a MCPServerAdapter después del diccionario del servidor — MCPServerAdapter(server_params, "scrape_markdown", "google_search") devuelve solo esas dos. Esto mantiene el menú de herramientas del modelo corto, lo que generalmente mejora la precisión de la selección.

P: ¿Necesita CrewAI una clave LLM para conectarse a un servidor MCP?

No. El apretón de manos MCP, el descubrimiento de herramientas y las llamadas directas a las herramientas funcionan solo con la clave de Scrapeless. Se necesita una clave de proveedor de modelo en el momento en que llamas a crew.kickoff(), porque es cuando un agente le pregunta a un modelo qué herramienta usar.

P: ¿Por qué usar un gestor de contexto con MCPServerAdapter?

El bloque with abre la sesión MCP al entrar y la cierra al salir. Construir el adaptador sin uno deja la conexión abierta, y las herramientas solo son válidas mientras la sesión esté activa; acceder a ellas después de que se cierra la sesión genera un error.

P: ¿ maneja scrape_markdown páginas que se renderizan en el navegador?

Sí. Una página que escribe su contenido a través de JavaScript todavía devuelve ese contenido en el markdown, porque el renderizado sucede del lado del servidor antes de la conversión. Una simple solicitud HTTP de la misma URL devuelve el marcado pre-renderizado en su lugar.

P: ¿Qué debo revisar antes de apuntar un equipo a un sitio en vivo?

Revisa los términos del sitio y sus directivas /robots.txt, que siguen el estándar del Protocolo de Exclusión de Robots. Mantén la recolección a páginas públicas y da al equipo una lista de tareas delimitada en lugar de una instrucción de rastreo indefinida; de lo contrario, un bucle de agente puede emitir muchas más solicitudes de las que pretendías.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar