Firecrawl MCP Server
officielAjoute des capacités puissantes de scraping web et de recherche aux clients LLM comme Cursor et Claude.
Documentation
Serveur MCP Firecrawl
Un serveur Model Context Protocol (MCP) qui apporte Firecrawl aux agents IA compatibles MCP — recherchez, extrayez et interagissez avec le web en direct pour un contexte propre et prêt à l'emploi pour les agents.
Un grand merci à @vrknetha, @knacklabs pour l'implémentation initiale !
Fonctionnalités
- Recherchez sur le web et obtenez le contenu complet des pages
- Extrayez n'importe quelle URL en données structurées et propres
- Interagissez avec les pages — cliquez, naviguez et opérez
- Recherche approfondie avec un agent autonome
- Nouvelles tentatives automatiques et limitation de débit
- Support cloud et auto-hébergé
- Support SSE
Essayez notre serveur MCP sur le playground de MCP.so ou sur Klavis AI.
Installation
Exécution avec npx
env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp
Installation manuelle
npm install -g firecrawl-mcp
Exécution sur Cursor
Configuration de Cursor 🖥️ Note : Nécessite Cursor version 0.45.6+ Pour les instructions de configuration les plus à jour, veuillez vous référer à la documentation officielle de Cursor sur la configuration des serveurs MCP : Guide de configuration du serveur MCP Cursor
Pour configurer Firecrawl MCP dans Cursor v0.48.6
- Ouvrez les paramètres de Cursor
- Allez dans Fonctionnalités > Serveurs MCP
- Cliquez sur "+ Ajouter un nouveau serveur MCP global"
- Entrez 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
- Ouvrez les paramètres de Cursor
- Allez dans Fonctionnalités > Serveurs MCP
- Cliquez sur "+ Ajouter un nouveau serveur MCP"
- Entrez ce qui suit :
- Nom : "firecrawl-mcp" (ou le nom de votre choix)
- Type : "command"
- Commande :
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, vous pouvez créer un compte et l'obtenir depuis https://www.firecrawl.dev/app/api-keys
Après l'ajout, actualisez la liste des serveurs MCP pour voir les nouveaux outils. L'Agent Composer utilisera automatiquement Firecrawl MCP lorsque cela est approprié, mais vous pouvez le demander explicitement en décrivant vos besoins d'extraction web. Accédez au Composer via Commande+L (Mac), sélectionnez "Agent" à côté du bouton de soumission, et entrez votre requête.
Exécution sur Windsurf
Ajoutez ceci à votre ./codeium/windsurf/model_config.json :
{
"mcpServers": {
"mcp-server-firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_API_KEY"
}
}
}
}
Exécution avec le mode local HTTP diffusable
Pour exécuter le serveur en utilisant HTTP diffusable localement au lieu du transport stdio par défaut :
env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp
Utilisez l'url : http://localhost:3000/mcp
Installation via Smithery (Legacy)
Pour installer Firecrawl pour Claude Desktop automatiquement via Smithery :
npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude
Exécution sur VS Code
Pour une installation en un clic, cliquez sur l'un des boutons d'installation ci-dessous...
Pour une installation manuelle, ajoutez le bloc JSON suivant à votre fichier de paramètres utilisateur (JSON) dans VS Code. Vous pouvez le faire en appuyant sur Ctrl + Shift + P et en tapant Preferences: Open User Settings (JSON).
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "apiKey",
"description": "Firecrawl API Key",
"password": true
}
],
"servers": {
"firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "${input:apiKey}"
}
}
}
}
}
Optionnellement, vous pouvez l'ajouter à un fichier appelé .vscode/mcp.json dans votre espace de travail. Cela vous permettra de partager la configuration avec d'autres :
{
"inputs": [
{
"type": "promptString",
"id": "apiKey",
"description": "Firecrawl API Key",
"password": true
}
],
"servers": {
"firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "${input:apiKey}"
}
}
}
}
Configuration
Variables d'environnement
Requis pour l'API Cloud
FIRECRAWL_API_KEY: Votre clé API Firecrawl- Requis lors de l'utilisation de l'API cloud (par défaut)
- Optionnel lors de l'utilisation d'une instance auto-hébergée avec
FIRECRAWL_API_URL
FIRECRAWL_API_URL(Optionnel) : Point de terminaison API personnalisé pour les instances auto-hébergées- Exemple :
https://firecrawl.your-domain.com - S'il n'est pas fourni, l'API cloud sera utilisée (nécessite une clé API)
- Exemple :
OAuth MCP (Jetons d'accès Bearer)
Firecrawl hébergé peut émettre des jetons d'accès OAuth (fco_…) via le serveur d'autorisation sur firecrawl.dev. Ce serveur MCP transmet les informations d'identification qu'il résout à l'API Firecrawl en tant que Authorization: Bearer ….
- Transports de flux HTTP (
CLOUD_SERVICE=true,HTTP_STREAMABLE_SERVER=true, ouSSE_LOCAL=true) : Les clients doivent envoyerAuthorization: Bearer <fco_access_token>sur les requêtes MCP. Un jeton porteur OAuth prend le pas surx-firecrawl-api-key/x-api-keylorsque les deux sont présents. - stdio : Utilisez
FIRECRAWL_OAUTH_TOKENpour un jeton d'accès statique, ou continuez à utiliserFIRECRAWL_API_KEYpour une clé API.
Utilisez uniquement les jetons d'accès (fco_…). Les jetons de rafraîchissement (fcr_…) doivent être échangés au point de terminaison du jeton, et non transmis à l'API d'extraction/recherche.
Configuration optionnelle
Configuration des nouvelles tentatives
FIRECRAWL_RETRY_MAX_ATTEMPTS: Nombre maximum de tentatives (par défaut : 3)FIRECRAWL_RETRY_INITIAL_DELAY: Délai initial en millisecondes avant la première nouvelle tentative (par défaut : 1000)FIRECRAWL_RETRY_MAX_DELAY: Délai maximum en millisecondes entre les nouvelles tentatives (par défaut : 10000)FIRECRAWL_RETRY_BACKOFF_FACTOR: Multiplicateur d'attente exponentielle (par défaut : 2)
Surveillance de l'utilisation des crédits
FIRECRAWL_CREDIT_WARNING_THRESHOLD: Seuil d'avertissement d'utilisation des crédits (par défaut : 1000)FIRECRAWL_CREDIT_CRITICAL_THRESHOLD: Seuil critique d'utilisation des crédits (par défaut : 100)
Exemples de configuration
Pour l'utilisation de l'API cloud avec des nouvelles tentatives et une surveillance des crédits personnalisées :
# Required for cloud API
export FIRECRAWL_API_KEY=your-api-key
# Optional retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=5 # Increase max retry attempts
export FIRECRAWL_RETRY_INITIAL_DELAY=2000 # Start with 2s delay
export FIRECRAWL_RETRY_MAX_DELAY=30000 # Maximum 30s delay
export FIRECRAWL_RETRY_BACKOFF_FACTOR=3 # More aggressive backoff
# Optional credit monitoring
export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000 # Warning at 2000 credits
export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500 # Critical at 500 credits
Pour une instance auto-hébergée :
# Required for self-hosted
export FIRECRAWL_API_URL=https://firecrawl.your-domain.com
# Optional authentication for self-hosted
export FIRECRAWL_API_KEY=your-api-key # If your instance requires auth
# Custom retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
export FIRECRAWL_RETRY_INITIAL_DELAY=500 # Start with faster retries
Utilisation avec Claude Desktop
Ajoutez ceci à votre claude_desktop_config.json :
{
"mcpServers": {
"mcp-server-firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE",
"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 système
Le serveur inclut plusieurs paramètres configurables qui peuvent être définis via des variables d'environnement. Voici les valeurs par défaut si elles ne sont pas configurées :
const CONFIG = {
retry: {
maxAttempts: 3, // Number of retry attempts for rate-limited requests
initialDelay: 1000, // Initial delay before first retry (in milliseconds)
maxDelay: 10000, // Maximum delay between retries (in milliseconds)
backoffFactor: 2, // Multiplier for exponential backoff
},
credit: {
warningThreshold: 1000, // Warn when credit usage reaches this level
criticalThreshold: 100, // Critical alert when credit usage reaches this level
},
};
Ces configurations contrôlent :
-
Comportement des nouvelles tentatives
- Réessaie automatiquement les requêtes échouées en raison de limites de débit
- Utilise une attente exponentielle pour éviter de submerger l'API
- Exemple : Avec les paramètres par défaut, les nouvelles tentatives seront tentées à :
- 1ère tentative : 1 seconde de délai
- 2ème tentative : 2 secondes de délai
- 3ème tentative : 4 secondes de délai (plafonné à maxDelay)
-
Surveillance de l'utilisation des crédits
- Suit la consommation de crédits API pour l'utilisation de l'API cloud
- Fournit des avertissements à des seuils spécifiés
- Aide à prévenir les interruptions de service inattendues
- Exemple : Avec les paramètres par défaut :
- Avertissement à 1000 crédits restants
- Alerte critique à 100 crédits restants
Limitation de débit et traitement par lots
Le serveur utilise les capacités intégrées de limitation de débit et de traitement par lots de Firecrawl :
- Gestion automatique des limites de débit avec attente exponentielle
- Traitement parallèle efficace pour les opérations par lots
- Mise en file d'attente et limitation intelligentes des requêtes
- Nouvelles tentatives automatiques pour les erreurs transitoires
Comment choisir un outil
Utilisez ce guide pour sélectionner le bon outil pour votre tâche :
- Si vous connaissez la ou les URL exactes que vous voulez :
- Pour une seule : utilisez scrape (avec le format JSON pour des données structurées)
- Pour plusieurs : utilisez batch_scrape
- Si vous avez besoin de découvrir des URL sur un site : utilisez map
- Si vous voulez rechercher des informations sur le web : utilisez search
- Si vous avez besoin d'une recherche complexe à travers plusieurs sources inconnues : utilisez agent
- Si vous voulez analyser un site entier ou une section : utilisez crawl (avec des limites !)
- Si vous avez besoin d'une automatisation interactive du navigateur (cliquer, taper, naviguer) : utilisez scrape + interact
Tableau de référence rapide
| Outil | Idéal pour | Renvoie |
|---|---|---|
| scrape | Contenu d'une seule page | JSON (préféré) ou markdown |
| interact | Interagir avec une page extraite | Résultat de l'exécution |
| batch_scrape | Plusieurs URL connues | JSON (préféré) ou markdown[] |
| map | Découvrir des URL sur un site | URL[] |
| crawl | Extraction multi-pages (avec limites) | markdown/html[] |
| search | Recherche web d'informations | results[] |
| agent | Recherche complexe multi-sources | JSON (données structurées) |
Guide de sélection du format
Lors de l'utilisation de scrape ou batch_scrape, choisissez le bon format :
- Format JSON (recommandé pour la plupart des cas) : Utilisez-le lorsque vous avez besoin de données spécifiques d'une page. Définissez un schéma basé sur ce que vous devez extraire. Cela permet de garder les réponses petites et d'éviter le débordement de la fenêtre de contexte.
- Format Markdown (à utiliser avec parcimonie) : Uniquement lorsque vous avez réellement besoin du contenu complet de la page, comme pour lire un article entier pour le résumer ou analyser la structure de la page.
Outils disponibles
1. Outil Scrape (firecrawl_scrape)
Extrayez le contenu d'une seule URL avec des options avancées.
Idéal pour :
- L'extraction de contenu d'une seule page, lorsque vous savez exactement quelle page contient l'information.
Non recommandé pour :
- Extraire du contenu de plusieurs pages (utilisez batch_scrape pour des URL connues, ou map + batch_scrape pour d'abord découvrir les URL, ou crawl pour le contenu complet des pages)
- Lorsque vous n'êtes pas sûr de la page qui contient l'information (utilisez search)
Erreurs courantes :
- Utiliser scrape pour une liste d'URL (utilisez batch_scrape à la place).
- Utiliser le format markdown par défaut (utilisez le format JSON pour extraire uniquement ce dont vous avez besoin).
Choisir le bon format :
- Format JSON (préféré) : Pour la plupart des cas d'utilisation, utilisez le format JSON avec un schéma pour extraire uniquement les données spécifiques nécessaires. Cela permet de garder les réponses ciblées et d'éviter le débordement de la fenêtre de contexte.
- Format Markdown : Uniquement lorsque la tâche nécessite réellement le contenu complet de la page (par exemple, résumer un article entier, analyser la structure de la page).
Exemple d'invite :
"Obtenez les détails du produit depuis https://example.com/product."
Exemple d'utilisation (format JSON - préféré) :
{
"name": "firecrawl_scrape",
"arguments": {
"url": "https://example.com/product",
"formats": [
{
"type": "json",
"prompt": "Extract the product information",
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"price": { "type": "number" },
"description": { "type": "string" }
},
"required": ["name", "price"]
}
}
]
}
}
Exemple d'utilisation (format markdown - lorsque le contenu complet est nécessaire) :
{
"name": "firecrawl_scrape",
"arguments": {
"url": "https://example.com/article",
"formats": ["markdown"],
"onlyMainContent": true
}
}
Exemple d'utilisation (format branding - extraire l'identité de marque) :
{
"name": "firecrawl_scrape",
"arguments": {
"url": "https://example.com",
"formats": ["branding"]
}
}
Format Branding : Extrait l'identité de marque complète (couleurs, polices, typographie, espacement, logo, composants UI) pour l'analyse de conception ou la réplication de style.
Confidentialité : Définissez redactPII: true pour renvoyer le contenu avec les informations personnellement identifiables expurgées.
Renvoie :
- Données structurées JSON, markdown, profil de marque, ou d'autres formats comme spécifié.
2. Outil Batch Scrape (firecrawl_batch_scrape)
Extrayez plusieurs URL efficacement avec une limitation de débit et un traitement parallèle intégrés.
Idéal pour :
- Récupérer le contenu de plusieurs pages, lorsque vous savez exactement quelles pages extraire.
Non recommandé pour :
- Découvrir des URL (utilisez d'abord map si vous ne connaissez pas les URL)
- Extraire une seule page (utilisez scrape)
Erreurs courantes :
- Utiliser batch_scrape avec trop d'URL à la fois (peut atteindre les limites de débit ou le débordement de jetons)
Exemple d'invite :
"Obtenez le contenu de ces trois articles de blog : [url1, url2, url3]."
Exemple d'utilisation :
{
"name": "firecrawl_batch_scrape",
"arguments": {
"urls": ["https://example1.com", "https://example2.com"],
"options": {
"formats": ["markdown"],
"onlyMainContent": true
}
}
}
Renvoie :
- La réponse inclut un ID d'opération pour la vérification du statut :
{
"content": [
{
"type": "text",
"text": "Batch operation queued with ID: batch_1. Use firecrawl_check_batch_status to check progress."
}
],
"isError": false
}
3. Vérifier le statut du lot (firecrawl_check_batch_status)
Vérifiez le statut d'une opération par lot.
{
"name": "firecrawl_check_batch_status",
"arguments": {
"id": "batch_1"
}
}
4. Outil Map (firecrawl_map)
Cartographiez un site web pour découvrir toutes les URL indexées sur le site.
Idéal pour :
- Découvrir des URL sur un site web avant de décider quoi extraire
- Trouver des sections spécifiques d'un site web
Non recommandé pour :
- Lorsque vous connaissez déjà l'URL spécifique dont vous avez besoin (utilisez scrape ou batch_scrape)
- Lorsque vous avez besoin du contenu des pages (utilisez scrape après la cartographie)
Erreurs courantes :
- Utiliser crawl pour découvrir des URL au lieu de map
Exemple d'invite :
"Listez toutes les URL sur exemple.com."
Exemple d'utilisation :
{
"name": "firecrawl_map",
"arguments": {
"url": "https://example.com"
}
}
Renvoie :
- Tableau des URL trouvées sur le site
5. Outil Search (firecrawl_search)
Recherchez sur le web et extrayez éventuellement le contenu des résultats de recherche.
Idéal pour :
- Trouver des informations spécifiques sur plusieurs sites web, lorsque vous ne savez pas quel site web contient l'information.
- Lorsque vous avez besoin du contenu le plus pertinent pour une requête
Non recommandé pour :
- Lorsque vous savez déjà quel site web extraire (utilisez scrape)
- Lorsque vous avez besoin d'une couverture complète d'un seul site web (utilisez map ou crawl)
Erreurs courantes :
- Utiliser crawl ou map pour des questions ouvertes (utilisez search à la place)
Exemple d'utilisation :
{
"name": "firecrawl_search",
"arguments": {
"query": "latest AI research papers 2023",
"limit": 5,
"lang": "en",
"country": "us",
"scrapeOptions": {
"formats": ["markdown"],
"onlyMainContent": true,
"redactPII": true
}
}
}
Renvoie :
- Tableau de résultats de recherche (avec contenu extrait en option), plus un champ
id. Passez ceidàfirecrawl_search_feedbackaprès avoir utilisé les résultats pour rembourser 1 crédit (la recherche coûte 2) et améliorer la qualité de la recherche.
Exemple d'invite :
« Trouve les derniers articles de recherche sur l'IA publiés en 2023. »
5b. Outil de feedback de recherche (firecrawl_search_feedback)
Envoie un feedback structuré sur un résultat firecrawl_search précédent. Le premier feedback par identifiant de recherche rembourse 1 crédit et améliore la qualité de recherche de Firecrawl. Idempotent par identifiant de recherche.
Appelez ceci après chaque recherche que vous utilisez réellement (ou qui n'a pas aidé). Un feedback mauvais/partiel avec missingContent est tout aussi précieux qu'un bon feedback.
Désinscription : définissez FIRECRAWL_NO_SEARCH_FEEDBACK=1 (ou FIRECRAWL_DISABLE_SEARCH_FEEDBACK=1) dans l'environnement au démarrage du serveur MCP. L'outil firecrawl_search_feedback ne sera pas enregistré, donc les agents ne pourront pas l'appeler. Les administrateurs d'équipe peuvent également désactiver le feedback côté serveur ; dans ce cas, l'outil est enregistré mais renvoie toujours feedbackErrorCode: "TEAM_OPTED_OUT".
Champ le plus important : missingContent. Il s'agit d'un tableau de contenus spécifiques que l'agent s'attendait à trouver mais n'a pas trouvés. Une entrée par sujet manquant — celles-ci s'agrègent entre les équipes et nous indiquent quoi indexer ensuite.
Plafond de remboursement quotidien (par équipe, par jour UTC, 100 crédits par défaut). Une fois que le creditsRefundedToday d'une équipe atteint dailyRefundCap, les soumissions suivantes enregistrent toujours le feedback mais ne remboursent plus de crédits. La réponse définit dailyCapReached: true. Les agents doivent cesser d'appeler cet outil pour le reste du jour UTC lorsqu'ils voient ce drapeau.
Exemple d'utilisation :
{
"name": "firecrawl_search_feedback",
"arguments": {
"searchId": "0193f6c5-1234-7890-abcd-1234567890ab",
"rating": "good",
"valuableSources": [
{
"url": "https://docs.firecrawl.dev/features/search",
"reason": "Most up-to-date description of /search."
}
],
"missingContent": [
{
"topic": "Pricing for the search endpoint",
"description": "No pricing tier table for /search specifically."
},
{ "topic": "Per-team rate limits" }
],
"querySuggestions": "Boost docs.firecrawl.dev for queries that mention 'firecrawl'"
}
}
Renvoie :
- JSON
{ success, feedbackId, creditsRefunded, alreadySubmitted? }.
5c. Outil de feedback générique (firecrawl_feedback)
Envoie un feedback structuré pour un travail de point de terminaison v2 terminé via /v2/feedback.
Utilisez ceci pour le feedback au niveau du point de terminaison sur les travaux scrape, parse, map ou search.
Pour la qualité des résultats de recherche spécifiquement, préférez
firecrawl_search_feedback car il inclut des conseils spécifiques à la recherche.
Gardez le feedback concis : utilisez des codes de problème, des étiquettes, de courtes notes, des URL, des numéros de page et de petits objets de métadonnées. N'incluez pas les sorties brutes d'extraction/analyse.
Désinscription : définissez FIRECRAWL_NO_ENDPOINT_FEEDBACK=1 (ou FIRECRAWL_DISABLE_ENDPOINT_FEEDBACK=1) dans l'environnement au démarrage du serveur MCP. L'outil firecrawl_feedback ne sera pas enregistré, donc les agents ne pourront pas l'appeler.
Exemple d'utilisation :
{
"name": "firecrawl_feedback",
"arguments": {
"endpoint": "scrape",
"jobId": "0193f6c5-1234-7890-abcd-1234567890ab",
"rating": "partial",
"issues": ["missing_markdown"],
"tags": ["docs"],
"note": "The pricing table was missing from the markdown output.",
"url": "https://example.com/pricing",
"pageNumbers": [1],
"metadata": {
"format": "markdown"
}
}
}
Renvoie :
- JSON
{ success, feedbackId, creditsRefunded, creditsRefundedToday?, dailyRefundCap?, dailyCapReached?, alreadySubmitted?, warning? }.
6. Outil d'exploration (firecrawl_crawl)
Démarre un travail d'exploration asynchrone sur un site web et extrait le contenu de toutes les pages.
Idéal pour :
- Extraire du contenu de plusieurs pages liées, lorsque vous avez besoin d'une couverture complète.
Non recommandé pour :
- Extraire le contenu d'une seule page (utilisez l'extraction)
- Lorsque les limites de jetons sont un problème (utilisez map + batch_scrape)
- Lorsque vous avez besoin de résultats rapides (l'exploration peut être lente)
Avertissement : Les réponses d'exploration peuvent être très volumineuses et dépasser les limites de jetons. Limitez la profondeur d'exploration et le nombre de pages, ou utilisez map + batch_scrape pour un meilleur contrôle.
Erreurs courantes :
- Définir une limite ou maxDepth trop élevée (provoque un débordement de jetons)
- Utiliser l'exploration pour une seule page (utilisez plutôt l'extraction)
Exemple d'invite :
« Récupère tous les articles de blog des deux premiers niveaux de exemple.com/blog. »
Exemple d'utilisation :
{
"name": "firecrawl_crawl",
"arguments": {
"url": "https://example.com/blog/*",
"maxDepth": 2,
"limit": 100,
"allowExternalLinks": false,
"deduplicateSimilarURLs": true
}
}
Renvoie :
- La réponse inclut l'identifiant d'opération pour vérifier l'état :
{
"content": [
{
"type": "text",
"text": "Started crawl for: https://example.com/* with job ID: 550e8400-e29b-41d4-a716-446655440000. Use firecrawl_check_crawl_status to check progress."
}
],
"isError": false
}
7. Vérifier l'état de l'exploration (firecrawl_check_crawl_status)
Vérifiez l'état d'un travail d'exploration.
{
"name": "firecrawl_check_crawl_status",
"arguments": {
"id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Renvoie :
- La réponse inclut l'état du travail d'exploration :
8. Outil d'extraction (firecrawl_extract)
Extrayez des informations structurées de pages web en utilisant les capacités LLM. Prend en charge à la fois l'IA cloud et l'extraction LLM auto-hébergée.
Idéal pour :
- Extraire des données structurées spécifiques comme les prix, les noms, les détails.
Non recommandé pour :
- Lorsque vous avez besoin du contenu complet d'une page (utilisez l'extraction)
- Lorsque vous ne cherchez pas de données structurées spécifiques
Arguments :
urls: Tableau d'URL à partir desquelles extraire des informationsprompt: Invite personnalisée pour l'extraction LLMsystemPrompt: Invite système pour guider le LLMschema: Schéma JSON pour l'extraction de données structuréesallowExternalLinks: Autoriser l'extraction à partir de liens externesenableWebSearch: Activer la recherche web pour un contexte supplémentaireincludeSubdomains: Inclure les sous-domaines dans l'extraction
Lors de l'utilisation d'une instance auto-hébergée, l'extraction utilisera votre LLM configuré. Pour l'API cloud, elle utilise le service LLM géré de Firecrawl. Exemple d'invite :
« Extrais le nom du produit, le prix et la description de ces pages produit. »
Exemple d'utilisation :
{
"name": "firecrawl_extract",
"arguments": {
"urls": ["https://example.com/page1", "https://example.com/page2"],
"prompt": "Extract product information including name, price, and description",
"systemPrompt": "You are a helpful assistant that extracts product information",
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"price": { "type": "number" },
"description": { "type": "string" }
},
"required": ["name", "price"]
},
"allowExternalLinks": false,
"enableWebSearch": false,
"includeSubdomains": false
}
}
Renvoie :
- Données structurées extraites telles que définies par votre schéma
{
"content": [
{
"type": "text",
"text": {
"name": "Example Product",
"price": 99.99,
"description": "This is an example product description"
}
}
],
"isError": false
}
9. Outil Agent (firecrawl_agent)
Agent de recherche web autonome. Il s'agit d'une couche d'agent IA distincte qui navigue indépendamment sur Internet, recherche des informations, navigue à travers les pages et extrait des données structurées en fonction de votre requête.
Comment ça fonctionne :
L'agent effectue des recherches web, suit des liens, lit des pages et rassemble des données de manière autonome. Cela s'exécute de manière asynchrone - il renvoie un identifiant de travail immédiatement, et vous interrogez firecrawl_agent_status pour vérifier quand c'est terminé et récupérer les résultats.
Flux de travail asynchrone :
- Appelez
firecrawl_agentavec votre invite/schéma → renvoie l'identifiant du travail - Faites d'autres tâches pendant que l'agent recherche (peut prendre des minutes pour des requêtes complexes)
- Interrogez
firecrawl_agent_statusavec l'identifiant du travail pour vérifier la progression - Lorsque le statut est « completed », la réponse inclut les données extraites
Idéal pour :
- Tâches de recherche complexes où vous ne connaissez pas les URL exactes
- Collecte de données multi-sources
- Trouver des informations dispersées sur le web
- Tâches où vous pouvez faire autre chose en attendant les résultats
Non recommandé pour :
- Extraction simple d'une seule page où vous connaissez l'URL (utilisez l'extraction avec le format JSON - plus rapide et moins cher)
Arguments :
prompt: Description en langage naturel des données que vous voulez (requis, max 10 000 caractères)urls: Tableau optionnel d'URL pour concentrer l'agent sur des pages spécifiquesschema: Schéma JSON optionnel pour une sortie structurée
Exemple d'invite :
« Trouve les fondateurs de Firecrawl et leurs parcours »
Exemple d'utilisation (démarrer l'agent, puis interroger pour les résultats) :
{
"name": "firecrawl_agent",
"arguments": {
"prompt": "Find the top 5 AI startups founded in 2024 and their funding amounts",
"schema": {
"type": "object",
"properties": {
"startups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"funding": { "type": "string" },
"founded": { "type": "string" }
}
}
}
}
}
}
}
Puis interrogez avec firecrawl_agent_status en utilisant l'identifiant de travail retourné.
Exemple d'utilisation (avec des URL - l'agent se concentre sur des pages spécifiques) :
{
"name": "firecrawl_agent",
"arguments": {
"urls": ["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
"prompt": "Compare the features and pricing information from these pages"
}
}
Renvoie :
- Identifiant de travail pour vérifier l'état. Utilisez
firecrawl_agent_statuspour interroger les résultats.
10. Vérifier l'état de l'agent (firecrawl_agent_status)
Vérifiez l'état d'un travail d'agent et récupérez les résultats lorsqu'il est terminé. Utilisez ceci pour interroger les résultats après avoir démarré un agent.
Modèle d'interrogation : La recherche de l'agent peut prendre des minutes pour des requêtes complexes. Interrogez ce point de terminaison périodiquement (par exemple, toutes les 10-30 secondes) jusqu'à ce que le statut soit « completed » ou « failed ».
{
"name": "firecrawl_agent_status",
"arguments": {
"id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Statuts possibles :
processing: L'agent est toujours en train de rechercher - revenez plus tardcompleted: Recherche terminée - la réponse inclut les données extraitesfailed: Une erreur s'est produite
11. Outils de surveillance (firecrawl_monitor_*)
Créez et gérez des surveillances de page récurrentes. Les surveillances exécutent des extractions ou explorations planifiées, comparent chaque résultat au dernier instantané conservé et peuvent notifier par webhook ou email.
Idéal pour :
- Surveiller une page ou quelques pages au fil du temps
- Alerter sur des changements significatifs en utilisant un objectif en langage clair
- Suivre l'historique des vérifications et les différences au niveau de la page
Modèle de création recommandé :
Utilisez page ou pages plus goal. Le serveur MCP construit la demande de surveillance avec un planning de 30 minutes et l'API active automatiquement le jugement de changement significatif.
Le jugement de changement significatif s'exécute automatiquement lorsque goal est défini. Les webhooks de page exposent isMeaningful et judgment lors des événements monitor.page.
Rédigez les objectifs sous forme d'instructions de surveillance concises de 2-3 phrases. Dites ce qui doit déclencher une alerte, préservez toute portée donnée par l'utilisateur et incluez des exclusions spécifiques à l'intention uniquement lorsque cela est évident d'après la demande. Le bruit générique tel que les espaces, les changements de formatage uniquement, les identifiants de requête, les paramètres de suivi, les métadonnées génériques et le chrome de page non pertinent est déjà géré par le juge, donc ne le répétez pas dans chaque objectif. Si l'utilisateur est vague, gardez l'objectif large ; s'il demande une surveillance large ou « tout changement », préservez cela. Si l'utilisateur dit qu'il ne se soucie pas de quelque chose, incluez-le explicitement.
{
"name": "firecrawl_monitor_create",
"arguments": {
"page": "https://example.com/pricing",
"goal": "Alert when pricing, packaging, or launch messaging changes."
}
}
Plusieurs pages avec webhooks :
{
"name": "firecrawl_monitor_create",
"arguments": {
"pages": ["https://example.com/pricing", "https://example.com/changelog"],
"goal": "Alert when pricing, packaging, or launch messaging changes.",
"webhookUrl": "https://example.com/webhooks/firecrawl"
}
}
Demandes de création avancées :
Passez body lorsque vous avez besoin de cibles d'exploration, de suivi des changements JSON, de rétention personnalisée ou de contrôle explicite judgeEnabled.
{
"name": "firecrawl_monitor_create",
"arguments": {
"body": {
"name": "Docs monitor",
"schedule": { "text": "hourly", "timezone": "UTC" },
"goal": "Alert when docs pages add, remove, or materially change API behavior.",
"targets": [{ "type": "crawl", "url": "https://example.com/docs" }]
}
}
}
Autres outils de surveillance :
firecrawl_monitor_list: lister les surveillances.firecrawl_monitor_get: obtenir une surveillance.firecrawl_monitor_update: mettre à jour les champs, y comprisgoal,judgeEnabled,webhooketnotification.firecrawl_monitor_run: déclencher une vérification maintenant.firecrawl_monitor_checks: lister les vérifications, éventuellement filtrées par statut.firecrawl_monitor_check: obtenir les résultats au niveau de la page, y comprisdiff,snapshot,judgment.meaningfuletjudgment.meaningfulChanges.
Système de journalisation
Le serveur inclut une journalisation complète :
- Statut et progression des opérations
- Métriques de performance
- Surveillance de l'utilisation des crédits
- Suivi des limites de débit
- Conditions d'erreur
Exemples de messages de journal :
[INFO] Firecrawl MCP Server initialized successfully
[INFO] Starting scrape for URL: https://example.com
[INFO] Batch operation queued with ID: batch_1
[WARNING] Credit usage has reached warning threshold
[ERROR] Rate limit exceeded, retrying in 2s...
Gestion des erreurs
Le serveur fournit une gestion robuste des erreurs :
- Nouvelles tentatives automatiques pour les erreurs transitoires
- Gestion des limites de débit avec backoff
- Messages d'erreur détaillés
- Avertissements d'utilisation des crédits
- Résilience réseau
Exemple de réponse d'erreur :
{
"content": [
{
"type": "text",
"text": "Error: Rate limit exceeded. Retrying in 2 seconds..."
}
],
"isError": true
}
Développement
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
Contribuer
- Forkez le dépôt
- Créez votre branche de fonctionnalité
- Exécutez les tests :
npm test - Soumettez une pull request
Remerciements aux contributeurs
Merci à @vrknetha, @cawstudios pour l'implémentation initiale !
Merci à MCP.so et Klavis AI pour l'hébergement et à @gstarwd, @xiangkaiz et @zihaolin96 pour l'intégration de notre serveur.
Licence
Licence MIT - voir le fichier LICENSE pour plus de détails