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.
- 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
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
https://mcp.firecrawl.dev/{FIRECRAWL_API_KEY}/v2/sse
env FIRECRAWL_API_KEY=fc-TU_API_KEY npx -y firecrawl-mcp
npm install -g firecrawl-mcp
Prueba nuestro servidor MCP en el playground de MCP.so o en Klavis AI.
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
- Abre la configuración de Cursor
- Ve a Features > MCP Servers
- Haz clic en ”+ Add new global MCP server”
- 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
- Abre la configuración de Cursor
- Ve a Features > MCP Servers
- Haz clic en ”+ Add New MCP Server”
- 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.
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"
}
}
}
}
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
Para instalar Firecrawl para Claude Desktop automáticamente a través de Smithery:
npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude
Para una instalación con un clic, haz clic en uno de los botones de instalación a continuación…
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"
}
}
}
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
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 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:
-
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)
-
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
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
}
}
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
}
}
}
Inicia un rastreo asíncrono con opciones avanzadas.
{
"name": "firecrawl_crawl",
"arguments": {
"url": "https://example.com",
"maxDepth": 2,
"limit": 100,
"allowExternalLinks": false,
"deduplicateSimilarURLs": true
}
}
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
}
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)
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...
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
}
# Instalar dependencias
npm install
# Compilar
npm run build
# Ejecutar pruebas
npm test
- Haz un fork del repositorio
- Crea una rama para tu feature
- Ejecuta las pruebas:
npm test
- 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 MIT: consulta el archivo LICENSE para más detalles