MCP Firecrawl
Allows integration with the OpenAI Agents SDK for web scraping, crawling, and search.
Click on "Install 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., "@MCP FirecrawlSearch for recent advancements in quantum computing"
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.
MCP Firecrawl
A production-ready Model Context Protocol (MCP) server that integrates with the Firecrawl API to give AI assistants the power to scrape, crawl, and search the web.
Works with Claude Desktop, Cursor, VS Code (Cline/Roo Code), Continue, OpenAI Agents SDK, and any other MCP-compatible AI tool.
Features
Tool | Description | Input |
| Scrape any webpage → returns clean Markdown content + metadata |
|
| Crawl multiple pages (up to 100) from a website |
|
| Search the web using Firecrawl's search engine |
|
Related MCP server: WebSearch
Quick Start
# 1. Clone
git clone https://github.com/YOUR_USERNAME/MCP.git
cd MCP
# 2. Install
npm install
# 3. Configure
cp .env.example .env
# Edit .env → add your Firecrawl API key:
# FIRECRAWL_API_KEY=fc-your-key-here
# 4. Build & Run
npm run build
npm start✅ Server is now running on stdio (default mode).
Usage
Command Line Test
# List available tools
node test-mcp.mjs tools
# Scrape a website
node test-mcp.mjs scrape https://example.com
# Search the web
node test-mcp.mjs search "latest TypeScript news"With OpenAI Agents SDK (TypeScript)
import { Agent, run, MCPServerStdio } from "@openai/agents";
const mcp = new MCPServerStdio({
name: "Firecrawl",
fullCommand: "node dist/server.js",
env: { FIRECRAWL_API_KEY: "fc-..." },
});
await mcp.connect();
const agent = new Agent({
name: "Web Assistant",
instructions: "Use tools to scrape, crawl, and search the web.",
mcpServers: [mcp],
});
const result = await run(agent, "Scrape https://example.com");
console.log(result.finalOutput);
await mcp.close();Integration with AI Tools
Claude Desktop
Add to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"firecrawl": {
"command": "node",
"args": ["C:/path/to/MCP/dist/server.js"],
"env": {
"FIRECRAWL_API_KEY": "fc-..."
}
}
}
}Cursor
Settings → Features → MCP → Add Server:
Name: firecrawl
Type: command
Command: node "C:/path/to/MCP/dist/server.js"
Environment: FIRECRAWL_API_KEY=fc-...VS Code + Cline / Roo Code
File: .vscode/cline_mcp_settings.json
{
"mcpServers": {
"firecrawl": {
"command": "node",
"args": ["C:/path/to/MCP/dist/server.js"],
"env": { "FIRECRAWL_API_KEY": "fc-..." },
"disabled": false,
"autoApprove": []
}
}
}Continue (VS Code / JetBrains)
File: ~/.continue/config.json
{
"experimental": {
"mcpServers": {
"firecrawl": {
"command": "node",
"args": ["C:/path/to/MCP/dist/server.js"],
"env": { "FIRECRAWL_API_KEY": "fc-..." }
}
}
}
}opencode
File: ./opencode.json
{
"mcp": {
"firecrawl": {
"type": "local",
"command": ["node", "MCP/dist/server.js"],
"enabled": true,
"env": { "FIRECRAWL_API_KEY": "fc-..." }
}
}
}HTTP Mode (Streamable HTTP)
Can't use stdio? Run the server as an HTTP endpoint instead:
npm run start:http
# Listening on http://127.0.0.1:3001/mcpThen connect any MCP client to that URL.
Project Structure
MCP/
├── src/
│ ├── server.ts # Entry point (stdio + HTTP modes)
│ ├── tools/
│ │ ├── scrape.ts # scrape_url tool
│ │ ├── crawl.ts # crawl_website tool
│ │ └── search.ts # search_web tool
│ ├── services/
│ │ └── firecrawl.ts # FirecrawlApp API wrapper
│ └── types/
│ └── index.ts # TypeScript interfaces
├── test-mcp.mjs # CLI test utility
├── .env.example # Environment template
├── package.json
├── tsconfig.json
└── README.mdEnvironment Variables
Variable | Required | Default | Description |
| ✅ Yes | — | Your Firecrawl API key |
| ❌ No |
| HTTP bind address (HTTP mode only) |
| ❌ No |
| HTTP port (HTTP mode only) |
NPM Scripts
Script | Description |
| Compile TypeScript → |
| Run in stdio mode |
| Run in HTTP mode |
| Run with hot-reload (stdio) |
| Run with hot-reload (HTTP) |
| Delete |
Tech Stack
Runtime: Node.js 18+
Language: TypeScript
MCP SDK:
@modelcontextprotocol/sdkScraping Engine:
firecrawlSDKValidation:
zodConfig:
dotenv
Requirements
Node.js 18 or higher
A Firecrawl API key (free tier available)
License
MIT
Available Tools
3 toolscrawl_websiteA
Crawl multiple pages from a website and return extracted markdown content
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The starting URL to crawl | |
| limit | No | Maximum number of pages to crawl (1–100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose key behavioral traits such as rate limits, robots.txt compliance, domain restrictions, or how links are followed. The agent lacks critical information about safety and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. It is front-loaded with the core action. However, it could be slightly more structured by separating purpose and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks completeness for a crawling tool: no mention of scope (e.g., same domain only), depth, handling of dynamic content, or output format details. No output schema exacerbates the gap, and the description fails to provide necessary behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains the parameters. The description adds general context (multiple pages, markdown output) but does not provide additional parameter-specific semantics beyond what the schema offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool crawls multiple pages and returns markdown content. It uses a specific verb (crawl) and resource (website), and implicitly distinguishes from siblings: scrape_url (single page) and search_web (search, not crawl).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: for crawling multiple pages from a website. It does not explicitly exclude single-page use or name alternatives, but the context is clear enough for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_urlA
Scrape a single webpage and return clean markdown content with metadata
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the webpage to scrape |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It specifies output format but lacks details on rate limits, authentication, error handling, or limitations (e.g., JavaScript rendering). Agent has limited insight into operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, concise and front-loaded with action. No wasted words. Could benefit from slight elaboration on metadata but remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool (1 param, no output schema, no nested objects), description adequately covers purpose and output. Slight gap on metadata content but not critical for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single parameter url, already described as 'The URL of the webpage to scrape'. Description adds no additional meaning beyond the schema, earning baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'scrape', resource 'single webpage', and output 'clean markdown content with metadata'. This distinguishes from sibling tools: crawl_website (multiple pages) and search_web (search results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for single-page scraping but no explicit when to use or alternatives provided. Does not reference sibling tools or specify when to choose this over crawl_website or search_web.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_webB
Search the web using Firecrawl and return relevant results with content summaries
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only says 'search the web' and 'return relevant results with content summaries'. It does not disclose potential rate limits, query length constraints (though in schema), or whether the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the key action ('Search the web'). No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is fairly complete. It mentions the return format (content summaries), which is helpful. However, it could briefly note that results are limited to snippets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter 'query' described as 'The search query'. The description repeats the verb but adds no extra semantic detail beyond what the schema already provides, keeping the score at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the web using Firecrawl and returns results with summaries. This distinguishes it from siblings crawl_website and scrape_url, which focus on specific sites or URLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus its siblings. For example, it does not specify that this is for broad web searches whereas crawl_website is for crawling a specific domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.0.0- First observed
crawl_website - First observed
scrape_url - First observed
search_web
TDQS
Each tool targets a distinct action: crawling multiple pages, scraping a single page, and searching the web. There is no overlap in purpose.
All tool names follow a consistent verb_noun pattern using snake_case: crawl_website, scrape_url, search_web.
3 tools is slightly lean but covers the core web extraction tasks. More tools could be added (e.g., for authentication), but the set is scoped appropriately.
The tools cover the primary operations: crawling, scraping, and searching. Minor gaps exist (e.g., no tool for custom headers), but the surface is functional for typical use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Firecrawl MCP — wraps the Firecrawl API (firecrawl.dev) for web
Scrape, crawl and search the web for AI agents via MCP.
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server implementation that integrates with FireCrawl for advanced web scraping capabilities.2640,1397,395MIT
- FlicenseCqualityCmaintenanceBuilt as a Model Context Protocol (MCP) server that provides advanced web search, content extraction, web crawling, and scraping capabilities using the Firecrawl API.41-
- AlicenseAqualityAmaintenanceA Model Context Protocol server that enables web search, scraping, crawling, and content extraction through multiple engines including SearXNG, Firecrawl, and Tavily.4190139MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants to perform advanced web scraping, crawling, searching, and data extraction through the Firecrawl API.940,139MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mustafamemon265789-cloud/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server