Una implementación de servidor del Model Context Protocol (MCP) que integra Firecrawl para capacidades de web scraping. Nuestro servidor MCP es de código abierto y está disponible en GitHub.

Funcionalidades

  • Scraping web, rastreo y descubrimiento
  • Búsqueda y extracción de contenido
  • Investigación profunda y scraping por lotes
  • Compatibilidad en la nube y autogestionada
  • Compatibilidad con SSE

Instalación

Puedes usar nuestra URL alojada de forma remota o ejecutar el servidor localmente. Obtén tu clave de API en https://firecrawl.dev/app/api-keys

URL alojada de forma remota

https://mcp.firecrawl.dev/{FIRECRAWL_API_KEY}/v2/sse

Ejecutar con npx

env FIRECRAWL_API_KEY=fc-TU_API_KEY npx -y firecrawl-mcp

Instalación manual

npm install -g firecrawl-mcp
Prueba nuestro servidor MCP en el playground de MCP.so o en Klavis AI.

Ejecución en Cursor

Agregar el servidor MCP de Firecrawl a Cursor

Instalación manual

Configuración de Cursor 🖥️ Nota: Requiere Cursor versión 0.45.6+ Para ver las instrucciones de configuración más actualizadas, consulta la documentación oficial de Cursor sobre cómo configurar servidores MCP: Guía de configuración de servidores MCP de Cursor Para configurar Firecrawl MCP en Cursor v0.48.6
  1. Abre la configuración de Cursor
  2. Ve a Features > MCP Servers
  3. Haz clic en ”+ Add new global MCP server”
  4. Ingresa el siguiente código:
    {
      "mcpServers": {
        "firecrawl-mcp": {
          "command": "npx",
          "args": ["-y", "firecrawl-mcp"],
          "env": {
            "FIRECRAWL_API_KEY": "YOUR-API-KEY"
          }
        }
      }
    }
    
Para configurar Firecrawl MCP en Cursor v0.45.6
  1. Abre la configuración de Cursor
  2. Ve a Features > MCP Servers
  3. Haz clic en ”+ Add New MCP Server”
  4. Ingresa lo siguiente:
    • Name: “firecrawl-mcp” (o el nombre que prefieras)
    • Type: “command”
    • Command: env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp
Si usas Windows y tienes problemas, prueba cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"
Reemplaza your-api-key por tu clave de API de Firecrawl. Si aún no tienes una, puedes crear una cuenta y obtenerla en https://www.firecrawl.dev/app/api-keys Después de agregarlo, actualiza la lista de servidores MCP para ver las nuevas tools. El Composer Agent usará Firecrawl MCP automáticamente cuando corresponda, pero puedes solicitarlo explícitamente describiendo tus necesidades de web scraping. Accede al Composer con Command+L (Mac), selecciona “Agent” junto al botón de envío e ingresa tu consulta.

Ejecutar en Windsurf

Añade esto a tu ./codeium/windsurf/model_config.json:
{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "TU_CLAVE_API"
      }
    }
  }
}

Ejecución con modo SSE

Para ejecutar el servidor localmente usando Server-Sent Events (SSE) en lugar del transporte predeterminado por stdio:
env SSE_LOCAL=true FIRECRAWL_API_KEY=fc-TU_API_KEY npx -y firecrawl-mcp
Use la URL: http://localhost:3000/v2/sse o https://mcp.firecrawl.dev/{FIRECRAWL_API_KEY}/v2/sse

Instalación mediante Smithery (heredado)

Para instalar Firecrawl para Claude Desktop automáticamente a través de Smithery:
npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

Ejecutar en VS Code

Para una instalación con un clic, haz clic en uno de los botones de instalación a continuación… Instalar con NPX en VS Code Instalar con NPX en VS Code Insiders Para la instalación manual, agrega el siguiente bloque JSON a tu archivo User Settings (JSON) en VS Code. Puedes hacerlo presionando Ctrl + Shift + P y escribiendo Preferences: Open User Settings (JSON).
{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "apiKey",
        "description": "Clave de la API de Firecrawl",
        "password": true
      }
    ],
    "servers": {
      "firecrawl": {
        "command": "npx",
        "args": ["-y", "firecrawl-mcp"],
        "env": {
          "FIRECRAWL_API_KEY": "${input:apiKey}"
        }
      }
    }
  }
}
Opcionalmente, puedes añadirlo a un archivo llamado .vscode/mcp.json en tu espacio de trabajo. Esto te permitirá compartir la configuración con otras personas:
{
  "inputs": [
    {
      "type": "promptString",
      "id": "apiKey",
      "description": "Clave de la API de Firecrawl",
      "password": true
    }
  ],
  "servers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "${input:apiKey}"
      }
    }
  }
}

Ejecutar en Claude Desktop

Agrega esto al archivo de configuración de Claude:
{
  "mcpServers": {
    "firecrawl": {
      "url": "https://mcp.firecrawl.dev/{YOUR_API_KEY}/v2/sse"
    }
  }
}

Ejecución en Claude Code

Agrega el servidor MCP de Firecrawl usando la CLI de Claude Code:
claude mcp add firecrawl -e FIRECRAWL_API_KEY=tu-clave-de-api -- npx -y firecrawl-mcp

Configuración

Variables de entorno

Requisitos para la API en la nube

  • FIRECRAWL_API_KEY: Tu clave de API de Firecrawl
    • Requerida al usar la API en la nube (por defecto)
    • Opcional al usar una instancia autogestionada con FIRECRAWL_API_URL
  • FIRECRAWL_API_URL (opcional): Endpoint de API personalizado para instancias autogestionadas
    • Ejemplo: https://firecrawl.your-domain.com
    • Si no se proporciona, se usará la API en la nube (requiere clave de API)

Configuración opcional

Configuración de reintentos
  • FIRECRAWL_RETRY_MAX_ATTEMPTS: Número máximo de reintentos (predeterminado: 3)
  • FIRECRAWL_RETRY_INITIAL_DELAY: Espera inicial en milisegundos antes del primer reintento (predeterminado: 1000)
  • FIRECRAWL_RETRY_MAX_DELAY: Espera máxima en milisegundos entre reintentos (predeterminado: 10000)
  • FIRECRAWL_RETRY_BACKOFF_FACTOR: Multiplicador de backoff exponencial (predeterminado: 2)
Monitoreo del uso de créditos
  • FIRECRAWL_CREDIT_WARNING_THRESHOLD: Umbral de advertencia para el uso de créditos (predeterminado: 1000)
  • FIRECRAWL_CREDIT_CRITICAL_THRESHOLD: Umbral crítico para el uso de créditos (predeterminado: 100)

Ejemplos de configuración

Para usar la API en la nube con reintentos personalizados y seguimiento de créditos:
# Requerido para la API en la nube
export FIRECRAWL_API_KEY=your-api-key

# Configuración opcional de reintentos
export FIRECRAWL_RETRY_MAX_ATTEMPTS=5        # Aumenta el número máximo de reintentos
export FIRECRAWL_RETRY_INITIAL_DELAY=2000    # Comienza con un retraso de 2 s
export FIRECRAWL_RETRY_MAX_DELAY=30000       # Retraso máximo de 30 s
export FIRECRAWL_RETRY_BACKOFF_FACTOR=3      # Retroceso más agresivo

# Monitoreo opcional de créditos
export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000    # Advertencia a los 2000 créditos
export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500    # Crítico a los 500 créditos
Para instancias autoalojadas:
# Requerido para instalaciones autogestionadas
export FIRECRAWL_API_URL=https://firecrawl.tu-dominio.com

# Autenticación opcional para instalaciones autogestionadas
export FIRECRAWL_API_KEY=your-api-key  # Si tu instancia requiere autenticación

# Configuración personalizada de reintentos
export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
export FIRECRAWL_RETRY_INITIAL_DELAY=500     # Comienza con reintentos más rápidos

Configuración personalizada con Claude Desktop

Añade esto a tu claude_desktop_config.json:
{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "TU_API_KEY_AQUI",

        "FIRECRAWL_RETRY_MAX_ATTEMPTS": "5",
        "FIRECRAWL_RETRY_INITIAL_DELAY": "2000",
        "FIRECRAWL_RETRY_MAX_DELAY": "30000",
        "FIRECRAWL_RETRY_BACKOFF_FACTOR": "3",

        "FIRECRAWL_CREDIT_WARNING_THRESHOLD": "2000",
        "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD": "500"
      }
    }
  }
}

Configuración del sistema

El servidor incluye varios parámetros configurables que se pueden establecer mediante variables de entorno. Estos son los valores predeterminados si no se especifican:
const CONFIG = {
  retry: {
    maxAttempts: 3, // Número de intentos de reintento para solicitudes limitadas por tasa
    initialDelay: 1000, // Retraso inicial antes del primer reintento (en milisegundos)
    maxDelay: 10000, // Retraso máximo entre reintentos (en milisegundos)
    backoffFactor: 2, // Multiplicador para el backoff exponencial
  },
  credit: {
    warningThreshold: 1000, // Advertir cuando el uso de crédito alcance este nivel
    criticalThreshold: 100, // Alerta crítica cuando el uso de crédito alcance este nivel
  },
};
Estas configuraciones controlan:
  1. Comportamiento de reintentos
    • Reintenta automáticamente solicitudes fallidas debido a límites de tasa
    • Utiliza backoff exponencial para evitar sobrecargar la API
    • Ejemplo: con la configuración predeterminada, los reintentos se realizarán en:
      • 1.er reintento: 1 segundo de retraso
      • 2.º reintento: 2 segundos de retraso
      • 3.er reintento: 4 segundos de retraso (limitado por maxDelay)
  2. Monitoreo del uso de créditos
    • Realiza seguimiento del consumo de créditos de la API para uso en la nube
    • Muestra advertencias en umbrales especificados
    • Ayuda a prevenir interrupciones inesperadas del servicio
    • Ejemplo: con la configuración predeterminada:
      • Advertencia con 1000 créditos restantes
      • Alerta crítica con 100 créditos restantes

Limitación de tasas y procesamiento por lotes

El servidor aprovecha las capacidades integradas de Firecrawl para la limitación de tasas y el procesamiento por lotes:
  • Gestión automática de límites con backoff exponencial
  • Procesamiento paralelo eficiente para operaciones por lotes
  • Encolado y control inteligente del flujo de solicitudes
  • Reintentos automáticos ante errores transitorios

Herramientas disponibles

1. Herramienta de scraping (firecrawl_scrape)

Extrae contenido de una única URL con opciones avanzadas.
{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formatos": ["markdown"],
    "onlyMainContent": true,
    "waitFor": 1000,
    "timeout": 30000,
    "mobile": false,
    "includeTags": ["article", "main"],
    "excludeTags": ["nav", "footer"],
    "skipTlsVerification": false
  }
}

2. Herramienta de scraping por lotes (firecrawl_batch_scrape)

Extrae datos de múltiples URL de forma eficiente con límites de tasa integrados y procesamiento en paralelo.
{
  "name": "firecrawl_batch_scrape",
  "arguments": {
    "urls": ["https://example1.com", "https://example2.com"],
    "options": {
      "formats": ["markdown"],
      "onlyMainContent": true
    }
  }
}
La respuesta incluye el ID de la operación para comprobar el estado:
{
  "content": [
    {
      "type": "text",
      "text": "Operación en lote en cola con ID: batch_1. Usa firecrawl_check_batch_status para consultar el progreso."
    }
  ],
  "isError": false
}

3. Comprobar el estado del lote (firecrawl_check_batch_status)

Comprueba el estado de una operación por lotes.
{
  "name": "firecrawl_check_batch_status",
  "arguments": {
    "id": "batch_1"
  }
}
Busca en la web y, opcionalmente, extrae contenido de los resultados de búsqueda.
{
  "name": "firecrawl_search",
  "arguments": {
    "query": "tu búsqueda",
    "limit": 5,
    "lang": "en",
    "country": "us",
    "scrapeOptions": {
      "formatos": ["markdown"],
      "onlyMainContent": true
    }
  }
}

5. Herramienta de rastreo (firecrawl_crawl)

Inicia un rastreo asíncrono con opciones avanzadas.
{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://example.com",
    "maxDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
  }
}

6. Herramienta de extracción (firecrawl_extract)

Extrae información estructurada de páginas web usando capacidades de LLM. Compatible con extracción mediante IA en la nube y LLM autoalojados.
{
  "name": "firecrawl_extract",
  "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extrae la información del producto, incluido el nombre, el precio y la descripción",
    "systemPrompt": "Eres un asistente útil que extrae información de productos"
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "price": { "type": "number" },
        "description": { "type": "string" }
      },
      "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
  }
}
Ejemplo de respuesta:
{
  "content": [
    {
      "type": "text",
      "text": {
        "name": "Producto de ejemplo",
        "price": 99.99,
        "description": "Esta es una descripción de un producto de ejemplo"
      }
    }
  ],
  "isError": false
}

Opciones de la herramienta de extracción:

  • urls: Matriz de URL de las que extraer información
  • prompt: Prompt personalizado para la extracción con el LLM
  • systemPrompt: Prompt del sistema para guiar al LLM
  • schema: Esquema JSON para extraer datos estructurados
  • allowExternalLinks: Permite extraer desde enlaces externos
  • enableWebSearch: Habilita la búsqueda web para obtener contexto adicional
  • includeSubdomains: Incluye subdominios en la extracción
Al usar una instancia autogestionada, la extracción utilizará tu LLM configurado. En la API en la nube, usa el servicio de LLM gestionado de Firecrawl.

7. Herramienta de investigación avanzada (firecrawl_deep_research)

Realiza investigación web profunda sobre una consulta utilizando rastreo inteligente, búsqueda y análisis con LLM.
{
  "name": "firecrawl_deep_research",
  "arguments": {
    "query": "¿Cómo funciona la tecnología de captura de carbono?"
    "maxDepth": 3,
    "timeLimit": 120,
    "maxUrls": 50
  }
}
Argumentos:
  • query (string, obligatorio): La pregunta de investigación o el tema por explorar.
  • maxDepth (number, opcional): Profundidad máxima de recursión para el rastreo/búsqueda (valor predeterminado: 3).
  • timeLimit (number, opcional): Límite de tiempo en segundos para la sesión de investigación (valor predeterminado: 120).
  • maxUrls (number, opcional): Número máximo de URL a analizar (valor predeterminado: 50).
Devuelve:
  • Análisis final generado por un LLM a partir de la investigación. (data.finalAnalysis)
  • También puede incluir acciones estructuradas y las fuentes utilizadas durante el proceso de investigación.

8. Generar herramienta LLMs.txt (firecrawl_generate_llmstxt)

Genera un archivo estándar llms.txt (y opcionalmente llms-full.txt) para un dominio específico. Este archivo define cómo los modelos de lenguaje amplio deben interactuar con el sitio.
{
  "name": "firecrawl_generate_llmstxt",
  "arguments": {
    "url": "https://example.com",
    "maxUrls": 20,
    "showFullText": true
  }
}
Argumentos:
  • url (string, obligatorio): La URL base del sitio web que se va a analizar.
  • maxUrls (number, opcional): Número máximo de URL a incluir (valor predeterminado: 10).
  • showFullText (boolean, opcional): Indica si se deben incluir los contenidos de llms-full.txt en la respuesta.
Devuelve:
  • Contenido generado del archivo llms.txt y, opcionalmente, de llms-full.txt (data.llmstxt y/o data.llmsfulltxt)

Sistema de registro

El servidor incluye un sistema de registro completo:
  • Estado y progreso de las operaciones
  • Métricas de rendimiento
  • Monitoreo del uso de créditos
  • Seguimiento de los límites de tasa
  • Condiciones de error
Ejemplos de mensajes de registro:
[INFO] Servidor MCP de Firecrawl inicializado correctamente
[INFO] Iniciando scrape para la URL: https://example.com
[INFO] Operación por lotes en cola con ID: batch_1
[WARNING] El uso de créditos alcanzó el umbral de aviso
[ERROR] Límite de solicitudes excedido, reintentando en 2 s...

Gestión de errores

El servidor ofrece una gestión de errores robusta:
  • Reintentos automáticos ante errores transitorios
  • Gestión de límites de tasa con backoff
  • Mensajes de error detallados
  • Advertencias sobre el uso de créditos
  • Resiliencia de la red
Ejemplo de respuesta de error:
{
  "content": [
    {
      "type": "text",
      "text": "Error: Se superó el límite de tasa. Reintentando en 2 segundos..."
    }
  ],
  "isError": true
}

Desarrollo

# Instalar dependencias
npm install

# Compilar
npm run build

# Ejecutar pruebas
npm test

Contribuir

  1. Haz un fork del repositorio
  2. Crea una rama para tu feature
  3. Ejecuta las pruebas: npm test
  4. Envía un pull request

Gracias a los colaboradores

Gracias a @vrknetha y @cawstudios por la implementación inicial. Gracias a MCP.so y Klavis AI por alojar el servicio, y a @gstarwd, @xiangkaiz y @zihaolin96 por integrar nuestro servidor.

Licencia

Licencia MIT: consulta el archivo LICENSE para más detalles