Une implémentation de serveur Model Context Protocol (MCP) intégrant Firecrawl pour des fonctionnalités de web scraping. Notre serveur MCP est open source et disponible sur GitHub.

Fonctionnalités

  • Scraping, crawling et découverte du web
  • Recherche et extraction de contenu
  • Recherche approfondie et scraping par lots
  • Prise en charge du cloud et de l’auto‑hébergement
  • Prise en charge des SSE

Installation

Vous pouvez utiliser notre URL hébergée ou exécuter le serveur en local. Récupérez votre clé API sur https://firecrawl.dev/app/api-keys

URL hébergée à distance

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

Exécuter avec npx

env FIRECRAWL_API_KEY=fc-VOTRE_CLÉ_API npx -y firecrawl-mcp

Installation manuelle

npm install -g firecrawl-mcp
Testez notre serveur MCP sur le playground de MCP.so ou sur Klavis AI.

Utilisation avec Cursor

Ajouter le serveur MCP Firecrawl à Cursor

Installation manuelle

Configuration de Cursor 🖥️ Remarque : nécessite Cursor version 0.45.6+ Pour des instructions de configuration à jour, consultez la documentation officielle de Cursor sur la configuration des serveurs MCP : Guide de configuration du serveur MCP de Cursor Pour configurer Firecrawl MCP dans Cursor v0.48.6
  1. Ouvrez les paramètres de Cursor
  2. Allez dans Features > MCP Servers
  3. Cliquez sur ”+ Add new global MCP server”
  4. Saisissez le code suivant :
    {
      "mcpServers": {
        "firecrawl-mcp": {
          "command": "npx",
          "args": ["-y", "firecrawl-mcp"],
          "env": {
            "FIRECRAWL_API_KEY": "YOUR-API-KEY"
          }
        }
      }
    }
    
Pour configurer Firecrawl MCP dans Cursor v0.45.6
  1. Ouvrez les paramètres de Cursor
  2. Allez dans Features > MCP Servers
  3. Cliquez sur ”+ Add New MCP Server”
  4. Renseignez les éléments suivants :
    • Name: “firecrawl-mcp” (ou le nom de votre choix)
    • Type: “command”
    • Command: env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp
Si vous utilisez Windows et rencontrez des problèmes, essayez cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"
Remplacez your-api-key par votre clé API Firecrawl. Si vous n’en avez pas encore, créez un compte et récupérez-la via https://www.firecrawl.dev/app/api-keys Après l’ajout, actualisez la liste des serveurs MCP pour voir les nouveaux outils. Le Composer Agent utilisera automatiquement Firecrawl MCP lorsque c’est pertinent, mais vous pouvez aussi le demander explicitement en décrivant vos besoins en web scraping. Accédez au Composer via Command+L (Mac), sélectionnez « Agent » à côté du bouton d’envoi, puis saisissez votre requête.

Exécuter sur Windsurf

Ajoutez ceci à votre ./codeium/windsurf/model_config.json :
{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "VOTRE_API_KEY"
      }
    }
  }
}

Exécution en mode SSE

Pour exécuter le serveur en local avec les Server-Sent Events (SSE) plutôt que le transport stdio par défaut :
env SSE_LOCAL=true FIRECRAWL_API_KEY=fc-VOTRE_CLÉ_API npx -y firecrawl-mcp
Utilisez l’URL : http://localhost:3000/v2/sse ou https://mcp.firecrawl.dev/{FIRECRAWL_API_KEY}/v2/sse

Installation via Smithery (ancien)

Pour installer automatiquement Firecrawl pour Claude Desktop via Smithery :
npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

Exécution dans VS Code

Pour une installation en un clic, cliquez sur l’un des boutons ci-dessous… Install with NPX in VS Code Install with NPX in VS Code Insiders Pour une installation manuelle, ajoutez le bloc JSON suivant à votre fichier Paramètres utilisateur (JSON) dans VS Code. Pour ce faire, appuyez sur Ctrl + Shift + P et tapez Preferences: Open User Settings (JSON).
{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "apiKey",
        "description": "Clé d’API Firecrawl",
        "password": true
      }
    ],
    "servers": {
      "firecrawl": {
        "command": "npx",
        "args": ["-y", "firecrawl-mcp"],
        "env": {
          "FIRECRAWL_API_KEY": "${input:apiKey}"
        }
      }
    }
  }
}
Vous pouvez également l’ajouter à un fichier nommé .vscode/mcp.json dans votre espace de travail. Cela vous permettra de partager la configuration avec d’autres :
{
  "inputs": [
    {
      "type": "promptString",
      "id": "apiKey",
      "description": "Clé d’API Firecrawl"
      "password": true
    }
  ],
  "servers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "${input:apiKey}"
      }
    }
  }
}

Exécution sur Claude Desktop

Ajoutez ceci au fichier de configuration de Claude :
{
  "mcpServers": {
    "firecrawl": {
      "url": "https://mcp.firecrawl.dev/{YOUR_API_KEY}/v2/sse"
    }
  }
}

Exécution avec Claude Code

Ajoutez le serveur MCP de Firecrawl à l’aide de la CLI de Claude Code :
claude mcp add firecrawl -e FIRECRAWL_API_KEY=your-api-key -- npx -y firecrawl-mcp

Configuration

Variables d’environnement

Requis pour l’API Cloud

  • FIRECRAWL_API_KEY : votre clé API Firecrawl
    • Requise lors de l’utilisation de l’API cloud (par défaut)
    • Facultative lors de l’utilisation d’une instance auto-hébergée avec FIRECRAWL_API_URL
  • FIRECRAWL_API_URL (facultatif) : point de terminaison API personnalisé pour les instances auto-hébergées
    • Exemple : https://firecrawl.your-domain.com
    • Si elle n’est pas renseignée, l’API cloud sera utilisée (nécessite une clé API)

Configuration facultative

Configuration des relances
  • FIRECRAWL_RETRY_MAX_ATTEMPTS: Nombre maximal de tentatives de relance (par défaut : 3)
  • FIRECRAWL_RETRY_INITIAL_DELAY: Délai initial en millisecondes avant la première relance (par défaut : 1000)
  • FIRECRAWL_RETRY_MAX_DELAY: Délai maximal en millisecondes entre les relances (par défaut : 10000)
  • FIRECRAWL_RETRY_BACKOFF_FACTOR: Facteur de backoff exponentiel (par défaut : 2)
Surveillance de l’utilisation des crédits
  • FIRECRAWL_CREDIT_WARNING_THRESHOLD: Seuil d’avertissement pour l’utilisation des crédits (par défaut : 1000)
  • FIRECRAWL_CREDIT_CRITICAL_THRESHOLD: Seuil critique pour l’utilisation des crédits (par défaut : 100)

Exemples de configuration

Pour l’utilisation de l’API cloud avec des tentatives de reprise personnalisées et le suivi des crédits :
# Requis pour l’API cloud
export FIRECRAWL_API_KEY=your-api-key

# Paramètres de nouvelle tentative (facultatif)
export FIRECRAWL_RETRY_MAX_ATTEMPTS=5        # Augmenter le nombre maximal de tentatives
export FIRECRAWL_RETRY_INITIAL_DELAY=2000    # Commencer avec un délai de 2 s
export FIRECRAWL_RETRY_MAX_DELAY=30000       # Délai maximal de 30 s
export FIRECRAWL_RETRY_BACKOFF_FACTOR=3      # Backoff plus agressif

# Surveillance des crédits (facultatif)
export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000    # Avertissement à 2000 crédits
export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500    # Seuil critique à 500 crédits
Pour une instance auto‑hébergée :
# Requis pour l’auto‑hébergement
export FIRECRAWL_API_URL=https://firecrawl.your-domain.com

# Authentification facultative pour l’auto‑hébergement
export FIRECRAWL_API_KEY=your-api-key  # Si votre instance requiert une authentification

# Configuration personnalisée des tentatives
export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
export FIRECRAWL_RETRY_INITIAL_DELAY=500     # Démarrer avec des tentatives plus rapides

Configuration personnalisée avec Claude Desktop

Ajoutez ceci à votre fichier claude_desktop_config.json :
{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "VOTRE_CLEF_API_ICI",

        "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"
      }
    }
  }
}

Configuration du système

Le serveur propose plusieurs paramètres configurables pouvant être définis via des variables d’environnement. Voici les valeurs par défaut si rien n’est spécifié :
const CONFIG = {
  retry: {
    maxAttempts: 3, // Nombre de tentatives de réessai pour les requêtes limitées par le débit
    initialDelay: 1000, // Délai initial avant le premier réessai (en millisecondes)
    maxDelay: 10000, // Délai maximal entre les réessais (en millisecondes)
    backoffFactor: 2, // Multiplicateur pour l’exponentiel de backoff
  },
  credit: {
    warningThreshold: 1000, // Avertir lorsque l’utilisation des crédits atteint ce seuil
    criticalThreshold: 100, // Alerte critique lorsque l’utilisation des crédits atteint ce seuil
  },
};
Ces paramètres contrôlent :
  1. Comportement de relance
    • Relance automatiquement les requêtes échouées en raison des limites de débit
    • Utilise un retour arrière exponentiel (exponential backoff) pour éviter de surcharger l’API
    • Exemple : avec les paramètres par défaut, les relances seront tentées aux moments suivants :
      • 1re relance : délai de 1 seconde
      • 2e relance : délai de 2 secondes
      • 3e relance : délai de 4 secondes (plafonné par maxDelay)
  2. Suivi de l’utilisation des crédits
    • Suit la consommation de crédits pour l’utilisation de l’API cloud
    • Émet des avertissements à des seuils définis
    • Aide à prévenir les interruptions de service imprévues
    • Exemple : avec les paramètres par défaut :
      • Avertissement à 1 000 crédits restants
      • Alerte critique à 100 crédits restants

Limitation de débit et traitement par lots

Le serveur utilise les fonctionnalités intégrées de Firecrawl pour la limitation de débit et le traitement par lots :
  • Gestion automatique des limites de débit avec backoff exponentiel
  • Traitement parallèle efficace pour les opérations par lots
  • Mise en file d’attente et limitation intelligente des requêtes
  • Réessais automatiques en cas d’erreurs transitoires

Outils disponibles

1. Outil d’extraction (firecrawl_scrape)

Extraire le contenu d’une URL unique avec des options avancées.
{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formats": ["markdown"],
    "onlyMainContent": true,
    "waitFor": 1000,
    "timeout": 30000,
    "mobile": false,
    "includeTags": ["article", "main"],
    "excludeTags": ["nav", "footer"],
    "skipTlsVerification": false
  }
}

2. Outil d’extraction par lots (firecrawl_batch_scrape)

Exploitez plusieurs URL efficacement grâce à une limitation de débit intégrée et un traitement parallèle.
{
  "name": "firecrawl_batch_scrape",
  "arguments": {
    "urls": ["https://example1.com", "https://example2.com"],
    "options": {
      "formats": ["markdown"],
      "onlyMainContent": true
    }
  }
}
La réponse inclut l’ID d’opération pour vérifier l’état :
{
  "content": [
    {
      "type": "text",
      "text": "Opération par lots mise en file d’attente avec l’ID : batch_1. Utilisez firecrawl_check_batch_status pour suivre la progression."
    }
  ],
  "isError": false
}

3. Vérifier l’état du lot (firecrawl_check_batch_status)

Vérifiez l’état d’une opération par lots.
{
  "name": "firecrawl_check_batch_status",
  "arguments": {
    "id": "batch_1"
  }
}
Recherchez sur le Web et, si vous le souhaitez, extrayez le contenu des résultats de recherche.
{
  "name": "firecrawl_search",
  "arguments": {
    "query": "votre requête de recherche",
    "limit": 5,
    "lang": "fr",
    "country": "fr",
    "scrapeOptions": {
      "formats": ["markdown"],
      "onlyMainContent": true
    }
  }
}

5. Outil d’exploration (firecrawl_crawl)

Démarrez une exploration asynchrone avec des options avancées.
{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://exemple.com",
    "maxDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
  }
}

6. Outil d’extraction (firecrawl_extract)

Extrayez des informations structurées à partir de pages web à l’aide de LLM. Prend en charge l’extraction via IA cloud et via des LLM auto‑hébergés.
{
  "name": "firecrawl_extract",
  "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extraire les informations produit, y compris le nom, le prix et la description",
    "systemPrompt": "Vous êtes un assistant utile chargé d’extraire des informations produit"
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "price": { "type": "number" },
        "description": { "type": "string" }
      },
      "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
  }
}
Exemple de réponse :
{
  "content": [
    {
      "type": "text",
      "text": {
        "name": "Example Product",
        "price": 99.99,
        "description": "Ceci est un exemple de description de produit"
      }
    }
  ],
  "isError": false
}

Options de l’outil d’extraction :

  • urls : Tableau d’URL à partir desquelles extraire des informations
  • prompt : Invite personnalisée pour l’extraction par le LLM
  • systemPrompt : Invite système pour guider le LLM
  • schema : Schéma JSON pour l’extraction de données structurées
  • allowExternalLinks : Autoriser l’extraction à partir de liens externes
  • enableWebSearch : Activer la recherche web pour un contexte supplémentaire
  • includeSubdomains : Inclure les sous-domaines dans l’extraction
Avec une instance auto-hébergée, l’extraction utilise votre LLM configuré. Avec l’API cloud, elle utilise le service LLM managé de Firecrawl.

7. Outil de recherche approfondie (firecrawl_deep_research)

Effectuez des recherches web approfondies sur une requête à l’aide d’un crawl intelligent, de la recherche et de l’analyse par LLM.
{
  "name": "firecrawl_deep_research",
  "arguments": {
    "query": "Comment fonctionne la technologie de captage du carbone ?",
    "maxDepth": 3,
    "timeLimit": 120,
    "maxUrls": 50
  }
}
Arguments :
  • query (string, requis) : Question de recherche ou sujet à explorer.
  • maxDepth (number, optionnel) : Profondeur de récursion maximale pour le crawling/la recherche (par défaut : 3).
  • timeLimit (number, optionnel) : Limite de temps en secondes pour la session de recherche (par défaut : 120).
  • maxUrls (number, optionnel) : Nombre maximal d’URL à analyser (par défaut : 50).
Renvoie :
  • Analyse finale générée par un LLM à partir de la recherche. (data.finalAnalysis)
  • Peut également inclure des actions structurées et les sources utilisées durant le processus de recherche.

8. Générer l’outil LLMs.txt (firecrawl_generate_llmstxt)

Génère un fichier llms.txt standardisé (et éventuellement llms-full.txt) pour un domaine donné. Ce fichier définit comment les grands modèles de langage doivent interagir avec le site.
{
  "name": "firecrawl_generate_llmstxt",
  "arguments": {
    "url": "https://exemple.com",
    "maxUrls": 20,
    "showFullText": true
  }
}
Arguments :
  • url (string, obligatoire) : URL de base du site web à analyser.
  • maxUrls (number, facultatif) : Nombre maximal d’URL à inclure (par défaut : 10).
  • showFullText (boolean, facultatif) : Indique s’il faut inclure le contenu de llms-full.txt dans la réponse.
Renvoie :
  • Contenu généré du fichier llms.txt et, le cas échéant, de llms-full.txt (data.llmstxt et/ou data.llmsfulltxt)

Système de journalisation

Le serveur inclut une journalisation complète :
  • État et progression des opérations
  • Indicateurs de performance
  • Suivi de l’utilisation des crédits
  • Suivi des limites de débit
  • Conditions d’erreur
Exemples de messages de journal :
[INFO] Serveur MCP Firecrawl initialisé avec succès
[INFO] Lancement du scraping pour l’URL : https://example.com
[INFO] Opération par lots mise en file d’attente avec l’ID : batch_1
[WARNING] L’utilisation des crédits a atteint le seuil d’alerte
[ERROR] Limite de débit dépassée, nouvelle tentative dans 2 s…

Gestion des erreurs

Le serveur offre une gestion des erreurs robuste :
  • Réessais automatiques pour les erreurs transitoires
  • Gestion des limites de débit avec backoff
  • Messages d’erreur détaillés
  • Avertissements sur l’utilisation des crédits
  • Résilience réseau
Exemple de réponse d’erreur :
{
  "content": [
    {
      "type": "text",
      "text": "Erreur : limite de débit dépassée. Nouvelle tentative dans 2 secondes…"
    }
  ],
  "isError": true
}

Développement

# Installer les dépendances
npm install

# Générer le build
npm run build

# Lancer les tests
npm test

Contribuer

  1. Forkez le dépôt
  2. Créez une branche pour votre fonctionnalité
  3. Exécutez les tests : npm test
  4. Ouvrez une pull request

Merci aux contributeurs

Merci à @vrknetha et @cawstudios pour la mise en œuvre initiale ! Merci à MCP.so et Klavis AI pour l’hébergement, ainsi qu’à @gstarwd, @xiangkaiz et @zihaolin96 d’avoir intégré notre serveur.

Licence

Licence MIT — voir le fichier LICENSE pour plus de détails