Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
Firecrawl MCP server for web search and scraping
Firecrawl MCP Server plugs Firecrawl into MCP clients so agents can search, scrape, map, crawl, and interact with live web pages. It supports hosted and self-hosted setups, with HTTP streamable and stdio transport options. The server also exposes feedback tools and a search-only endpoint for read-only use.

Builders who use MCP-capable agents and want web search and scraping inside their workflow.
You can give your agent live web context and structured page data without leaving your editor or terminal.
What it does
Web search
Searches the web and can return page content from results with `firecrawl_search`.
Page scraping
Fetches a known URL as markdown or JSON with `firecrawl_scrape`.
Site mapping and crawling
Discovers URLs with `firecrawl_map` and extracts many pages with `firecrawl_crawl`.
Interactive page actions
Clicks, types, and navigates pages with `firecrawl_interact` when a page needs more than a straight fetch.
Research and monitoring
Includes tools for deeper research, recurring page checks, and change alerts.
Hosted and self-hosted support
Works with Firecrawl cloud, OAuth, API keys, and custom self-hosted API URLs.
Feedback tools
Lets clients send search and endpoint feedback to improve results and refund credits.
How to get it
- 1Connect to the remote hosted server with no setup
https://mcp.firecrawl.dev/v2/mcp
- 2For an interactive account connection, configure your MCP client to use this server URL.…
https://mcp.firecrawl.dev/v2/mcp-oauth
- 3For an API-key connection (for example, an unattended integration), keep the server URL as
https://mcp.firecrawl.dev/v2/mcp
- 4Then configure the client's secure header or secret setting with
Authorization: Bearer <FIRECRAWL_API_KEY>
- 5A read-only, search-only surface is also hosted at
https://mcp.firecrawl.dev/v2/mcp-search
- 6Run
env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp
README
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
- 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.
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. - 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 25 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 6 read-only tools.
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 read-only, search-only surface is also hosted at:
https://mcp.firecrawl.dev/v2/mcp-search
It exposes a fixed set of six read-only tools: firecrawl_search, firecrawl_developer_search, and the four firecrawl_research_* tools. It performs no page-content fetching and has its own OAuth identity; the full endpoint above is unchanged. See docs/search-profile.md for the full contract.
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
- 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-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...
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)
- Example:
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-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 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
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[] |
| developer | Programming questions over developer sources | results[] with passages |
| 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.
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.
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?, alreadySubmitted?, warning? }JSON.
4. Crawl Tool (firecrawl_crawl)
Starts a crawl job, polls until it reach
Files in the repo
- .github
- docker
- docs
- img
- patches
- scripts
- src
- tests
- .dockerignore
- .eslintrc.json
- .gitignore
- .prettierrc
- CHANGELOG.md
- Dockerfile
- Dockerfile.service
- glama.json
- LICENSE
- package.json
- pnpm-lock.yaml
- pnpm-workspace.yaml
- README.md
- server.json
- smithery.yaml
- tsconfig.json
- tsup.config.ts
- VERSIONING.md
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors
High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code
Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.