Skip to main content
Glama

Firecrawl MCP Server

A Model Context Protocol (MCP) server that brings Firecrawl to MCP-compatible AI agents — search, scrape, and interact with the live web for clean, agent-ready context.

Big thanks to @vrknetha, @knacklabs for the initial implementation!

Features

  • 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

  • Check current and historical Firecrawl credit usage

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

Related MCP server: snoopscan

When to Use This Server

  • Use firecrawl_scrape when you have a known URL and want its content as markdown or as JSON matching a schema you supply.

  • Use firecrawl_map when you need to discover URLs on a site without fetching their content.

  • Use firecrawl_crawl when you need content from many pages under a site; set limit, includePaths/excludePaths, or maxDiscoveryDepth to bound it.

  • Use firecrawl_search when you're starting from a query rather than a URL and want ranked web results; add scrapeOptions if you also want page content fetched in the same call (the search-only endpoint never fetches content).

  • Use firecrawl_interact when a page needs a click, type, or navigate action before you can read it — pass a url for a fresh page or a scrapeId to continue on one you already scraped.

  • Use the firecrawl_monitor_* tools when the same page needs to be checked on a recurring schedule with diffs and change alerts, rather than fetched once.

  • Use firecrawl_credit_usage to check credits left or monthly consumption, optionally broken down by API key.

  • Consider something else when you need to hold a browser session open across many of your own steps with your own retry and termination logic: each firecrawl_interact call runs one prompt or code turn to completion and returns control — the session can persist across calls via scrapeId and ends with firecrawl_interact_stop, but you cannot drive it interactively step-by-step from the client side within a single call.

This server lists 27 tools when the full profile registers with default settings (feedback tools included, not running in local-keyless mode). Setting FIRECRAWL_NO_SEARCH_FEEDBACK=1 and/or FIRECRAWL_NO_ENDPOINT_FEEDBACK=1 removes the corresponding feedback tools and reduces this count, as does local keyless startup. For clients with a tool-slot limit: the hosted keyless endpoint (https://mcp.firecrawl.dev/v2/mcp, no API key) exposes only 3 — firecrawl_scrape, firecrawl_search, firecrawl_parse — and the dedicated search-only endpoint (https://mcp.firecrawl.dev/v2/mcp-search) exposes a fixed set of 9 tools (search, developer, government, and research search, plus Alexandria catalogue lookup and execution).

Installation

Hosted MCP (keyless free tier)

Connect to the remote hosted server with no setup:

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

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:

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

For an API-key connection (for example, an unattended integration), keep the server URL as:

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

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 hosted MCP setup guide and the agent onboarding guide for client-specific instructions.

Search-only endpoint

A fixed-scope search surface is also hosted at:

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

It exposes a fixed set of nine tools: firecrawl_search, firecrawl_developer_search, firecrawl_gov_search, the four firecrawl_research_* tools, and the two Alexandria tools firecrawl_find_tools and firecrawl_scrape. Its firecrawl_search fetches no page content, and the surface has its own OAuth identity; the full endpoint above is unchanged. It backs a published connector listing, so its tool set is a contract rather than a profile to tune. See docs/search-profile.md for the full contract and what a change to it involves.

For packaged MCP workflows in ChatGPT, Codex, or Claude Code, see MCP plugin packages.

Running with npx

env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp

Manual Installation

npm install -g firecrawl-mcp

Running on Cursor

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: Cursor MCP Server Configuration Guide

To configure Firecrawl MCP in Cursor v0.48.6

  1. Open Cursor Settings

  2. Go to Features > MCP Servers

  3. Click "+ Add new global MCP server"

  4. Enter the following code:

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

To configure Firecrawl MCP in Cursor v0.45.6

  1. Open Cursor Settings

  2. Go to Features > MCP Servers

  3. Click "+ Add New MCP Server"

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

Running on Windsurf

Add this to your ./codeium/windsurf/model_config.json:

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Running with Streamable HTTP Local Mode

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

Use the url: http://localhost:3000/mcp

Installing via Smithery (Legacy)

To install Firecrawl for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

Running on VS Code

For one-click installation, click one of the install buttons below...

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

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": [
      {
        "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}"
      }
    }
  }
}

Configuration

Environment Variables

Required for Cloud API

  • FIRECRAWL_API_KEY: Your Firecrawl API key

    • Required when using cloud API (default)

    • Optional when using self-hosted instance with FIRECRAWL_API_URL

  • FIRECRAWL_API_URL (Optional): Custom API endpoint for self-hosted instances

    • Example: https://firecrawl.your-domain.com

    • If not provided, the cloud API will be used (requires API key)

MCP OAuth (Bearer access tokens)

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.

Search-only surface (hosted)

In hosted mode (CLOUD_SERVICE=true) a second in-process instance serves the 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.

Configuration Examples

For cloud API usage:

export FIRECRAWL_API_KEY=your-api-key

For self-hosted instance:

# 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

Usage with Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

How to Choose a Tool

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 have a legal or regulatory question (a statute, regulation, code, court opinion, or other US government publication): use the Firecrawl Government Index

  • 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 multi-source research that returns structured data, do not know the URLs, or the answer spans several sites (an entity plus its fields, a list, a dataset): 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

  • If you need data from a catalogued provider (Alexandria): search with sources: ["alexandria"], inspect the selected contract with find_tools, and execute it with scrape alexandria

Quick Reference Table

Tool

Best for

Returns

scrape

Single page content

JSON (preferred) or markdown

interact

Interact with a URL or scraped page

Execution result + scrapeId for URL mode

map

Discovering URLs on a site

URL[]

crawl

Multi-page extraction (with limits)

final crawl status/data after internal polling

parse

Files and hosted upload refs

markdown, JSON, or document output

search

Web search for info

results[]

find_tools

Alexandria catalogue browsing and URL lookup

providers, tool contracts and nextTool navigation

developer

Programming questions over developer sources

results[] with passages

gov

US primary law and regulatory material

results[] with snippets

agent

Multi-source research, unknown or many sites

JSON (structured data)

monitor

Recurring page checks

monitor/check metadata and diffs

research

Paper and GitHub repository research

research results and repo matches

Format Selection Guide

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.

Available Tools

1. Scrape Tool (firecrawl_scrape)

Scrape content from a single URL with advanced options.

Best for:

  • Single page content extraction, when you know exactly which page contains the information.

Not recommended for:

  • 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)

Common mistakes:

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

Choosing the right format:

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

Prompt Example:

"Get the product details from https://example.com/product."

Usage Example (JSON format - preferred):

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

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. Hosted server: On the hosted server (CLOUD_SERVICE=true) scrape is read-only. It takes no browser actions and cannot accept provider terms. A named profile loads saved browser state without saving changes to it, and the full endpoint's firecrawl_search treats scrapeOptions.profile the same way. To save browser state to a profile, open the page with firecrawl_interact (see below). An organization admin accepts terms in the dashboard.

Returns:

  • JSON structured data, markdown, branding profile, or other formats as specified.

2. Map Tool (firecrawl_map)

Map a website to discover all indexed URLs on the site.

Best for:

  • Discovering URLs on a website before deciding what to scrape

  • Finding specific sections of a website

Not recommended for:

  • When you already know which specific URL you need (use scrape)

  • When you need the content of the pages (use scrape after mapping)

Common mistakes:

  • Using crawl to discover URLs instead of map

Prompt Example:

"List all URLs on example.com."

Usage Example:

{
  "name": "firecrawl_map",
  "arguments": {
    "url": "https://example.com"
  }
}

Returns:

  • Array of URLs found on the site

3. Search Tool (firecrawl_search)

Search the web and optionally extract content from search results.

Best for:

  • 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

Not recommended for:

  • When you already know which website to scrape (use scrape)

  • When you need comprehensive coverage of a single website (use map or crawl)

Common mistakes:

  • Using crawl or map for open-ended questions (use search instead)

Usage Example:

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

Add "sources": ["alexandria"] for semantic tool discovery in data.tools, optionally mixed with web/news/images. A query is required. Use firecrawl_find_tools for contextual lookup and progressive disclosure; see Alexandria Tools.

For scientific papers, see Research Tools: they search paper abstracts and full text, while categories: ["research"] here filters ordinary web results to research-affiliated websites.

Returns:

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

Prompt Example:

"Compare remote work stipend policies across tech companies."

3b. Search Feedback Tool (firecrawl_search_feedback)

Sends structured feedback on a previous firecrawl_search result. The first feedback per search id refunds 1 credit and improves Firecrawl's search quality. Idempotent per search id.

Call this after every search you actually use (or that didn't help). Bad/partial feedback with missingContent is just as valuable as good feedback.

Opt out: set FIRECRAWL_NO_SEARCH_FEEDBACK=1 (or FIRECRAWL_DISABLE_SEARCH_FEEDBACK=1) in the environment when starting the MCP server. The firecrawl_search_feedback tool will not be registered, so agents can't call it. Team admins can also disable feedback server-side; in that case the tool is registered but always returns feedbackErrorCode: "TEAM_OPTED_OUT".

Most important field: missingContent. It's an array of specific pieces of content the agent expected to find but did not. One entry per missing topic — these aggregate across teams and tell us what to index next.

Daily refund cap (per team, per UTC day, default 100 credits). Once a team's creditsRefundedToday reaches dailyRefundCap, further submissions still record feedback but no longer refund credits. The response sets dailyCapReached: true. Agents should stop calling this tool for the rest of the UTC day when they see that flag.

Usage Example:

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

Returns:

  • { success, feedbackId, creditsRefunded, alreadySubmitted? } JSON.

3c. Generic Feedback Tool (firecrawl_feedback)

Sends structured feedback for a completed v2 endpoint job through /v2/feedback. Use this for endpoint-level feedback on scrape, parse, map, or search jobs. For search-result quality specifically, prefer firecrawl_search_feedback because it includes search-specific guidance.

Keep feedback concise: use issue codes, tags, short notes, URLs, page numbers, and small metadata objects. Do not include raw scrape/parse outputs.

Opt out: set FIRECRAWL_NO_ENDPOINT_FEEDBACK=1 (or FIRECRAWL_DISABLE_ENDPOINT_FEEDBACK=1) in the environment when starting the MCP server. The firecrawl_feedback tool will not be registered, so agents cannot call it.

Usage Example:

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

Returns:

  • { success, feedbackId, creditsRefunded, creditsRefundedToday?, dailyRefundCap?, dailyCapReached?, websiteCapReached?, alreadySubmitted?, warning? } JSON.

4. Crawl Tool (firecrawl_crawl)

Starts a crawl job, polls until it reaches a terminal state, and returns the final crawl status/data.

Best for:

  • Extracting content from multiple related pages, when you need comprehensive coverage.

Not recommended for:

  • Extracting content from a single page (use scrape)

  • When token limits are a concern (use map + scrape for tighter control)

  • When you need fast results (crawling can be slow)

Warning: Crawl responses can be very large and may exceed token limits. Limit the crawl depth and number of pages, or use map + scrape for tighter control.

Common mistakes:

  • Setting limit or maxDiscoveryDepth too high (causes token overflow)

  • Using crawl for a single page (use scrape instead)

Prompt Example:

"Get all blog posts from the first two levels of example.com/blog."

Usage Example:

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

Returns:

  • Final crawl status and data after internal polling, including id, status, completed, total, creditsUsed, expiresAt, next, and data. Use the returned id with firecrawl_check_crawl_status if you need to re-check the job later.

5. Check Crawl Status (firecrawl_check_crawl_status)

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

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

Returns:

  • Response includes the status of the crawl job:

6. Parse Tool (firecrawl_parse)

Parse local files or hosted upload references with Firecrawl's /v2/parse endpoint.

Best for: PDFs, Word documents, spreadsheets, HTML files, and other documents that need markdown or structured JSON output. Hosted MCP supports a two-step upload-ref flow; local direct file reads require a self-hosted FIRECRAWL_API_URL.

Not recommended for: Remote URLs (use scrape), multiple files in one call (call parse once per file), or browser-only actions such as screenshots and clicks.

Hosted MCP flow: Hosted MCP cannot read the caller's filesystem directly. Call firecrawl_parse with filePath to receive a short-lived upload command and nextToolCall, upload the file locally, then call firecrawl_parse again with the returned uploadRef. Minting the hosted upload URL requires Firecrawl auth or keyless eligibility. In local npx firecrawl-mcp mode, direct file parsing currently requires FIRECRAWL_API_URL pointing to a self-hosted Firecrawl API; a plain cloud API-key-only local server cannot read and upload files through this tool.

Usage Example:

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

Returns: Parsed document content or hosted upload instructions with a nextToolCall.

7. Structured data with Scrape JSON

For structured data from a known page, call firecrawl_scrape once per URL with formats: ["json"]. Put the extraction prompt and JSON schema in jsonOptions.

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com/product",
    "formats": ["json"],
    "jsonOptions": {
      "prompt": "Extract the product name, price, and description.",
      "schema": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "price": { "type": "number" },
          "description": { "type": "string" }
        },
        "required": ["name", "price"]
      }
    }
  }
}

When the URLs are not known or the data spans several sites, use firecrawl_agent for multi-source research.

8. Agent Tool (firecrawl_agent)

Autonomous web research agent that returns structured data when you do not know the URLs or the answer spans several sites. Describe the fields you need, optionally pass a JSON schema and seed URLs, and the agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it for an entity plus its fields, for lists and datasets, and for pages that need navigation to reach the data. For one known URL use firecrawl_scrape with JSON format instead.

How it works:

The agent performs web searches, follows links, reads pages, and gathers data autonomously. This runs asynchronously - it returns a job ID immediately, and you poll firecrawl_agent_status to check when complete and retrieve results.

Async workflow:

  1. Call firecrawl_agent with your prompt/schema → returns job ID

  2. Do other work while the agent researches (can take minutes for complex queries)

  3. Poll firecrawl_agent_status with the job ID to check progress

  4. When status is "completed", the response includes the extracted data

Best for:

  • Complex research tasks where you don't know the exact URLs

  • Multi-source data gathering

  • Finding information scattered across the web

  • Tasks where you can do other work while waiting for results

Not recommended for:

  • Simple single-page scraping where you know the URL (use scrape with JSON format - faster and cheaper)

Arguments:

  • prompt: Natural language description of the data you want (required, max 10,000 characters)

  • urls: Optional array of URLs to focus the agent on specific pages

  • schema: Optional JSON schema for structured output

  • effort: Optional. "low", "medium" or "high" reasoning budget for the agent task.

  • maxCredits: Optional positive integer. Spending limit in credits for this run. The API defaults to 2,500 when omitted, and caps a free request at 2,500.

  • strictConstrainToURLs: Optional boolean. If true, the agent only visits the URLs in urls.

  • threadId: Optional. Continue an existing thread: the threadId from an earlier firecrawl_agent or firecrawl_agent_status result. Omit to start a new thread. On a follow-up, omitted mode, urls, schema and exchange settings carry over from the previous turn.

  • mode: Optional. "extract" (default) returns the complete structured result every turn. "chat" lets a follow-up that asks for no new data get a short reply in message instead of a re-run; exchange.requireApproval needs it.

  • exchange: Optional. Alexandria provider settings for this turn, forwarded as-is to POST /v2/agent:

    • enabled, toolkits (up to 5 provider slugs), maxCalls (1 to 30), requireApproval (paid calls end the turn with a pendingApproval; needs mode: "chat" on the same call, even on a follow-up)

    • onTermsRequired: what to do when an Alexandria provider the agent would use needs data terms your team has not accepted. Gated providers are never called in any mode. Omitted on a follow-up keeps the previous turn's value.

      • "skip" (default): answer with accepted providers only. exchange.skippedProviders on the status result lists the gated providers that would have helped.

      • "ask": the same, plus a terms pendingApproval and exchange.requiresAction with the approval ID and provider requirements. Read terms with terms/show; an organization admin accepts them in the Firecrawl dashboard.

    • approve: { approvalId, callIds?, always? } answers yes to the pendingApproval the previous turn ended on. callIds and always apply to paid-call approvals only.

    • decline: { approvalId } answers no. A declined terms offer keeps those providers out of the rest of the thread.

    • approve and decline need threadId, and only one of them can be sent.

Provider terms (ask mode): there is no auto-accept mode. When a turn ends on a terms offer, the status result carries pendingApproval (kind: "terms") and exchange.requiresAction with the approvalId and provider requirements. Any terms/accept descriptor in that API payload is unavailable through MCP. To use the provider:

  1. Show the user the terms (terms/show through firecrawl_scrape with alexandria).

  2. Direct an organization admin to accept the terms at the provider's URL, or data sources settings. A data request is not consent.

  3. Wait for the admin to confirm acceptance in the dashboard.

  4. Continue the same thread: call firecrawl_agent with the same threadId and exchange.approve: { "approvalId": "..." }. This resumes research and does not accept terms.

If the user says no, call firecrawl_agent with the same threadId and exchange.decline: { "approvalId": "..." } instead.

Prompt Example:

"Find the founders of Firecrawl and their backgrounds"

Usage Example (start agent, then poll for results):

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

Then poll with firecrawl_agent_status using the returned job ID.

Usage Example (with URLs - agent focuses on specific pages):

{
  "name": "firecrawl_agent",
  "arguments": {
    "urls": ["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
    "prompt": "Compare the features and pricing information from these pages"
  }
}

Usage Example (follow-up on the same thread):

{
  "name": "firecrawl_agent",
  "arguments": {
    "prompt": "Only keep the startups based in Europe",
    "threadId": "0199a1b2-0000-7000-8000-000000000031"
  }
}

Usage Example (continue the thread after an admin confirmed dashboard acceptance):

{
  "name": "firecrawl_agent",
  "arguments": {
    "prompt": "The admin confirmed acceptance of the Apollo terms in the dashboard. Continue.",
    "threadId": "0199a1b2-0000-7000-8000-000000000031",
    "exchange": { "approve": { "approvalId": "0199a1b2-0000-7000-8000-000000000033" } }
  }
}

Returns:

  • Job ID for status checking, plus threadId and threadTurn. Use firecrawl_agent_status to poll for results.

9. Check Agent Status (firecrawl_agent_status)

Check the status of an agent job and retrieve results when complete. Use this to poll for results after starting an agent.

Polling pattern: Agent research can take minutes for complex queries. Poll this endpoint periodically (e.g., every 10-30 seconds) until status is "completed" or "failed".

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

Possible statuses:

  • processing: Agent is still researching - check back later

  • completed: Research finished - response includes the extracted data

  • failed: An error occurred

10. Interact Tool (firecrawl_interact)

Interact with a fresh URL or with a page that was already opened by firecrawl_scrape.

Best for: Clicking, typing, navigating, and extracting state from dynamic pages without restoring the deprecated browser tools.

Usage options:

  • Pass url to scrape and open a page for interaction in one MCP call.

  • Pass scrapeId to continue interacting with an existing scraped page.

  • To save browser state (cookies, localStorage) to a named profile, pass url with scrapeOptions: { "profile": { "name": "my-profile", "saveChanges": true } }. The state is saved when firecrawl_interact_stop ends the session.

  • Pass exactly one of url or scrapeId, plus either prompt or code.

Usage Example:

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

Returns: Interaction result and, for URL mode, the derived scrapeId for follow-up or cleanup.

11. Stop Interact Tool (firecrawl_interact_stop)

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

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

12. Research Tools (firecrawl_research_*)

Search and inspect papers and GitHub repositories through the research MCP tools.

Covers: paper abstracts and full text across biomedical, life-science, and clinical literature (PubMed, bioRxiv, medRxiv) alongside arXiv and other scientific sources.

Available research tools:

  • firecrawl_research_search_papers: search paper metadata and abstracts with a natural-language query, with optional author, category, and date filters.

  • firecrawl_research_inspect_paper: retrieve canonical metadata for one paper ID (arXiv, PMC, PMID, or DOI).

  • firecrawl_research_related_papers: expand from one or more anchor papers through the citation graph.

  • firecrawl_research_read_paper: read full-text passages from a specific paper.

Best for: Literature review, paper lookup, and repository discovery workflows where the agent needs a focused research surface instead of general web scraping.

firecrawl_search with categories: ["research"] is a different surface: it filters ordinary web results to research-affiliated websites and returns page snippets, not paper records. Use these tools when the question is about the literature itself, and pass several distinct framings of the same question — they surface different papers than a single query does.

13. Monitor Tools (firecrawl_monitor_*)

Create and manage recurring page monitors. Monitors run scheduled scrapes or crawls, diff each result against the last retained snapshot, and can notify by webhook or email.

Best for:

  • Watching one page or a few pages over time

  • Alerting on meaningful changes using a plain-English goal

  • Tracking check history and page-level diffs

Recommended create pattern:

Use page or pages plus goal. The MCP server builds the monitor request with a 30-minute schedule and the API enables meaningful-change judging automatically.

Meaningful-change judging runs automatically when goal is set. Page webhooks expose isMeaningful and judgment on monitor.page events.

Write goals as concise 2-3 sentence monitor instructions. Say what should trigger an alert, preserve any scope the user gave, and include intent-specific exclusions only when obvious from the request. Generic noise such as whitespace, formatting-only changes, request IDs, tracking params, generic metadata, and unrelated page chrome is already handled by the judge, so do not repeat it in every goal. If the user is vague, keep the goal broad; if they ask for broad monitoring or "any change", preserve that. If the user says they do not care about something, include that explicitly.

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "page": "https://example.com/pricing",
    "goal": "Alert when pricing, packaging, or launch messaging changes."
  }
}

Multiple pages with 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"
  }
}

Advanced create requests:

Pass body when you need crawl targets, JSON change tracking, custom retention, or explicit judgeEnabled control.

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

Other monitor tools:

  • firecrawl_monitor_list: list monitors.

  • firecrawl_monitor_get: get one monitor.

  • firecrawl_monitor_update: update fields including goal, judgeEnabled, webhook, and notification.

  • firecrawl_monitor_run: trigger a check now.

  • firecrawl_monitor_delete: delete a monitor (destructive; only call when the user intends to remove it).

  • firecrawl_monitor_checks: list checks, optionally filtered by status.

  • firecrawl_monitor_check: get page-level results, including diff, snapshot, judgment.meaningful, and judgment.meaningfulChanges.

14. Developer Search Tool (firecrawl_developer_search)

Search an index built for coding agents. The index covers GitHub issues, merged pull requests, repository READMEs, and code documentation.

Best for: A programming question — code behaviour, a library or framework, an API contract, an error message, or a known bug.

Arguments:

{
  "name": "firecrawl_developer_search",
  "arguments": {
    "query": "how do I configure retries",
    "k": 10,
    "skills": "only"
  }
}
  • query (required): the developer question or search phrase.

  • k: number of ranked results. The default is 10 and the maximum is 100.

  • skills: set to "only" to search agent-skill files alone.

Returns: Ranked results. Each result carries an ID, a source type (issue, pull_request, readme, or doc), a URL, a title, and the matched passages in markdown.

firecrawl_search with categories: ["developer"] searches the same index beside the web results. Use this tool instead when you want the matched passages, the skills filter, or no web results in the response. The search-only endpoint exposes both tools, and the same choice applies there.

14b. Government Index Search Tool (firecrawl_gov_search)

Search primary law and regulatory material from US federal, state, and local government sources: statutes, regulations, codes, court opinions, and other government publications.

Best for: A legal or regulatory question that needs the governing text or an official government source.

Arguments:

{
  "name": "firecrawl_gov_search",
  "arguments": {
    "query": "federal food labeling requirements for allergens",
    "k": 10
  }
}
  • query (required): the legal or regulatory question or search phrase.

  • k: number of ranked results. The default is 10 and the maximum is 100.

Returns: Ranked results. Each result carries a position, a title, a URL, and the matched snippet. The search-only endpoint exposes this tool too.

firecrawl_search with categories: ["gov"] searches the same sources and returns the hits in data.web with category: "gov". The gov category cannot be combined with other categories.

15. Alexandria Tools

Firecrawl Alexandria is a catalogue of data providers reachable through the Firecrawl API with a Firecrawl API key on a team with Alexandria access. Keyless sessions (hosted or local) get Alexandria requires an API key on a team with Alexandria access; Alexandria discovery tools are not listed for hosted keyless sessions.

Semantic discovery (firecrawl_search):

{
  "name": "firecrawl_search",
  "arguments": {
    "query": "podcast conversations about AI agents",
    "sources": ["web", "alexandria"],
    "domainTools": true,
    "limit": 2
  }
}

data.tools defaults to compact suggestions with provider, capability, and description. Set toolDetail: "summary" for metadata and navigation, or toolDetail: "full" for contracts including inputs, response fields and examples. domainTools: true adds contextual matches to query mentions and result URLs in that same array. Check warning for unavailable discovery. Search requires a query and does not accept catalogue traversal filters. This discovery works on both the full and search-only MCP surfaces.

Progressive disclosure (firecrawl_find_tools):

{
  "name": "firecrawl_find_tools",
  "arguments": {
    "providers": ["particle"],
    "capabilities": ["podcasts/episodes/search"],
    "expand": ["options", "response", "examples"],
    "limit": 2
  }
}

Start with no arguments for categories, then progressively narrow the catalogue:

Arguments

Result

{}

Categories and short descriptions

{"categories":["podcasts"]}

Providers in that category

{"categories":["podcasts"],"providers":["particle"]}

Compact tool names, descriptions, and prices

{"providers":["particle"],"capabilities":["podcasts/episodes/search"]}

Complete selected inputs, constraints, response, and examples

No group hop is required. Explicit level supports categories, providers, groups, or tools; explicit expand selects contract sections. expand: [] keeps results compact even when selecting a capability. For broad full contracts, explicitly request level: "tools" and expand: ["options", "response", "examples"]. URLs provide contextual discovery without fetching the page.

Results are in data.alexandria[0].data. Follow an item's nextTool by calling its name with its arguments; the page's nextTool advances pagination. Existing next objects remain Alexandria discovery calls usable through firecrawl_scrape. Discovery costs zero credits and never executes the provider tools. Read the selected full contract before execution.

These controls require the matching Alexandria API deployment.

Execute (firecrawl_scrape with alexandria): pass alexandria instead of url (exactly one of the two; requestId and timeout may also be supplied). A single call or an array of up to ten calls is accepted.

{
  "name": "firecrawl_scrape",
  "arguments": {
    "alexandria": [
      {
        "provider": "fred",
        "capability": "series/observations",
        "options": { "series_id": "CPIAUCSL" }
      }
    ]
  }
}

Returns: { success, scrape_id, requestId, data: { alexandria: [...], creditsCost } }. Each item is either a result (provider, capability, creditsCost, data, records, upstreamStatus) or an error with a code; the batch never fails as a whole for a provider error and data.creditsCost sums the successful items. Alexandria error bodies (403 without Alexandria access, and 402/409 billing statuses) are relayed in-band with their code.

Execution generates one x-request-id and returns it on success or failure. Retry the identical payload with that requestId; do not create a new ID after an uncertain outcome. Available credits are checked by the API.

An Alexandria provider whose terms the team has not accepted fails before anything runs with HTTP 403 and this body:

{
  "success": false,
  "code": "THIRD_PARTY_DATA_TERMS_REQUIRED",
  "error": "An organization admin must accept the benzinga provider's terms (version 2026-09-12-placeholder) before this request can run. Accept them at https://www.firecrawl.dev/app/alexandria/benzinga",
  "requiresAction": {
    "type": "accept_terms",
    "terms": "benzinga",
    "version": "2026-09-12-placeholder",
    "url": "https://www.firecrawl.dev/app/alexandria/benzinga"
  }
}

The tool result relays it as an error with structuredContent carrying code, status: 403, requestId, the requiresAction object unchanged, and next_actions (human_action_required then retry_same_request). Accepting terms is a legal act, so an organization admin accepts them in the Firecrawl dashboard, not through MCP. Use the returned nextTool call to read the agreement through firecrawl_scrape with alexandria: [{provider: "firecrawl", capability: "terms/show", options: {provider: "<provider>"}}], sent separately from provider execution, and present it to the user. An organization admin then accepts it at requiresAction.url, or at https://www.firecrawl.dev/app/settings?tab=data-sources. firecrawl_scrape refuses every other terms/* capability, so it makes no account changes. A request for data is not consent, and no automatic acceptance or uncertain retries occur. No credits are charged for the blocked retrieval. After the admin confirms acceptance, call the same tool again with the identical payload and requestId.

16. Credit Usage Tool

The tool requires an authenticated Firecrawl account and is read-only.

  • firecrawl_credit_usage defaults to { "view": "current" } and returns remainingCredits, planCredits, billingPeriodStart, and billingPeriodEnd. Remaining credits can exceed plan credits when the team has top-ups or grants.

  • Pass { "view": "historical" } for calendar-month periods containing startDate, endDate, and creditsUsed. Passing { "byApiKey": true } also selects the historical view and splits periods by API key; each row then includes apiKey. Do not combine byApiKey with { "view": "current" }. The latest period's endDate can be null.

Logging System

The server includes comprehensive logging:

  • Operation status and progress

  • Performance metrics

  • Rate limit tracking

  • Error conditions

Example log messages:

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

API response hints

The MCP server explicitly enables Firecrawl API response hints on its outbound requests with X-Firecrawl-Agent-Hints: true; the API leaves them disabled for ordinary callers. When Firecrawl returns an optional agent_hints array of strings, JSON tool results preserve it in their existing text and structuredContent alongside the tool's other structured fields. Readable Developer and Research outputs keep their existing text and show hints in a separate, labeled text block. Empty results can include hints. Error hints remain visible with isError: true. Responses without hints keep their existing output format. Guidance is API metadata, separate from the scraped page's content; it is not generated or executed by the MCP adapter.

The strings are passed through unchanged. An HTTP operation mentioned in a hint is not necessarily an MCP tool: Alexandria discovery is available through firecrawl_find_tools, and provider execution uses firecrawl_scrape with an alexandria body. The search-only profile exposes those paths and URL-mode Scrape, but does not expose feedback tools. Clients should use their advertised tool schemas and available capabilities. This change does not add tools, translate prose into tool calls, or submit feedback automatically.

The pinned firecrawl 4.40.0 discards outer-envelope hints in high-level Scrape and Map responses and normalized SDK errors. The adapter captures hints from the SDK HTTP response while retaining the SDK's request and retry behavior. Authentication recovery retains its existing guidance.

Error Handling

The server provides robust error handling:

  • API rate-limit errors surfaced to the MCP client

  • Detailed error messages

  • Network resilience

Example error response:

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

Development

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

Contributing

  1. Fork the repository

  2. Create your feature branch

  3. Run tests: npm test

  4. Submit a pull request

Thanks to contributors

Thanks to @vrknetha, @cawstudios for the initial implementation!

Thanks to MCP.so and Klavis AI for hosting and @gstarwd, @xiangkaiz and @zihaolin96 for integrating our server.

License

MIT License - see LICENSE file for details

Structured data and large results

Authenticated search defaults to web results, semantic Alexandria tools, and domain matches. Start with the actual question. Use firecrawl_find_tools for direct semantic tool lookup, selected contracts, or progressive browsing: categories → providers → compact tools → selected contract. Execute tools through firecrawl_scrape; ordinary URL scraping and search never automatically execute provider tools.

For selected contracts, prefer expand: ["options", "response"] and request examples only if the input shape is unclear. Inspect related capabilities together and reuse the returned contracts.

For a potentially large workflow result, supply and preserve a top-level requestId before execution. That ID remains available even if the client rejects the response. Regular URL scrapes use the returned scrape ID instead.

For a large retained workflow or regular scrape result, call firecrawl_scrape with:

{
  "alexandria": {
    "provider": "firecrawl",
    "capability": "bash",
    "options": {
      "requestId": "<source-request-or-scrape-id>",
      "command": "ls -lh"
    }
  }
}

Read stdout, stderr, exitCode, and workspaceId in data.alexandria[0].data. Continue with options: {workspaceId, command} to inspect response.json using jq, or document.md using bounded text commands for regular scrapes. Keep output selective. Source loading must be a standalone call; its nested source ID differs from the top-level execution request ID. Workspaces expire after five idle minutes, and not every result is retained (including ZDR and API-provider workflow payloads). Search IDs are not supported.

For workflow sources, response.json preserves the API envelope: select .data.alexandria[].data, then the selected contract’s response.key when nonempty. Combine related counts and projections in one Bash command when that shape is known, rather than repeatedly inspecting keys.

Successful Alexandria execution responses above 20,000 estimated tokens (serialized UTF-8 bytes divided by four) return a small handoff after remote Bash confirms the complete batch is accessible. Follow nextTool to inspect the retained data. This adds one Bash call and starts a workspace with a five-minute idle TTL. The full payload is preserved. If confirmation fails, the original response stays inline. Search, ordinary URL scrape, error responses and Firecrawl utility calls are unchanged. This delivery budget does not measure the client’s remaining context; no process-local result cache is added. When local filesystem tools are available, saving CLI output and reading selected sections is another option.

The CLI discovery sequence maps to these MCP calls:

Intent

Tool

Arguments

Web + semantic + domain tools

firecrawl_search

{"query":"<user question>"}

Semantic tools only

firecrawl_search

{"query":"<user question>","sources":["alexandria"]}

Categories

firecrawl_find_tools

{}

Providers in a category

firecrawl_find_tools

{"categories":["<category-id>"]}

Compact provider tools

firecrawl_find_tools

{"providers":["<provider-id>"]}

Selected contract

firecrawl_find_tools

{"providers":["<provider-id>"],"capabilities":["<capability-id>"]}

Execute

firecrawl_scrape

{"alexandria":{"provider":"<provider-id>","capability":"<capability-id>","options":{"<required-field>":"<value>"}}}

Find Tools and execution are available on both the full surface and the search surface. Reuse a complete contract from search when present rather than making another discovery call. Follow returned nextTool navigation only when more results are needed.

Alexandria session feedback

The existing firecrawl_feedback tool accepts endpoint: "alexandria":

{
  "endpoint": "alexandria",
  "rating": "partial",
  "requestedWebsite": {
    "url": "https://example.com",
    "requestedFunctionality": "Find records and download their attachments"
  },
  "objective": "Compare contract requirements across agencies before bidding",
  "rationale": "Found summaries but could not retrieve attachments"
}

The optional objective is the underlying goal of the session: what the agent or its user was ultimately trying to accomplish, beyond the single website in requestedWebsite.

This uses authenticated POST /v2/feedback, without a job ID. It must arrive within 20 minutes of the team's most recent Alexandria search, discovery, or execution; later feedback is rejected with FEEDBACK_WINDOW_EXPIRED. Eligible feedback can refund 1 credit, subject to daily caps of 10 credits per website and 100 credits per team (UTC day). Past either cap, feedback is still recorded with no refund, and the response sets websiteCapReached or dailyCapReached. Optional providerFeedback and capabilityFeedback arrays describe coverage gaps and execution issues; the tool schema lists supported issue values. A new_capability_request requires requestedFunctionality; missing_capability (the provider exists but lacks the capability) does not. Existing feedback opt-out and authentication controls apply.

Eligible Alexandria execution and discovery results include a feedbackTool pointer with the tool name and a skeleton of the arguments. The pointer is omitted for Firecrawl-internal calls such as bash and when firecrawl_feedback is not registered (FIRECRAWL_NO_ENDPOINT_FEEDBACK or keyless startup).

Available Tools

26 tools
firecrawl_agentFirecrawl agentA

Run web research that returns structured data when the URLs are not known or the answer spans several sites. Describe the fields you need in prompt, optionally pass a JSON schema and seed urls, and the research agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it to research an entity plus its fields (founders, pricing, contact details), to build lists and datasets (companies, people, products, jobs, papers), and for pages that need navigation or interaction to reach the data. Optional effort sets the reasoning budget, maxCredits caps spend, and strictConstrainToURLs keeps the agent to the supplied urls.

This call returns only a job ID, not the research result. Read the job with firecrawl_agent_status until it reaches completed or failed; a typical research run takes one to three minutes. For one known URL use firecrawl_scrape (with formats: ["json"] for structured output); for a plain lookup that a results page answers, use firecrawl_search.

The job also returns a threadId. To continue that thread, pass it with a follow-up prompt; omitted mode, urls, schema and exchange settings carry over from the previous turn.

The agent only calls Alexandria providers whose terms the team has accepted. exchange.skippedProviders lists gated providers. With exchange.onTermsRequired "ask", a terms pendingApproval and exchange.requiresAction carry the approvalId and provider requirements. Read terms/show through firecrawl_scrape. An organization admin must accept terms in the Firecrawl dashboard at the provider URL or https://www.firecrawl.dev/app/settings?tab=data-sources. Ignore any terms/accept call in the API response. Only after the admin confirms acceptance, resume with the same threadId and exchange.approve: {approvalId}; this does not accept terms. To decline, use exchange.decline: {approvalId}. Never infer acceptance from a data request.

Inputs: prompt (required), mode, urls, effort, +5 more. Returns: The queued research job. The result is read with `firecrawl_agent_status`.

firecrawl_agent_statusFirecrawl agent statusA
Read-only

Retrieve progress or final results for a firecrawl_agent job ID. A processing response is non-terminal and does not contain the final research result. Check again after 15–30 seconds until the status is completed or failed; a typical research run takes one to three minutes and complex jobs can take longer. If the job cannot finish within the task's available time, use firecrawl_search and firecrawl_scrape to complete the requested output.

Returns job status, progress information, and result data when completed.

Inputs: id (required). Returns: Progress or final result of a research agent job.

firecrawl_check_crawl_statusFirecrawl crawl statusA
Read-only

Retrieve the current status, progress, and available results for an existing crawl ID. This only reads Firecrawl job state and does not start or modify the crawl.

Inputs: id (required). Returns: Crawl job state and the documents collected so far.

firecrawl_crawlFirecrawl site crawlC

Start a multi-page crawl at a website URL, poll it to a terminal state, and return the final status and collected data. Scope can be bounded with include/exclude paths, depth, page limit, subdomain/external-link controls, sitemap handling, delay, and scrape options.

Crawl results can be large; use conservative limits when full-site coverage is unnecessary. Webhooks and interactive scrape actions are unavailable in safe mode. Returns the crawl ID, status, and page data.

Inputs: url (required), delay, limit, prompt, +13 more. Returns: Crawl job state and the documents collected so far.

firecrawl_credit_usageFirecrawl credit usageA
Read-only

Get the authenticated Firecrawl team's current credit balance or historical credit consumption. Use the current view to answer how many credits remain or to check billing-period boundaries. Use the historical view for monthly usage reporting and trend analysis.

The current view returns remainingCredits, planCredits, billingPeriodStart, and billingPeriodEnd. Extra purchased or granted credits can make remainingCredits greater than planCredits. Billing-period dates may be null when the upstream billing provider has no period metadata.

The historical view returns periods sorted by start date with startDate, endDate, and creditsUsed. Set byApiKey to include separate periods per API key, identified by the optional apiKey field. The newest period's endDate can be null.

Inputs: view, byApiKey. Returns: The team credit balance, or historical credit consumption by period.

firecrawl_find_toolsFind ToolsA
Read-onlyIdempotent

Browse Alexandria data providers and workflows or read a selected contract. Alexandria covers companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more: typed, sourced records through published contracts. Prefer normal firecrawl_search for a data task; it already returns matching providers. Use this tool when the contract you need was not returned in full, to browse a category when search found nothing, or before scraping the same fields from several pages. Discovery is free. Use query for semantic discovery or urls to find providers for a website. With no arguments, browse categories, then providers and tools. Contracts describe the inputs and outputs for execution through firecrawl_scrape. nextTool identifies further discovery or pagination. Discovery does not execute providers. Use firecrawl_search when you also need web results.

Inputs: urls, level, limit, query, +6 more. Returns: One page of the Alexandria catalogue: categories, providers, tools, or one cont…

firecrawl_interactFirecrawl interactA

Open or reuse a live browser session to navigate a page, click controls, fill fields, or run browser code. Provide either url or scrapeId, and either a natural-language prompt or executable code; code can run as Bash, Python, or Node with a bounded timeout.

This acts on the live site, so actions such as form submission can create persistent external side effects. Returns execution output, stdout/stderr, exit status, and session viewing URLs.

Inputs: url, code, prompt, timeout, +3 more. Returns: Result of a browser interaction, with the session identifier to continue or sto…

firecrawl_interact_stopStop Firecrawl interact sessionA
Destructive

Stop the live interact session associated with a scrapeId and release its resources. Returns a success confirmation.

Inputs: scrapeId (required). Returns: Confirmation that the interact session was stopped.

firecrawl_mapFirecrawl website mapA
Read-only

Enumerate URLs indexed under one website through Firecrawl without fetching each page's content. Use this when the request asks for a site's URL inventory, when several relevant pages must be located, or when the desired page URL is unknown. An optional search term narrows the URL list, while sitemap, subdomain, query-parameter, and result-limit options control coverage.

Returns matching URLs rather than page bodies. Retrieve one page with firecrawl_scrape; collect content across multiple pages with firecrawl_crawl. Authenticated responses can include an id for optional map feedback.

Inputs: url (required), limit, search, sitemap, +2 more. Returns: URLs indexed under the requested website.

firecrawl_monitor_checkGet Firecrawl monitor checkA
Read-only

Retrieve one monitor check and its page-level results, optionally filtered by page status. Pages report same, new, changed, removed, or error; configured goal judging can add a meaningful-change decision.

Markdown tracking returns a unified text diff, JSON tracking returns field paths with previous/current values and a current snapshot, and mixed tracking returns both. Returns one page of results plus a next URL when more pages exist.

Inputs: id (required), checkId (required), skip, limit, +1 more. Returns: One monitor check with its page-level diff results.

firecrawl_monitor_checksList Firecrawl monitor checksA
Read-only

List historical checks for a monitor, optionally filtered by status and bounded by a result limit. Returns one page of check summaries and pagination metadata.

Inputs: id (required), limit, offset, status. Returns: One page of historical checks for the monitor.

firecrawl_monitor_createCreate Firecrawl monitorA

Create a recurring scrape, crawl, or search monitor that compares each check with its retained predecessor. The simple form accepts page/pages or queries plus a plain-language goal; the advanced body form controls targets, schedule, change-tracking formats, judging, retention, webhook, and notifications.

In the simple form, a goal is required. If queries contains one or more non-empty values and is supplied with page/pages, queries create the search target and page targets are ignored. A monitor schedules future network checks and can send configured email or webhook notifications. Returns the created monitor.

Inputs: body, goal, name, page, +11 more. Returns: One monitor record.

firecrawl_monitor_deleteDelete Firecrawl monitorA
Destructive

Permanently delete a monitor by ID and stop its future schedule. This operation cannot be undone and returns deletion status.

Inputs: id (required). Returns: Deletion status for the monitor.

firecrawl_monitor_getGet Firecrawl monitorA
Read-only

Retrieve one monitor by ID, including its configuration and current state. This does not run or modify the monitor.

Inputs: id (required). Returns: One monitor record.

firecrawl_monitor_listList Firecrawl monitorsA
Read-only

List monitors for the authenticated account with optional pagination controls. Returns one page of monitor records and pagination metadata.

Inputs: limit, offset. Returns: One page of monitors for the authenticated account.

firecrawl_monitor_runRun Firecrawl monitor nowA

Queue an immediate check for a monitor outside its normal schedule. This starts network work for the monitor's configured targets and returns the queued check.

Inputs: id (required). Returns: The check queued outside the monitor schedule.

firecrawl_monitor_updateUpdate Firecrawl monitorA
Destructive

Patch an existing monitor by ID. The body can change its name, active/paused status, schedule, targets, goal, judging, webhook, notifications, or retention; these changes affect future scheduled checks.

Returns the updated monitor.

Inputs: id (required), body (required). Returns: One monitor record.

firecrawl_parseFirecrawl file parsingA
Read-only

Parse one supported document into markdown, HTML, links, summary, targeted answers, or JSON matching a schema. Supported inputs include common HTML, PDF, Word, RTF, OpenDocument, and spreadsheet files; PDF parsing can be bounded with pdfOptions.maxPages.

Local MCP reads filePath from the server filesystem. Hosted MCP uses two calls: first provide filePath to receive upload instructions, upload locally, then call again with the returned uploadRef; do not send both fields together. Remote web URLs belong in firecrawl_scrape.

Set redactPII to request redaction of personally identifiable information in the returned content. zeroDataRetention requires an eligible authenticated account; omit it for anonymous keyless use. Returns upload instructions for hosted phase one or parsed document content for the final call. Authenticated final responses can include a data.metadata.scrapeId for optional parse feedback.

Inputs: filePath (required), proxy, maxAge, formats, +13 more. Returns: Parsed document content, or the upload instructions for the hosted two-call flo…

firecrawl_research_inspect_paperFirecrawl inspect research paperA
Read-only

Retrieve canonical metadata for one paper ID, such as an arXiv, PMC, PMID, or DOI identifier. Returns the title, abstract, authors, categories, source IDs, and dates as markdown.

Inputs: paperId (required). Returns: Canonical metadata for one paper.

firecrawl_research_read_paperFirecrawl read research paperA
Read-only

Retrieve in-body passages from one paper that are relevant to a specific question. Full text is available only for indexed papers; k controls the number of passages.

Returns matching passages or a notice when full text is unavailable.

Inputs: paperId (required), question (required), k. Returns: Full-text passages from one paper.

firecrawl_research_search_papersFirecrawl research paper searchA
Read-only

Search paper metadata and abstracts with a natural-language query across the indexed corpus, which spans biomedical, life-science, and clinical literature (PubMed, bioRxiv, medRxiv) alongside arXiv and other scientific sources. Optional author, category, and date filters constrain results.

Several distinct framings of the same question surface different papers than a single query does.

Returns ranked papers with canonical IDs, titles, authors, and abstracts.

Inputs: query (required), k, to, from, +2 more. Returns: Ranked papers with canonical IDs, titles, authors, and abstracts.

firecrawl_scrapeFirecrawl scrapeA

Scrape one URL and return its content: markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema. Use it when the request identifies a page and needs its content or defined fields. Use firecrawl_search when additional web sources are needed; on an authenticated session, firecrawl_map lists a site's URLs and firecrawl_crawl collects a set of pages.

Firecrawl may serve recently indexed content; set maxAge: 0 for a live fetch or a smaller maxAge to bound staleness. A successful response does not by itself confirm the page is still current. Browser actions can change the live page when interactive actions are enabled. Authenticated responses can include a metadata.scrapeId for optional scrape feedback.

On an authenticated session with Alexandria access, firecrawl_search with sources unset and firecrawl_find_tools can discover providers for the same fields across several pages; a matching provider returns typed records in one call. Keyless sessions have no provider matches.

Alexandria mode, on an authenticated session with Alexandria access: alexandria selects catalogued capability execution and is mutually exclusive with url.

Inputs: url, proxy, maxAge, mobile, +24 more. Returns: A scraped document, or the Alexandria execution envelope when `alexandria` was…

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 26 tools

    Disambiguation4/5

    Most tools target a clearly distinct resource+action (scrape vs map vs crawl vs parse vs interact), and the specialized searches (developer, gov, research, web) are scoped by source domain. The weakest boundaries are firecrawl_monitor_check vs firecrawl_monitor_checks and firecrawl_search vs firecrawl_find_tools, both of which require reading the descriptions to separate.

    Naming Consistency4/5

    A predictable firecrawl_<noun>_<action> snake_case pattern dominates (scrape, map, crawl, monitor_create/update/delete, research_*_paper). A few names drop the verb or invert order — firecrawl_agent_status, firecrawl_credit_usage, firecrawl_find_tools — which are minor deviations but still readable.

    Tool Count3/5

    At 26 tools the surface is heavy, though the server genuinely spans several domains (scrape/crawl, agent, monitors, research, specialized search, billing). The monitor family alone is seven tools, and some pairs (monitor_run, agent_status) could plausibly be folded into existing operations.

    Completeness4/5

    Coverage is broad and lifecycle-complete in most areas: monitors have full CRUD plus run/checks, interact has a stop, agent has status polling, and research papers have search/inspect/related/read. Minor gaps remain — no crawl cancellation or batch-scrape operation, and job control is limited to read-only status checks.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to perform live web searches across 9 engines, scrape web pages into clean formats, and run agentic research with citations via MCP.
      48 PyPI
      6
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables agents to scrape, crawl, map, search, and extract web pages as clean markdown or structured JSON directly through MCP tools.
      AGPL 3.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to scrape web pages into Markdown, text, HTML, JSON, PDFs, screenshots, and structured data, while managing batch scraping jobs, persistent browser sessions, usage/request history, and docs lookup through native MCP tools.
      27
      448 npm
      1
      Apache 2.0
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables language models to perform AI-powered web scraping, structured data extraction, search, crawling, schema generation, and scheduled monitoring through a unified MCP interface. It provides tools for managing account credits, scrape history, and long-running crawl and monitor workflows.
      -