Firecrawl

by mendableai

Recommended
2.5k stars
132 downloads
Not rated
GitHub Website

About

A Model Context Protocol (MCP) server implementation that integrates with Firecrawl for web scraping capabilities.

Details

Author
mendableai
Repository
firecrawl/firecrawl-mcp-server
GitHub stars
2,541
Downloads
132
License
MIT License
Categories
Web Scraping, Other, Search, Automation, Developer Tools

- Search the web and get full page content
- Search an index built for coding agents: GitHub issues, merged pull requests, READMEs, and docs
- Scrape any URL into clean, structured data
- Interact with pages — click, navigate, and operate
- Deep research with autonomous agent
- Automatic retries and rate limiting
- Cloud and self-hosted support
- SSE support

> Play around with our MCP Server on MCP.so's playground or on Klavis AI.

Setting up with Highlight

Follow these steps to add this server as a custom Highlight plugin:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Firecrawl
    Command (node, npx, python, etc.) npx
    Arguments
    • Argument 1 -y
    • Argument 2 firecrawl-mcp
    Environment
    • FIRECRAWL_API_KEY YOUR-API-KEY

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

The simplest way is to connect to the hosted server at https://mcp.firecrawl.dev/v2/mcp (keyless free tier available). Alternatively, run env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp from the command line. Configure the server by setting the FIRECRAWL_API_KEY environment variable, and optionally FIRECRAWL_API_URL for self-hosted instances or FIRECRAWL_OAUTH_TOKEN for OAuth bearer tokens.

firecrawl_scrape

Scrape content from a single URL with advanced options. Commonly used for single page content extraction.

firecrawl_map

Map a website to discover all indexed URLs on the site. Best for discovering URLs before deciding what to scrape.

firecrawl_search

Search the web and extract content from search results. Useful for finding specific information across multiple websites.

firecrawl_search_feedback

Sends structured feedback on a previous firecrawl_search result to improve search quality.

firecrawl_feedback

Sends structured feedback for a completed endpoint job through /v2/feedback.

firecrawl_crawl

Starts a crawl job to extract content from multiple related pages. Best for comprehensive coverage.

firecrawl_check_crawl_status

Check the status and results of an existing crawl job by ID.

firecrawl_parse

Parse local files or hosted upload references for documents needing markdown or structured JSON output.

firecrawl_agent

Autonomous web research agent that browses the internet, searches for information, and extracts structured data based on your query.

firecrawl_agent_status

Check the status of an agent job and retrieve results when complete.

firecrawl_interact

Interact with a fresh URL or an already scraped page for actions like clicking, typing, and navigating.

firecrawl_interact_stop

Stop an interact session for a scraped page when done interacting.

firecrawl_monitor_create

Create and manage recurring page monitors to track changes on specified pages.

firecrawl_developer_search

Search an index built for coding agents covering GitHub issues, pull requests, and documentation.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "firecrawl": {
            "env": {
                "FIRECRAWL_API_KEY": "YOUR-API-KEY"
            },
            "args": [
                "-y",
                "firecrawl-mcp"
            ],
            "command": "npx"
        }
    }
}

Linux

{
    "env": {
        "FIRECRAWL_API_KEY": "YOUR-API-KEY"
    },
    "args": [
        "-y",
        "firecrawl-mcp"
    ],
    "command": "npx"
}

Macos

{
    "env": {
        "FIRECRAWL_API_KEY": "YOUR-API-KEY"
    },
    "args": [
        "-y",
        "firecrawl-mcp"
    ],
    "command": "npx"
}

Windows

{
    "env": [],
    "args": [
        "/c",
        "set FIRECRAWL_API_KEY=YOUR-API-KEY && npx -y firecrawl-mcp"
    ],
    "command": "cmd"
}
A Model Context Protocol (MCP) server that brings[Firecrawlto MCP-compatible AI agents — search, scrape, and interact with the live web for clean, agent-ready context. Big thanks to](https://github.com/firecrawl/firecrawl)[@vrknetha,](https://github.com/vrknetha)[@knacklabsfor the initial implementation! - Search the web and get full page content - Search an index built for coding agents: GitHub issues, merged pull requests, READMEs, and docs - Scrape any URL into clean, structured data - Interact with pages — click, navigate, and operate - Deep research with autonomous agent - Automatic retries and rate limiting - Cloud and self-hosted support - SSE support Play around with](https://www.knacklabs.ai)[our MCP Server on MCP.so's playgroundor on](https://mcp.so/playground?server=firecrawl-mcp-server)[Klavis AI. Connect to the remote hosted server with no setup: On the keyless free tier,`scrape`,`search`, and`parse`work without an API key (rate-limited). Other tools such as`crawl`,`map`, and`agent`still need a key. Prefer OAuth or an API key whenever the human can sign up. It unlocks the full tool set and higher limits. For an interactive account connection, configure your MCP client to use this server URL. This is an MCP endpoint,**not a browser page**; use the client's account-connection flow and do not add a second Firecrawl server entry when reconnecting: For an API-key connection (for example, an unattended integration), keep the server URL as: Then configure the client's secure header or secret setting with: ``` `Authorization: Bearer <FIRECRAWL_API_KEY>` ``` Never put an API key in the server URL. Never put an API key in an agent chat. Configure it directly in the client or secret manager. See the](https://www.klavis.ai/mcp-servers)[hosted MCP setup guideand the](https://docs.firecrawl.dev/mcp-server)[agent onboarding guidefor client-specific instructions. A read-only, search-only surface is also hosted at: It exposes a fixed set of six read-only tools:`firecrawl_search`and the five`firecrawl_research_*`tools. It performs no page-content fetching and has its own OAuth identity; the full endpoint above is unchanged. See](https://www.firecrawl.dev/agent-onboarding/SKILL.md)[docs/search-profile.mdfor the full contract. ``` `env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp` ``` Configuring Cursor 🖥️ Note: Requires Cursor version 0.45.6+ For the most up-to-date configuration instructions, please refer to the official Cursor documentation on configuring MCP servers:](https://github.com/mendableai/firecrawl-mcp-server/blob/HEAD/docs/search-profile.md)[Cursor MCP Server Configuration Guide To configure Firecrawl MCP in Cursor**v0.48.6** - Open Cursor Settings - Go to Features > MCP Servers - Click "+ Add new global MCP server" - Enter the following code: ``` `{ "mcpServers": { "firecrawl-mcp": { "command": "npx", "args": ](https://docs.cursor.com/context/model-context-protocol#configuring-mcp-servers)["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "YOUR-API-KEY" } } } }` ``` To configure Firecrawl MCP in Cursor**v0.45.6** - Open Cursor Settings - Go to Features > MCP Servers - Click "+ Add New MCP Server" - Enter the following: - Name: "firecrawl-mcp" (or your preferred name) - Type: "command" - Command:`env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp` If you are using Windows and are running into issues, try`cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"` Replace`your-api-key`with your Firecrawl API key. If you don't have one yet, you can create an account and get it from[https://www.firecrawl.dev/app/api-keys After adding, refresh the MCP server list to see the new tools. The Composer Agent will automatically use Firecrawl MCP when appropriate, but you can explicitly request it by describing your web scraping needs. Access the Composer via Command+L (Mac), select "Agent" next to the submit button, and enter your query. Add this to your`./codeium/windsurf/model_config.json`: ``` `{ "mcpServers": { "mcp-server-firecrawl": { "command": "npx", "args": ](https://www.firecrawl.dev/app/api-keys)["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "YOUR_API_KEY" } } } }` ``` To run the server using Streamable HTTP locally instead of the default stdio transport: ``` `env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp` ``` To install Firecrawl for Claude Desktop automatically via[Smithery: ``` `npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude` ``` For one-click installation, click one of the install buttons below... For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing`Ctrl + Shift + P`and typing`Preferences: Open User Settings (JSON)`. ``` `{ "mcp": { "inputs": ](https://smithery.ai/server/@mendableai/mcp-server-firecrawl)[ { "type": "promptString", "id": "apiKey", "description": "Firecrawl API Key", "password": true } ], "servers": { "firecrawl": { "command": "npx", "args": ["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "${input:apiKey}" } } } } }` ``` Optionally, you can add it to a file called`.vscode/mcp.json`in your workspace. This will allow you to share the configuration with others: ``` `{ "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}" } } } }` ``` - `FIRECRAWL_API_KEY`: Your Firecrawl API key - Required when using cloud API (default) - Optional when using self-hosted instance with`FIRECRAWL_API_URL` - Example:`https://firecrawl.your-domain.com` - If not provided, the cloud API will be used (requires API key) Hosted Firecrawl can issue OAuth**access tokens**(`fco_…`) via the authorization server on[firecrawl.dev. This MCP server forwards whichever credential it resolves to the Firecrawl API as`Authorization: Bearer …`. - **HTTP stream transports**(`CLOUD_SERVICE=true`,`HTTP_STREAMABLE_SERVER=true`, or`SSE_LOCAL=true`): Clients should send`Authorization: Bearer <fco_access_token>`on MCP requests. An OAuth bearer token takes precedence over`x-firecrawl-api-key`/`x-api-key`when both are present. - **stdio:**Use`FIRECRAWL_OAUTH_TOKEN`for a static access token, or keep using`FIRECRAWL_API_KEY`for an API key. Use**access**tokens (`fco_…`) only. Refresh tokens (`fcr_…`) must be exchanged at the token endpoint, not passed to the scrape/search API. In hosted mode (`CLOUD_SERVICE=true`) a second in-process instance serves the](https://firecrawl.dev)[search-only endpoint. The bundled service has a fixed deployment contract: nginx routes`/v2/mcp-search`to the instance on local port`3001`, and the OAuth protected-resource identifier is`https://mcp.firecrawl.dev/v2/mcp-search`. `FIRECRAWL_MCP_SEARCH_ENABLED`(default`true`) is the supported operational toggle; set it to`false`to prevent the search instance from starting. The Node process also accepts`FIRECRAWL_MCP_SEARCH_PORT`,`FIRECRAWL_MCP_SEARCH_ENDPOINT`, and`FIRECRAWL_MCP_SEARCH_RESOURCE_URL`for isolated tests. Those overrides do not reconfigure the bundled nginx routes or the authorization server allowlist and must not be used independently in the hosted deployment. The search instance requires authentication for every request (including`tools/list`) and rejects OAuth tokens whose audience does not match its own resource. ``` `# 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` ``` Add this to your`claude_desktop_config.json`: ``` `{ "mcpServers": { "mcp-server-firecrawl": { "command": "npx", "args": ](#search-only-endpoint)["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE" } } } }` ``` Use this guide to select the right tool for your task: - **If you know the exact URL you want:**use**scrape**(with JSON format for structured data) - **If you have multiple known URLs:**call**scrape**for each URL. If you specifically need one bulk API operation, use the Firecrawl API batch endpoint outside MCP. - **If you need to discover URLs on a site:**use**map** - **If you want to search the web for info:**use**search** - **If you have a programming question**(a library, an API contract, an error message, a known bug): use**developer search** - **If you need scientific papers**(biomedical, life-science, clinical, or arXiv literature): use**research tools**— they search paper abstracts and full text.`search`with`categories: ["research"]`is a different thing: a website filter over ordinary web results. - **If you need complex research across multiple unknown sources:**use**agent** - **If you want to analyze a whole site or section:**use**crawl**(with limits!) - **If you need interactive browser automation**(click, type, navigate): use**interact**with a URL for a fresh page, or**scrape**+**interact**when you already scraped the page or need tighter scrape control When using`scrape`, choose the right format: - **JSON format (recommended for most cases):**Use when you need specific data from a page. Define a schema based on what you need to extract. This keeps responses small and avoids context window overflow. - **Markdown format (use sparingly):**Only when you genuinely need the full page content, such as reading an entire article for summarization or analyzing page structure. Scrape content from a single URL with advanced options. - Single page content extraction, when you know exactly which page contains the information. - Extracting content from multiple pages (use repeated scrape calls for known URLs, or map + scrape to discover URLs first, or crawl for full page content) - When you're unsure which page contains the information (use search) - Passing a list of URLs to one scrape call. Call scrape once per URL in MCP. If you specifically need one bulk API operation, use the Firecrawl API batch endpoint outside MCP. - Using markdown format by default (use JSON format to extract only what you need). - **JSON format (preferred):**For most use cases, use JSON format with a schema to extract only the specific data needed. This keeps responses focused and prevents context window overflow. - **Markdown format:**Only when the task genuinely requires full page content (e.g., summarizing an entire article, analyzing page structure). "Get the product details from[https://example.com/product." **Usage Example (JSON format - preferred):** ``` `{ "name": "firecrawl_scrape", "arguments": { "url": "https://example.com/product", "formats": ](https://example.com/product)[ { "type": "json", "prompt": "Extract the product information", "schema": { "type": "object", "properties": { "name": { "type": "string" }, "price": { "type": "number" }, "description": { "type": "string" } }, "required": ["name", "price"] } } ] } }` ``` **Usage Example (markdown format - when full content needed):** ``` `{ "name": "firecrawl_scrape", "arguments": { "url": "https://example.com/article", "formats": ["markdown"], "onlyMainContent": true } }` ``` **Usage Example (branding format - extract brand identity):** ``` `{ "name": "firecrawl_scrape", "arguments": { "url": "https://example.com", "formats": ["branding"] } }` ``` **Branding format:**Extracts comprehensive brand identity (colors, fonts, typography, spacing, logo, UI components) for design analysis or style replication.**Privacy:**Set`redactPII: true`to return content with personally identifiable information redacted. - JSON structured data, markdown, branding profile, or other formats as specified. Map a website to discover all indexed URLs on the site. - Discovering URLs on a website before deciding what to scrape - Finding specific sections of a website - When you already know which specific URL you need (use scrape) - When you need the content of the pages (use scrape after mapping) - Using crawl to discover URLs instead of map "List all URLs on example.com." ``` `{ "name": "firecrawl_map", "arguments": { "url": "https://example.com" } }` ``` Search the web and optionally extract content from search results. - Finding specific information across multiple websites, when you don't know which website has the information. - When you need the most relevant content for a query - When you already know which website to scrape (use scrape) - When you need comprehensive coverage of a single website (use map or crawl) - Using crawl or map for open-ended questions (use search instead) ``` `{ "name": "firecrawl_search", "arguments": { "query": "remote work stipend policies at tech companies", "highlights": true, "limit": 5, "lang": "en", "country": "us", "scrapeOptions": { "formats": ["markdown"], "onlyMainContent": true, "redactPII": true } } }` ``` Set`highlights`to`true`to request query-relevant highlights or`false`to keep the original search snippets. Omit it to use the API's default behavior. For scientific papers, see[Research Tools: they search paper abstracts and full text, while`categories: ](#12-research-tools-firecrawl_research_)["research"]`here filters ordinary web results to research-affiliated websites. - Array of search results (with optional scraped content), plus an`id`field. Pass that`id`to`firecrawl_search_feedback`after you've used the results to refund 1 credit (search costs 2) and improve search quality. "Compare remote work stipend policies across tech companies." ### 3b. Search Feedback Tool (`firecrawl_search_feedback`)
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.