Firecrawl MCP Server
Enables searching an index built for coding agents that includes GitHub issues, merged pull requests, READMEs, and docs, allowing agents to find relevant coding context.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Firecrawl MCP Server scrape https://docs.firecrawl.dev and summarize the key setup steps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_scrapewhen you have a known URL and want its content as markdown or as JSON matching a schema you supply.Use
firecrawl_mapwhen you need to discover URLs on a site without fetching their content.Use
firecrawl_crawlwhen you need content from many pages under a site; setlimit,includePaths/excludePaths, ormaxDiscoveryDepthto bound it.Use
firecrawl_searchwhen you're starting from a query rather than a URL and want ranked web results; addscrapeOptionsif you also want page content fetched in the same call (the search-only endpoint never fetches content).Use
firecrawl_interactwhen a page needs a click, type, or navigate action before you can read it — pass aurlfor a fresh page or ascrapeIdto 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_usageto 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_interactcall runs onepromptorcodeturn to completion and returns control — the session can persist across calls viascrapeIdand ends withfirecrawl_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/mcpOn 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-oauthFor an API-key connection (for example, an unattended integration), keep the server URL as:
https://mcp.firecrawl.dev/v2/mcpThen 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-searchIt 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-mcpManual Installation
npm install -g firecrawl-mcpRunning 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
Open Cursor Settings
Go to Features > MCP Servers
Click "+ Add new global MCP server"
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
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.
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-mcpUse 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 claudeRunning on VS Code
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": [
{
"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 keyRequired 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 instancesExample:
https://firecrawl.your-domain.comIf 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, orSSE_LOCAL=true): Clients should sendAuthorization: Bearer <fco_access_token>on MCP requests. An OAuth bearer token takes precedence overx-firecrawl-api-key/x-api-keywhen both are present.stdio: Use
FIRECRAWL_OAUTH_TOKENfor a static access token, or keep usingFIRECRAWL_API_KEYfor 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-keyFor 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 authUsage 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.
searchwithcategories: ["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 scrapealexandria
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
idfield. Pass thatidtofirecrawl_search_feedbackafter 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, anddata. Use the returnedidwithfirecrawl_check_crawl_statusif 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:
Call
firecrawl_agentwith your prompt/schema → returns job IDDo other work while the agent researches (can take minutes for complex queries)
Poll
firecrawl_agent_statuswith the job ID to check progressWhen 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 pagesschema: Optional JSON schema for structured outputeffort: 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. Iftrue, the agent only visits the URLs inurls.threadId: Optional. Continue an existing thread: thethreadIdfrom an earlierfirecrawl_agentorfirecrawl_agent_statusresult. Omit to start a new thread. On a follow-up, omittedmode,urls,schemaandexchangesettings 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 inmessageinstead of a re-run;exchange.requireApprovalneeds it.exchange: Optional. Alexandria provider settings for this turn, forwarded as-is toPOST /v2/agent:enabled,toolkits(up to 5 provider slugs),maxCalls(1 to 30),requireApproval(paid calls end the turn with apendingApproval; needsmode: "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.skippedProviderson the status result lists the gated providers that would have helped."ask": the same, plus a termspendingApprovalandexchange.requiresActionwith the approval ID and provider requirements. Read terms withterms/show; an organization admin accepts them in the Firecrawl dashboard.
approve:{ approvalId, callIds?, always? }answers yes to thependingApprovalthe previous turn ended on.callIdsandalwaysapply to paid-call approvals only.decline:{ approvalId }answers no. A declined terms offer keeps those providers out of the rest of the thread.approveanddeclineneedthreadId, 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:
Show the user the terms (
terms/showthroughfirecrawl_scrapewithalexandria).Direct an organization admin to accept the terms at the provider's URL, or data sources settings. A data request is not consent.
Wait for the admin to confirm acceptance in the dashboard.
Continue the same thread: call
firecrawl_agentwith the samethreadIdandexchange.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
threadIdandthreadTurn. Usefirecrawl_agent_statusto 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 latercompleted: Research finished - response includes the extracted datafailed: 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
urlto scrape and open a page for interaction in one MCP call.Pass
scrapeIdto continue interacting with an existing scraped page.To save browser state (cookies, localStorage) to a named profile, pass
urlwithscrapeOptions: { "profile": { "name": "my-profile", "saveChanges": true } }. The state is saved whenfirecrawl_interact_stopends the session.Pass exactly one of
urlorscrapeId, plus eitherpromptorcode.
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 includinggoal,judgeEnabled,webhook, andnotification.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, includingdiff,snapshot,judgment.meaningful, andjudgment.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 |
| Providers in that category |
| Compact tool names, descriptions, and prices |
| 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_usagedefaults to{ "view": "current" }and returnsremainingCredits,planCredits,billingPeriodStart, andbillingPeriodEnd. Remaining credits can exceed plan credits when the team has top-ups or grants.Pass
{ "view": "historical" }for calendar-month periods containingstartDate,endDate, andcreditsUsed. Passing{ "byApiKey": true }also selects the historical view and splits periods by API key; each row then includesapiKey. Do not combinebyApiKeywith{ "view": "current" }. The latest period'sendDatecan 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 exceededAPI 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 testContributing
Fork the repository
Create your feature branch
Run tests:
npm testSubmit 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 |
|
|
Semantic tools only |
|
|
Categories |
|
|
Providers in a category |
|
|
Compact provider tools |
|
|
Selected contract |
|
|
Execute |
|
|
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 toolsfirecrawl_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 statusARead-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 statusARead-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 usageARead-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_developer_searchFirecrawl developer searchARead-only
Search an index of public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation for programming questions that need external documentation or upstream evidence.
Returns ranked results with an ID, source type, URL, title, and the matched passages in markdown.
Inputs: query (required), k, skills. Returns: Ranked developer-index results with their matched passages.
firecrawl_find_toolsFind ToolsARead-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_gov_searchFirecrawl Government Index searchARead-only
Search an index of primary law and regulatory material from US federal, state, and local government sources (statutes, regulations, codes, court opinions, and other government publications) for legal or regulatory questions that need the governing text or an official source.
Returns ranked results with a position, title, URL, and matched snippet.
Inputs: query (required), k. Returns: Ranked Government Index results with their matched snippets.
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 sessionADestructive
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 mapARead-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 checkARead-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 checksARead-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 monitorADestructive
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 monitorARead-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 monitorsARead-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 monitorADestructive
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 parsingARead-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 paperARead-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 paperARead-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 searchARead-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…
firecrawl_searchFirecrawl web searchARead-only
Search web, news, or image sources and return ranked results with query-relevant highlights. Each web result is a title, URL, and description; use firecrawl_scrape on a result URL when the excerpt is not enough.
Authenticated search also returns matching Alexandria data providers in data.tools (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). Prefer a provider over scraping pages when the task needs the same fields across several entities, exact figures or timestamps, provenance, or many records; use web results when they already answer the question. A search with sources: ["web"] omits semantic provider discovery; domainTools: true can still return website-matched tools. Web-only results use domainTools: false.
On an authenticated session, tool matches describe available capabilities; firecrawl_find_tools returns their contracts and firecrawl_scrape with an alexandria body executes a selected capability. Keyless sessions get no Alexandria matches in data.tools.
For a programming question, add categories: ["developer"]; its hits return in data.web with category: "developer". For a legal or regulatory question, categories: ["gov"] returns hits in data.web with category: "gov" and cannot be combined with other categories; authenticated sessions also have firecrawl_gov_search as the dedicated tool. categories: ["research"] restricts web results to research-affiliated websites; the firecrawl_research_* tools are a separate surface over paper abstracts and full text (PubMed, bioRxiv, medRxiv, arXiv). Query operators, domain filters, categories, toolDetail and scrapeOptions are described on their parameters. Returns source-type result groups and usage metadata. Authenticated responses can include an id for optional search feedback.
Inputs: query (required), tbs, limit, filter, +12 more. Returns: Ranked search results grouped by source.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 26 tools
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.
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.
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.
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
Related MCP Connectors
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Scrape, crawl and search the web for AI agents via MCP.
Live web access for agents: scrape, SERP search, crawl/map, 100+ collectors, datasets, proxies.
Web scraping, extraction and search for AI agents. Hosted MCP with workspace API keys.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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 PyPI6MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to scrape, crawl, map, search, and extract web pages as clean markdown or structured JSON directly through MCP tools.AGPL 3.0
- AlicenseAqualityBmaintenanceEnables 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.27448 npm1Apache 2.0
- FlicenseNot gradedqualityAmaintenanceEnables 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.-