Firecrawl MCP

officiel

Ajoute des capacités puissantes de scraping web et de recherche aux clients LLM comme Cursor et Claude.

Que pouvez-vous faire avec Firecrawl MCP ?

  • Rechercher des informations sur le web — utilisez firecrawl_search pour trouver des pages pertinentes sur le web lorsque vous ne savez pas quel site contient la réponse.
  • Extraire une URL connue en données structurées — appelez firecrawl_scrape avec un schéma JSON pour extraire uniquement les champs dont vous avez besoin d'une seule page.
  • Découvrir toutes les URL d'un site — exécutez firecrawl_map pour lister les pages indexées avant de décider quoi extraire.
  • Lancer une recherche autonome multi-sources — démarrez une tâche firecrawl_agent et interrogez firecrawl_agent_status pour une collecte de données complexe et intersite.
  • Interagir avec des pages dynamiques — utilisez firecrawl_interact pour cliquer, taper ou naviguer sur une page et renvoyer l'état résultant.
  • Analyser des documents locaux — envoyez des PDF, des fichiers Word ou des feuilles de calcul via firecrawl_parse pour obtenir un markdown propre ou une sortie structurée.

Documentation

Serveur MCP Firecrawl

Un serveur Model Context Protocol (MCP) qui apporte Firecrawl aux agents IA compatibles MCP — recherchez, scrapez et interagissez avec le web en direct pour obtenir un contexte propre et prêt pour l'agent.

Un grand merci à @vrknetha, @knacklabs pour l'implémentation initiale !

Fonctionnalités

  • Rechercher sur le web et obtenir le contenu complet des pages
  • Scraper n'importe quelle URL en données propres et structurées
  • Interagir avec les pages — cliquer, naviguer et opérer
  • Recherche approfondie avec un agent autonome
  • Nouvelles tentatives automatiques et limitation de débit
  • Support cloud et auto-hébergé
  • Support SSE

Expérimentez avec notre serveur MCP sur le playground de MCP.so ou sur Klavis AI.

Installation

MCP hébergé (niveau gratuit sans clé)

Connectez-vous au serveur hébergé distant sans configuration :

https://mcp.firecrawl.dev/v2/mcp

Avec le niveau gratuit sans clé, scrape, search et interact fonctionnent sans clé API (débit limité). D'autres outils comme crawl, map, agent et extract nécessitent toujours une clé.

Préférez une clé API ou OAuth dès que l'humain peut s'inscrire. Cela débloque l'ensemble complet des outils et des limites plus élevées. Avec une clé, utilisez :

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

Consultez la documentation du serveur MCP et le guide d'intégration de l'agent pour les détails de configuration.

Point de terminaison recherche uniquement

Une surface en lecture seule, dédiée à la recherche, est également hébergée à :

https://mcp.firecrawl.dev/v2/mcp-search

Elle expose un ensemble fixe de six outils en lecture seule : firecrawl_search et les cinq outils firecrawl_research_*. Elle n'effectue aucune récupération de contenu de page et possède sa propre identité OAuth ; le point de terminaison complet ci-dessus reste inchangé. Voir docs/search-profile.md pour le contrat complet.

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 🖥️ Remarque : 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

  1. Ouvrez les paramètres de Cursor
  2. Allez dans Fonctionnalités > Serveurs MCP
  3. Cliquez sur "+ Ajouter un nouveau serveur MCP global"
  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 Fonctionnalités > Serveurs MCP
  3. Cliquez sur "+ Ajouter un nouveau serveur MCP"
  4. Saisissez 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 de web scraping. Accédez au Composer via Commande+L (Mac), sélectionnez "Agent" à côté du bouton de soumission, et saisissez 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 en 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 (Héritage)

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...

Install with NPX in VS Code Install with NPX in VS Code Insiders

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)

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 ou SSE_LOCAL=true) : Les clients doivent envoyer Authorization: Bearer <fco_access_token> sur les requêtes MCP. Un jeton porteur OAuth a priorité sur x-firecrawl-api-key / x-api-key lorsque les deux sont présents.
  • stdio : Utilisez FIRECRAWL_OAUTH_TOKEN pour un jeton d'accès statique, ou continuez à utiliser FIRECRAWL_API_KEY pour 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 scrape/search.

Surface recherche uniquement (hébergée)

En mode hébergé (CLOUD_SERVICE=true), une seconde instance in-processus sert le point de terminaison recherche uniquement. Le service groupé a un contrat de déploiement fixe : nginx route /v2/mcp-search vers l'instance sur le port local 3001, et l'identifiant de ressource protégée OAuth est https://mcp.firecrawl.dev/v2/mcp-search.

FIRECRAWL_MCP_SEARCH_ENABLED (par défaut true) est la bascule opérationnelle prise en charge ; définissez-la sur false pour empêcher le démarrage de l'instance de recherche. Le processus Node accepte également FIRECRAWL_MCP_SEARCH_PORT, FIRECRAWL_MCP_SEARCH_ENDPOINT et FIRECRAWL_MCP_SEARCH_RESOURCE_URL pour les tests isolés. Ces substitutions ne reconfigurent pas les routes nginx groupées ni la liste d'autorisation du serveur d'autorisation et ne doivent pas être utilisées indépendamment dans le déploiement hébergé.

L'instance de recherche nécessite une authentification pour chaque requête (y compris tools/list) et rejette les jetons OAuth dont l'audience ne correspond pas à sa propre ressource.

Exemples de configuration

Pour l'utilisation de l'API cloud :

export FIRECRAWL_API_KEY=your-api-key

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

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

Comment choisir un outil

Utilisez ce guide pour sélectionner le bon outil pour votre tâche :

  • Si vous connaissez l'URL exacte que vous voulez : utilisez scrape (avec le format JSON pour des données structurées)
  • Si vous avez plusieurs URL connues : appelez scrape pour chaque URL. Si vous avez spécifiquement besoin d'une opération API par lot, utilisez le point de terminaison batch de l'API Firecrawl en dehors de MCP.
  • 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 interact avec une URL pour une nouvelle page, ou scrape + interact lorsque vous avez déjà scrapé la page ou avez besoin d'un contrôle de scrape plus fin

Tableau de référence rapide

OutilIdéal pourRenvoie
scrapeContenu d'une seule pageJSON (préféré) ou markdown
interactInteragir avec une URL ou une page scrapéeRésultat d'exécution + scrapeId pour le mode URL
mapDécouvrir des URL sur un siteURL[]
crawlExtraction multi-pages (avec limites)statut final du crawl/données après interrogation interne
parseFichiers et références de téléchargement hébergéesmarkdown, JSON ou sortie document
extractExtraction structurée à partir d'URLDonnées structurées JSON
searchRecherche d'informations sur le webresults[]
agentRecherche complexe multi-sourcesJSON (données structurées)
monitorVérifications récurrentes de pagesmétadonnées de monitor/check et diffs
researchRecherche d'articles et de dépôts GitHubrésultats de recherche et correspondances de dépôts

Guide de sélection du format

Lors de l'utilisation de scrape, choisissez le bon format :

  • Format JSON (recommandé pour la plupart des cas) : À utiliser 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)

Scraper le contenu d'une seule URL avec des options avancées.

Idéal pour :

  • L'extraction du contenu d'une seule page, lorsque vous savez exactement quelle page contient l'information.

Non recommandé pour :

  • L'extraction de contenu de plusieurs pages (utilisez des appels scrape répétés pour les URL connues, ou map + scrape pour découvrir d'abord 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 :

  • Passer une liste d'URL à un seul appel scrape. Appelez scrape une fois par URL dans MCP. Si vous avez spécifiquement besoin d'une opération API par lot, utilisez le point de terminaison batch de l'API Firecrawl en dehors de MCP.
  • 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 personnelles identifiables expurgées.

Renvoie :

  • Données structurées JSON, markdown, profil de marque ou autres formats comme spécifié.

2. Outil Map (firecrawl_map)

Cartographier un site web pour découvrir toutes les URL indexées sur le site.

Idéal pour :

  • Découvrir les URL d'un site web avant de décider quoi scraper
  • Trouver des sections spécifiques d'un site web

Non recommandé pour :

  • Lorsque vous savez déjà quelle URL spécifique vous avez besoin (utilisez 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

3. Outil Search (firecrawl_search)

Rechercher sur le web et éventuellement extraire 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 scraper (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",
    "highlights": true,
    "limit": 5,
    "lang": "en",
    "country": "us",
    "scrapeOptions": {
      "formats": ["markdown"],
      "onlyMainContent": true,
      "redactPII": true
    }
  }
}

Définissez highlights sur true pour demander des extraits pertinents à la requête ou sur false pour conserver les extraits de recherche d'origine. Omettez-le pour utiliser le comportement par défaut de l'API.

Renvoie :

  • Un tableau de résultats de recherche (avec contenu scrapé optionnel), plus un champ id. Passez ce id à firecrawl_search_feedback après avoir utilisé les résultats pour vous faire 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."

3b. Outil de retour sur la recherche (firecrawl_search_feedback)

Envoie un retour structuré sur un résultat précédent de firecrawl_search. Le premier retour 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 retour négatif/partiel avec missingContent est tout aussi précieux qu'un bon retour.

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 retour côté serveur ; dans ce cas, l'outil est enregistré mais renvoie toujours feedbackErrorCode: "TEAM_OPTED_OUT".

Champ le plus important : missingContent. C'est un tableau d'éléments de contenu spécifiques que l'agent s'attendait à trouver mais n'a pas trouvés. Une entrée par sujet manquant — ceux-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 retour 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? }.

3c. Outil de retour générique (firecrawl_feedback)

Envoie un retour structuré pour une tâche de point de terminaison v2 terminée via /v2/feedback. Utilisez ceci pour un retour au niveau du point de terminaison sur les tâches 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 retour concis : utilisez des codes de problème, des balises, des notes courtes, des URL, des numéros de page et de petits objets de métadonnées. N'incluez pas les sorties brutes de scrape/parse.

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? }.

4. Outil de crawl (firecrawl_crawl)

Démarre une tâche de crawl, interroge jusqu'à ce qu'elle atteigne un état terminal et renvoie l'état/les données finaux du crawl.

Idéal pour :

  • Extraire du contenu de plusieurs pages liées, lorsque vous avez besoin d'une couverture complète.

Non recommandé pour :

  • Extraire du contenu d'une seule page (utilisez scrape)
  • Lorsque les limites de jetons sont un problème (utilisez map + scrape pour un contrôle plus strict)
  • Lorsque vous avez besoin de résultats rapides (le crawl peut être lent)

Avertissement : Les réponses de crawl peuvent être très volumineuses et dépasser les limites de jetons. Limitez la profondeur de crawl et le nombre de pages, ou utilisez map + scrape pour un contrôle plus strict.

Erreurs courantes :

  • Définir limit ou maxDiscoveryDepth trop haut (provoque un débordement de jetons)
  • Utiliser crawl pour une seule page (utilisez scrape à la place)

Exemple d'invite :

"Récupère tous les articles de blog des deux premiers niveaux de example.com/blog."

Exemple d'utilisation :

{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://example.com/blog/*",
    "maxDiscoveryDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
  }
}

Renvoie :

  • État et données finaux du crawl après interrogation interne, y compris id, status, completed, total, creditsUsed, expiresAt, next et data. Utilisez le id renvoyé avec firecrawl_check_crawl_status si vous devez revérifier la tâche plus tard.

5. Vérifier l'état du crawl (firecrawl_check_crawl_status)

Vérifiez l'état et les résultats d'une tâche de crawl existante par ID.

{
  "name": "firecrawl_check_crawl_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

Renvoie :

  • La réponse inclut l'état de la tâche de crawl :

6. Outil d'analyse (firecrawl_parse)

Analysez des fichiers locaux ou des références de téléchargement hébergées avec le point de terminaison /v2/parse de Firecrawl.

Idéal pour : les PDF, documents Word, feuilles de calcul, fichiers HTML et autres documents nécessitant une sortie markdown ou JSON structurée. Le MCP hébergé prend en charge un flux de téléchargement-ref en deux étapes ; les lectures de fichiers locaux directs nécessitent un FIRECRAWL_API_URL auto-hébergé.

Non recommandé pour : les URL distantes (utilisez scrape), plusieurs fichiers en un seul appel (appelez parse une fois par fichier) ou les actions uniquement navigateur telles que les captures d'écran et les clics.

Flux MCP hébergé : Le MCP hébergé ne peut pas lire directement le système de fichiers de l'appelant. Appelez firecrawl_parse avec filePath pour recevoir une commande de téléchargement de courte durée et nextToolCall, téléchargez le fichier localement, puis appelez à nouveau firecrawl_parse avec le uploadRef renvoyé. La création de l'URL de téléchargement hébergée nécessite une authentification Firecrawl ou une éligibilité sans clé. En mode npx firecrawl-mcp local, l'analyse directe de fichiers nécessite actuellement FIRECRAWL_API_URL pointant vers une API Firecrawl auto-hébergée ; un serveur local simple avec clé API cloud ne peut pas lire et télécharger des fichiers via cet outil.

Exemple d'utilisation :

{
  "name": "firecrawl_parse",
  "arguments": {
    "filePath": "/absolute/path/to/document.pdf",
    "formats": ["markdown"],
    "parsers": ["pdf"],
    "zeroDataRetention": true
  }
}

Renvoie : Contenu du document analysé ou instructions de téléchargement hébergé avec un nextToolCall.

7. 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 scrape)
  • Lorsque vous ne cherchez pas de données structurées spécifiques

Arguments :

  • urls : Tableau d'URL à partir desquelles extraire des informations
  • prompt : Invite personnalisée pour l'extraction 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

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 produits."

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
}

8. 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 collecte des données de manière autonome. Cela s'exécute de manière asynchrone - il renvoie un ID de tâche 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 :

  1. Appelez firecrawl_agent avec votre invite/schéma → renvoie l'ID de tâche
  2. Faites d'autres tâches pendant que l'agent recherche (peut prendre des minutes pour les requêtes complexes)
  3. Interrogez firecrawl_agent_status avec l'ID de tâche pour vérifier la progression
  4. Lorsque le statut est "completed", la réponse inclut les données extraites

Idéal pour :

  • Les tâches de recherche complexes où vous ne connaissez pas les URL exactes
  • La collecte de données multi-sources
  • Trouver des informations dispersées sur le web
  • Les tâches où vous pouvez faire autre chose en attendant les résultats

Non recommandé pour :

  • Le scraping simple d'une seule page où vous connaissez l'URL (utilisez scrape avec le format JSON - plus rapide et moins cher)

Arguments :

  • prompt : Description en langage naturel des données que vous voulez (obligatoire, max 10 000 caractères)
  • urls : Tableau optionnel d'URL pour concentrer l'agent sur des pages spécifiques
  • schema : 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'ID de tâche renvoyé.

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 :

  • ID de tâche pour la vérification du statut. Utilisez firecrawl_agent_status pour interroger les résultats.

9. Vérifier le statut de l'agent (firecrawl_agent_status)

Vérifiez le statut d'une tâche d'agent et récupérez les résultats lorsqu'elle est terminée. 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 les 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 tard
  • completed : Recherche terminée - la réponse inclut les données extraites
  • failed : Une erreur s'est produite

10. Outil d'interaction (firecrawl_interact)

Interagissez avec une nouvelle URL ou avec une page déjà ouverte par firecrawl_scrape.

Idéal pour : Cliquer, taper, naviguer et extraire l'état de pages dynamiques sans restaurer les outils de navigateur obsolètes.

Options d'utilisation :

  • Passez url pour scraper et ouvrir une page pour interaction en un seul appel MCP.
  • Passez scrapeId pour continuer à interagir avec une page scrapée existante.
  • Passez exactement l'un de url ou scrapeId, plus soit prompt soit code.

Exemple d'utilisation :

{
  "name": "firecrawl_interact",
  "arguments": {
    "url": "https://example.com",
    "prompt": "Click the pricing link and summarize the visible plans"
  }
}

Renvoie : Résultat de l'interaction et, pour le mode URL, le scrapeId dérivé pour le suivi ou le nettoyage.

11. Outil d'arrêt d'interaction (firecrawl_interact_stop)

Arrêtez une session d'interaction pour une page scrapée lorsque vous avez fini d'interagir.

{
  "name": "firecrawl_interact_stop",
  "arguments": {
    "scrapeId": "scrape-id-here"
  }
}

12. Outils de recherche (firecrawl_research_*)

Recherchez et inspectez des articles et des dépôts GitHub via les outils MCP de recherche.

Outils de recherche disponibles :

  • firecrawl_research_search_papers : rechercher des articles de recherche.
  • firecrawl_research_inspect_paper : inspecter un article.
  • firecrawl_research_related_papers : trouver des articles connexes.
  • firecrawl_research_read_paper : lire le contenu d'un article.
  • firecrawl_research_search_github : rechercher des dépôts GitHub.

Idéal pour : Les flux de travail de revue de littérature, de recherche d'articles et de découverte de dépôts où l'agent a besoin d'une surface de recherche ciblée au lieu du scraping web général.

13. Outils de surveillance (firecrawl_monitor_*)

Créez et gérez des moniteurs de page récurrents. Les moniteurs exécutent des scrapes ou des crawls planifiés, 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 les 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 moniteur 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 sur les é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 ID de requête, les paramètres de suivi, les métadonnées génériques et le chrome de page non lié 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 de crawl, 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 moniteurs.
  • firecrawl_monitor_get : obtenir un moniteur.
  • firecrawl_monitor_update : mettre à jour les champs, y compris goal, judgeEnabled, webhook et notification.
  • firecrawl_monitor_run : déclencher une vérification maintenant.
  • firecrawl_monitor_delete : supprimer un moniteur (destructif ; n'appeler que lorsque l'utilisateur a l'intention de le supprimer).
  • 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 compris diff, snapshot, judgment.meaningful et judgment.meaningfulChanges.

Système de journalisation

Le serveur inclut une journalisation complète :

  • Statut et progression des opérations
  • Métriques de performance
  • Suivi des limites de débit
  • Conditions d'erreur

Exemples de messages de journalisation :

[INFO] Firecrawl MCP Server initialized successfully
[INFO] Starting scrape for URL: https://example.com
[ERROR] Rate limit exceeded

Gestion des erreurs

Le serveur fournit une gestion robuste des erreurs :

  • Erreurs de limite de débit de l'API remontées au client MCP
  • Messages d'erreur détaillés
  • Résilience réseau

Exemple de réponse d'erreur :

{
  "content": [
    {
      "type": "text",
      "text": "Error: Rate limit exceeded"
    }
  ],
  "isError": true
}

Développement

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

Contribuer

  1. Forker le dépôt
  2. Créer votre branche de fonctionnalité
  3. Exécuter les tests : npm test
  4. Soumettre 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