Firecrawl MCP
官方为Cursor和Claude等LLM客户端添加强大的网页抓取和搜索功能。
你可以用 Firecrawl MCP 做什么?
- 抓取已知 URL — 让助手将单个页面抓取为干净的 Markdown 或符合你通过
firecrawl_scrape提供的 schema 的结构化 JSON。 - 发现站点 URL — 让助手使用
firecrawl_map列出站点上已编入索引的 URL,然后再决定要抓取哪些页面。 - 搜索网络 — 使用
firecrawl_search获取查询的排名结果,并可选地为部分结果抓取完整页面内容。 - 爬取多个页面 — 使用
firecrawl_crawl在整个站点中提取内容,并通过limit、includePaths/excludePaths或maxDiscoveryDepth限定范围。 - 驱动浏览器 — 使用
firecrawl_interact点击、输入、填写表单或导航动态页面,并通过scrapeId继续会话。 - 检查额度使用情况 — 使用
firecrawl_credit_usage询问还剩多少 Firecrawl 额度,或这些额度花在了哪里。
文档
Firecrawl MCP Server
一个 Model Context Protocol (MCP) 服务器,将 Firecrawl——面向 AI 智能体的上下文 API——带给兼容 MCP 的客户端:搜索、抓取并与实时网络交互,返回干净的 Markdown 或结构化数据。
非常感谢 @vrknetha、@knacklabs 的初始实现!
功能特性
- 搜索网络,可选为每个结果获取完整页面内容
- 搜索面向开发者来源(GitHub issues、已合并的 pull requests、README 和文档)、美国政府来源以及科学论文(PubMed、bioRxiv、medRxiv、arXiv)的索引
- 将任意 URL 抓取为干净的 Markdown 或结构化 JSON
- 解析 PDF 和文档
- 爬取站点以获取多个页面的内容,或对其进行映射以发现其 URL
- 在真实浏览器中与页面交互:点击、输入、填写表单并导航动态页面
- 运行 Agent 任务,进行多来源研究并返回结构化数据
- 监控页面并在其内容发生变化时收到通知
- 查看当前和历史 Firecrawl 额度使用情况
- 自动重试和速率限制
- 支持云端和自托管
- 支持 SSE
何时使用此服务器
- 当你有已知 URL,并希望将其内容获取为 markdown 或符合你所提供 schema 的 JSON 时,使用
firecrawl_scrape。 - 当你需要发现站点上的 URL 而不获取其内容时,使用
firecrawl_map。 - 当你需要站点下多个页面的内容时,使用
firecrawl_crawl;设置limit、includePaths/excludePaths或maxDiscoveryDepth来限制范围。 - 当你从查询而非 URL 开始,并希望获得排序后的网络结果时,使用
firecrawl_search。结果带有摘要;对你需要的 URL 使用firecrawl_scrape获取完整页面。scrapeOptions会在同一次调用中获取每个结果的页面,并将每个都计为一次抓取,因此请仅用于获取少量结果的全文(仅搜索端点从不获取内容)。 - 当页面需要点击、输入或导航操作后才能读取时,使用
firecrawl_interact:传入url以获取新页面,或传入scrapeId以继续使用你已抓取的页面。 - 当同一页面需要按周期性计划进行检查并获取差异和变更提醒,而不是只获取一次时,使用
firecrawl_monitor_*工具。 - 使用
firecrawl_credit_usage查看剩余额度或额度支出情况,可按月或按天查看,并可选按端点或 API key 细分。 - 当你需要在你自己的多个步骤中保持浏览器会话打开,并使用你自己的重试和终止逻辑时,请考虑其他方案:每次
firecrawl_interact调用都会运行一个prompt或code回合直至完成并返回控制权。会话可通过scrapeId在多次调用之间保持,并以firecrawl_interact_stop结束,但你无法在单次调用中从客户端侧逐步交互式地驱动它。
当完整配置在默认设置下注册时(包含反馈工具,且未以本地无密钥模式运行),此服务器会列出 27 个工具。设置 FIRECRAWL_NO_SEARCH_FEEDBACK=1 和/或 FIRECRAWL_NO_ENDPOINT_FEEDBACK=1 会移除相应的反馈工具并减少此数量,本地无密钥启动也是如此。对于有工具槽位限制的客户端:托管无密钥端点(https://mcp.firecrawl.dev/v2/mcp,无需 API key)仅暴露 3 个工具(firecrawl_scrape、firecrawl_search、firecrawl_parse),而专用的仅搜索端点(https://mcp.firecrawl.dev/v2/mcp-search)暴露一组固定的 9 个工具(搜索、开发者、政府和科研搜索,以及 Alexandria 目录查询和执行)。
安装
托管 MCP(无密钥免费层)
无需任何设置即可连接到远程托管服务器:
https://mcp.firecrawl.dev/v2/mcp
在无密钥免费层中,scrape、search 和 parse 无需 API key 即可使用(有速率限制)。其他工具如 crawl、map 和 agent 仍需要 key。
只要用户能够注册,就优先使用 OAuth 或 API key。它可以解锁完整的工具集和更高的限制。
要进行交互式账户连接,请将你的 MCP 客户端配置为使用此服务器 URL。这是一个 MCP 端点,不是浏览器页面;请使用客户端的账户连接流程,重新连接时不要添加第二个 Firecrawl 服务器条目:
https://mcp.firecrawl.dev/v2/mcp-oauth
对于 API key 连接(例如无人值守的集成),请将服务器 URL 保持为:
https://mcp.firecrawl.dev/v2/mcp
然后使用以下内容配置客户端的安全 header 或密钥设置:
Authorization: Bearer <FIRECRAWL_API_KEY>
切勿将 API key 放入服务器 URL。切勿将 API key 放入智能体聊天中。请直接在客户端或密钥管理器中配置它。有关客户端特定的说明,请参阅托管 MCP 设置指南和智能体入门指南。
为你的集成命名
通过 HTTP 连接的集成可以使用 X-Firecrawl-Origin header 为自身命名,例如 X-Firecrawl-Origin: my-agent。服务器会将其作为请求来源 mcp-my-agent@<server version> 报告给 Firecrawl,以替代原本会报告的客户端名称或 User-Agent。请使用字母、数字和短横线:其他字符的每一段连续字符都会变成一个短横线,开头和结尾的短横线会被去除,名称会在 48 个字符处截断。工具结果不受影响;只有发送给 Firecrawl API 的来源(以及传递给嵌入器的 beforeKeylessRequest)会发生变化。
仅搜索端点
一个固定范围的搜索界面也托管在:
https://mcp.firecrawl.dev/v2/mcp-search
它暴露一组固定的九个工具:firecrawl_search、firecrawl_developer_search、firecrawl_gov_search、四个 firecrawl_research_* 工具,以及两个 Alexandria 工具 firecrawl_find_tools 和 firecrawl_scrape。其 firecrawl_search 不获取任何页面内容。
使用 npx 运行
env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp
手动安装
npm install -g firecrawl-mcp
在 Cursor 上运行
配置 Cursor 🖥️ 注意:需要 Cursor 版本 0.45.6+ 有关最新的配置说明,请参阅 Cursor 官方关于配置 MCP 服务器的文档: Cursor MCP Server 配置指南
在 Cursor v0.48.6 中配置 Firecrawl MCP
- 打开 Cursor 设置
- 转到 Features > MCP Servers
- 点击 "+ Add new global MCP server"
- 输入以下代码:
{ "mcpServers": { "firecrawl-mcp": { "command": "npx", "args": ["-y", "firecrawl-mcp"], "env": { "FIRECRAWL_API_KEY": "YOUR-API-KEY" } } } }
在 Cursor v0.45.6 中配置 Firecrawl MCP
- 打开 Cursor 设置
- 转到 Features > MCP Servers
- 点击 "+ Add New MCP Server"
- 输入以下内容:
- Name: "firecrawl-mcp"(或你偏好的名称)
- Type: "command"
- Command:
env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp
如果你使用 Windows 并遇到问题,请尝试
cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"
将 your-api-key 替换为你的 Firecrawl API key。如果你还没有,可以创建一个账户并从 https://www.firecrawl.dev/app/api-keys 获取。
添加后,刷新 MCP 服务器列表以查看新工具。Composer Agent 会在适当时自动使用 Firecrawl MCP,但你也可以通过描述你需要从网络上获取的内容来明确请求它。通过 Command+L(Mac)访问 Composer,在提交按钮旁选择 "Agent",然后输入你的查询。
在 Windsurf 上运行
将此添加到你的 ./codeium/windsurf/model_config.json:
{
"mcpServers": {
"mcp-server-firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_API_KEY"
}
}
}
}
使用 Streamable HTTP 本地模式运行
要在本地使用 Streamable HTTP 而不是默认的 stdio 传输运行服务器:
env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp
使用 url:http://localhost:3000/mcp
在此模式下,服务器只应答发往 localhost、127.0.0.1 或 [::1](任意端口)的请求,以及当 HOST 中的地址不是 0.0.0.0 或 :: 时发往该地址的请求。如果请求的 Host header 指定了其他主机,或其 Origin header 指定了其他站点,则会收到 403,并且 CORS header 会回显允许的来源而不是 *。对 /health 的 GET 和 HEAD 请求无论主机如何都会被应答,因此健康检查可以继续工作,并且服务器会为每个拒绝的请求记录一行日志并注明 FIRECRAWL_MCP_ALLOWED_HOSTS。这可以阻止你访问的网页通过 DNS 重绑定或跨源请求调用本地服务器并使用其 FIRECRAWL_API_KEY。
要通过其他名称或地址访问服务器,例如反向代理后面的主机名或 LAN IP,请将其列在 FIRECRAWL_MCP_ALLOWED_HOSTS 中(逗号分隔;端口会被忽略)。同一列表决定哪些浏览器来源可以调用服务器。同一台机器上的反向代理可以保留默认绑定地址:
env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY \
FIRECRAWL_MCP_ALLOWED_HOSTS=mcp.home.lan npx -y firecrawl-mcp
其他机器上的客户端还需要服务器监听非回环地址,因此也要设置 HOST。这样,每个能访问该端口的客户端都会获得服务器的 FIRECRAWL_API_KEY,因此请仅在你信任的网络上这样做:
env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY HOST=0.0.0.0 \
FIRECRAWL_MCP_ALLOWED_HOSTS=192.168.1.20 npx -y firecrawl-mcp
FIRECRAWL_MCP_ALLOWED_HOSTS=* 会关闭该检查并恢复通配符 CORS header。仅当服务器前面的某个组件自身会检查主机和来源时才这样做。
使用 Docker 运行
ghcr.io/firecrawl/firecrawl-mcp-server 镜像运行与 npx -y firecrawl-mcp 相同的服务器。从 main 构建的每个版本都会打上 latest、v<package version> 和 sha-<commit sha> 标签。v<package version> 会移动到该版本的最新构建,因此当你需要固定镜像时,请固定 sha-<commit sha>(或一个 digest)。
stdio(默认),适用于将服务器作为命令启动的 MCP 客户端:
docker run -i --rm -e FIRECRAWL_API_KEY=fc-YOUR_API_KEY ghcr.io/firecrawl/firecrawl-mcp-server:latest
{
"mcpServers": {
"firecrawl-mcp": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "FIRECRAWL_API_KEY", "ghcr.io/firecrawl/firecrawl-mcp-server:latest"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_API_KEY"
}
}
}
}
Streamable HTTP,服务于 http://localhost:3000/mcp:
docker run --rm -p 127.0.0.1:3000:3000 \
-e HTTP_STREAMABLE_SERVER=true \
-e FIRECRAWL_API_KEY=fc-YOUR_API_KEY \
ghcr.io/firecrawl/firecrawl-mcp-server:latest
镜像设置了 HOST=0.0.0.0 和 PORT=3000;覆盖 PORT(以及 -p 映射)以在其他位置监听。对于不发送自身凭据的请求,服务器使用容器的 FIRECRAWL_API_KEY,因此示例仅在 127.0.0.1 上发布端口;除非客户端必须提供自己的 key,否则不要更广泛地暴露它。设置 FIRECRAWL_API_URL 以使用自托管的 Firecrawl API。容器以非特权用户 node 运行。服务器在 Host 和 Origin header 中仅应答 localhost、127.0.0.1 和 [::1],因此 -p 127.0.0.1:3000:3000 映射可直接使用;要通过其他名称访问它,请设置 -e FIRECRAWL_MCP_ALLOWED_HOSTS=<host>(参见 Streamable HTTP 本地模式)。
在 VS Code 上运行
要一键安装,请点击下面的某个安装按钮...
要手动安装,请将以下 JSON 块添加到 VS Code 中的 User Settings (JSON) 文件。你可以按 Ctrl + Shift + P 并输入 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}"
}
}
}
}
}
或者,你可以将其添加到工作区中名为 .vscode/mcp.json 的文件中。这将允许你与他人共享配置:
{
"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}"
}
}
}
}
配置
环境变量
云端 API 所需
FIRECRAWL_API_KEY:你的 Firecrawl API key- 使用云端 API(默认)时必需
- 使用带有
FIRECRAWL_API_URL的自托管实例时可选
FIRECRAWL_API_URL(可选):用于自托管实例的自定义 API 端点- 示例:
https://firecrawl.your-domain.com - 如果未提供,将使用云端 API(需要 API key)
- 示例:
FIRECRAWL_INTEGRATION(可选):用于启动此服务器的应用(例如编辑器扩展)的集成标签- 作为 scrape、batch scrape、crawl、map、search、extract、agent、parse、interact 和 feedback 请求的
integration字段发送 - 使用以
_开头的值,例如_zed
- 作为 scrape、batch scrape、crawl、map、search、extract、agent、parse、interact 和 feedback 请求的
本地 HTTP 模式
FIRECRAWL_MCP_ALLOWED_HOSTS(可选):服务器以HTTP_STREAMABLE_SERVER=true或SSE_LOCAL=true响应的额外主机名或地址,以逗号分隔localhost、127.0.0.1、[::1]以及非通配符的HOST始终被允许;端口会被忽略- 如果请求的
Host或Origin头指定了任何其他主机,则返回403,但发往/health的GET和HEAD请求除外 *会关闭该检查;不与CLOUD_SERVICE=true一起使用,后者会响应所有主机
MCP OAuth(Bearer 访问令牌)
Firecrawl 通过 firecrawl.dev 上的授权服务器签发 OAuth 访问令牌(fco_…)。此 MCP 服务器会将其解析到的任何凭据作为 Authorization: Bearer … 转发给 Firecrawl API。
- HTTP 流式传输(
CLOUD_SERVICE=true、HTTP_STREAMABLE_SERVER=true或SSE_LOCAL=true):客户端应在 MCP 请求中发送Authorization: Bearer <fco_access_token>。当两者同时存在时,OAuth bearer 令牌优先于x-firecrawl-api-key/x-api-key。 - stdio: 使用
FIRECRAWL_OAUTH_TOKEN提供静态访问令牌,或继续使用FIRECRAWL_API_KEY提供 API 密钥。
仅使用 访问 令牌(fco_…)。刷新令牌(fcr_…)必须在令牌端点交换,不能传递给 scrape/search API。
CLOUD_SERVICE=true
CLOUD_SERVICE=true 通过可流式 HTTP 在 PORT 上提供这些工具(默认 3000,绑定到 0.0.0.0),并采用更严格的默认设置:每个请求都必须携带凭据(API 密钥或 OAuth 访问令牌),scrape 为只读(见下方 scrape 工具),且 firecrawl_parse 仅接受上传。
FASTMCP_ENDPOINT 选择工具面:/v2/mcp(默认)为完整工具集,/v2/mcp-oauth 为账户工具面,/v2/mcp-search 为仅搜索工具(这还需要 FIRECRAWL_MCP_SEARCH_OAUTH_ONLY=true)。使用完整工具面时,仅搜索实例还会在端口 3001 上启动;设置 FIRECRAWL_MCP_SEARCH_ENABLED=false 可将其关闭。
配置示例
用于云 API:
export FIRECRAWL_API_KEY=your-api-key
用于自托管实例:
# 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
与 Claude Desktop 配合使用
将以下内容添加到你的 claude_desktop_config.json:
{
"mcpServers": {
"mcp-server-firecrawl": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
如何选择工具
使用本指南为你的任务选择合适的工具:
- 如果你知道想要的确切 URL: 使用 scrape(配合 JSON 格式获取结构化数据)
- 如果你有多个已知 URL: 对每个 URL 调用 scrape。如果你确实需要一次批量 API 操作,请在 MCP 之外使用 Firecrawl API 的批量端点。
- 如果你需要发现站点上的 URL: 使用 map
- 如果你想在网上搜索信息: 使用 search
- 如果你有编程问题(某个库、API 约定、错误消息、已知 bug):使用 developer search
- 如果你有法律或监管问题(法规、条例、法典、法院意见或其他美国政府出版物):使用 Firecrawl Government Index
- 如果你需要科学论文(生物医学、生命科学、临床或 arXiv 文献):使用 research tools,它会搜索论文摘要和全文。
search配合categories: ["research"]是另一回事:对普通网页结果进行网站过滤。 - 如果你需要返回结构化数据的多源研究、不知道 URL,或答案横跨多个站点(某个实体及其字段、列表、数据集):使用 agent
- 如果你想分析整个站点或某个部分: 使用 crawl(注意限制!)
- 如果你需要交互式浏览器自动化(点击、输入、导航):使用 interact 并传入 URL 以打开新页面,或者在你已经抓取过页面或需要更精细的抓取控制时使用 scrape + interact
- 如果你需要来自已编目提供商(Alexandria)的数据:使用
sources: ["alexandria"]搜索,用 find_tools 检查选定的契约,并用 scrapealexandria执行它
快速参考表
| 工具 | 最适合 | 返回 |
|---|---|---|
| scrape | 单页内容 | JSON(首选)或 markdown |
| interact | 与 URL 或已抓取页面交互 | URL 模式的执行结果 + scrapeId |
| map | 发现站点上的 URL | URL[] |
| crawl | 多页提取(有上限) | 内部轮询后的最终抓取状态/数据 |
| parse | 文件和托管上传引用 | markdown、JSON 或文档输出 |
| search | 网上搜索信息 | results[] |
| find_tools | Alexandria 目录浏览和 URL 查找 | 提供商、工具契约和 nextTool 导航 |
| developer | 基于开发者来源的编程问题 | 带段落的 results[] |
| gov | 美国主要法律和监管材料 | 带片段的 results[] |
| agent | 多源研究、未知或多个站点 | JSON(结构化数据) |
| monitor | 定期页面检查 | monitor/check 元数据和差异 |
| research | 论文和 GitHub 仓库研究 | 研究结果和仓库匹配 |
格式选择指南
使用 scrape 时,选择合适的格式:
- JSON 格式(大多数情况下推荐): 当你需要从页面获取特定数据时使用。根据你需要提取的内容定义 schema。这能让响应保持精简,避免上下文窗口溢出。
- Markdown 格式(谨慎使用): 仅当你确实需要完整页面内容时使用,例如阅读整篇文章以进行摘要或分析页面结构。
可用工具
1. Scrape 工具(firecrawl_scrape)
使用高级选项从单个 URL 抓取内容。
最适合:
- 单页内容提取,当你确切知道哪个页面包含所需信息时。
不推荐用于:
- 从多个页面提取内容(对已知 URL 使用重复的 scrape 调用,或先 map + scrape 发现 URL,或使用 crawl 获取完整页面内容)
- 当你不确定哪个页面包含信息时(使用 search)
常见错误:
- 向一次 scrape 调用传入 URL 列表。在 MCP 中每个 URL 调用一次 scrape。如果你确实需要一次批量 API 操作,请在 MCP 之外使用 Firecrawl API 的批量端点。
- 默认使用 markdown 格式(使用 JSON 格式仅提取你需要的内容)。
选择正确的格式:
- JSON 格式(首选): 对于大多数用例,使用带 schema 的 JSON 格式仅提取所需的特定数据。这能让响应保持聚焦并防止上下文窗口溢出。
- Markdown 格式: 仅当任务确实需要完整页面内容时使用(例如,总结整篇文章、分析页面结构)。
提示词示例:
"从 https://example.com/product. 获取产品详情"
用法示例(JSON 格式 - 首选):
{
"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"]
}
}
]
}
}
用法示例(markdown 格式 - 需要完整内容时):
{
"name": "firecrawl_scrape",
"arguments": {
"url": "https://example.com/article",
"formats": ["markdown"],
"onlyMainContent": true
}
}
用法示例(branding 格式 - 提取品牌标识):
{
"name": "firecrawl_scrape",
"arguments": {
"url": "https://example.com",
"formats": ["branding"]
}
}
Branding 格式: 提取全面的品牌标识(颜色、字体、排版、间距、logo、UI 组件),用于设计分析或风格复刻。
隐私: 设置 redactPII: true 可返回已脱敏个人可识别信息的内容。
配合 CLOUD_SERVICE=true 时: scrape 为只读。它不接受浏览器 actions,也无法接受提供商条款。指定 profile 会加载已保存的浏览器状态而不向其保存更改,完整端点的 firecrawl_search 也以同样方式对待 scrapeOptions.profile。要将浏览器状态保存到配置文件,请使用 firecrawl_interact 打开页面(见下文)。组织管理员在仪表板中接受条款。
返回:
- JSON 结构化数据、markdown、品牌配置文件或指定的其他格式。
2. Map 工具(firecrawl_map)
映射网站以发现站点上所有已索引的 URL。
最适合:
- 在决定抓取什么之前发现网站上的 URL
- 查找网站的特定部分
不推荐用于:
- 当你已经知道需要哪个特定 URL 时(使用 scrape)
- 当你需要页面内容时(先 map 再 scrape)
常见错误:
- 使用 crawl 而不是 map 来发现 URL
提示词示例:
"列出 example.com 上的所有 URL。"
用法示例:
{
"name": "firecrawl_map",
"arguments": {
"url": "https://example.com"
}
}
返回:
- 站点上找到的 URL 数组
3. Search 工具(firecrawl_search)
在网上搜索,并可选地从搜索结果中提取内容。
最适合:
- 在多个网站中查找特定信息,当你不确定哪个网站有该信息时。
- 当你需要与查询最相关的内容时
不推荐用于:
- 当你已经知道要抓取哪个网站时(使用 scrape)
- 当你需要全面覆盖单个网站时(使用 map 或 crawl)
常见错误:
- 对开放式问题使用 crawl 或 map(改用 search)
用法示例:
{
"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 }。每个抓取的结果都按一次 scrape 计费,因此对于大多数问题,请使用摘要,并仅对需要的 URL 使用 firecrawl_scrape。
将 highlights 设为 true 以请求与查询相关的高亮,或设为 false 以保留原始搜索片段。省略它以使用 API 的默认行为。
添加 "sources": ["alexandria"] 以在 data.tools 中进行语义工具发现,可选地与 web/news/images 混合。查询为必填项。使用 firecrawl_find_tools 进行上下文查找和渐进式披露;参见 Alexandria Tools。
关于科学论文,参见 Research Tools:它们搜索论文摘要和全文,而此处的 categories: ["research"] 会将普通网页结果过滤为研究相关网站。
返回:
- 按来源分组的搜索结果(
data.web、data.images、data.news),带有可选的抓取内容,以及一个id字段。每个结果都带有一个source和一个从 1 开始索引的position,在其所属分组内从 1 开始编号——请将该对直接复制到firecrawl_search_feedback的valuableResults中,而不是去数数组元素。在你使用结果后,将该id传给firecrawl_search_feedback,以返还 1 个积分(搜索花费 2 个积分)并提升搜索质量。
提示词示例:
"比较各科技公司的远程办公津贴政策。"
3b. Search Feedback 工具(firecrawl_search_feedback)
对之前的 firecrawl_search 结果发送结构化反馈。每个搜索 id 的首次反馈会返还 1 个积分并提升 Firecrawl 的搜索质量。按搜索 id 幂等。
在你实际使用过的每次搜索之后调用此工具(或对没有帮助的搜索也调用)。带有 missingContent 的差评/部分反馈与好评同样有价值。
退出: 启动 MCP 服务器时在环境中设置 FIRECRAWL_NO_SEARCH_FEEDBACK=1(或 FIRECRAWL_DISABLE_SEARCH_FEEDBACK=1)。firecrawl_search_feedback 工具将不会被注册,因此 agent 无法调用它。团队管理员也可以在服务器端禁用反馈;在这种情况下,该工具会被注册,但始终返回 feedbackErrorCode: "TEAM_OPTED_OUT"。
最重要的字段: missingContent。它是一个数组,包含智能体预期找到但实际未找到的特定内容片段。每个缺失的主题对应一个条目;这些条目会跨团队汇总,告诉我们接下来应该索引什么。为了获得有用的结果,请使用 valuableResults,并在每个结果上标记 source/position 对——结果会分组,每组独立从 1 开始编号,因此两者都是必需的。请列出每一个有用的结果(未列出的结果会被视为无用),并将 valuableSources 保留给不在返回结果中的有用 URL。
每日退款上限(每个团队、每个 UTC 日,默认 100 积分)。 一旦某个团队的 creditsRefundedToday 达到 dailyRefundCap,后续提交仍会记录反馈,但不再退还积分。响应会设置 dailyCapReached: true。当智能体看到该标志时,应在当天剩余时间(UTC)停止调用此工具。
用法示例:
{
"name": "firecrawl_search_feedback",
"arguments": {
"searchId": "0193f6c5-1234-7890-abcd-1234567890ab",
"rating": "good",
"valuableResults": [
{ "source": "web", "position": 1 },
{ "source": "web", "position": 3 },
{ "source": "news", "position": 2, "reason": "Broke the pricing change." }
],
"valuableSources": [
{
"url": "https://docs.firecrawl.dev/pricing",
"reason": "Not in the results; found via a result's pricing link. Answered the question."
}
],
"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'"
}
}
返回:
{ success, feedbackId, creditsRefunded, alreadySubmitted? }JSON。
3c. 通用反馈工具(firecrawl_feedback)
通过 /v2/feedback 为已完成的 v2 端点任务发送结构化反馈。
用于针对 scrape、parse、map 或 search
任务的端点级反馈。对于搜索结果质量,请优先使用
firecrawl_search_feedback,因为它包含针对搜索的专门指导。
保持反馈简洁:使用问题代码、标签、简短说明、URL、页码 和小型元数据对象。不要包含原始抓取/解析输出。
退出: 启动 MCP 服务器时,在环境中设置 FIRECRAWL_NO_ENDPOINT_FEEDBACK=1(或 FIRECRAWL_DISABLE_ENDPOINT_FEEDBACK=1)。firecrawl_feedback 工具将不会被注册,因此智能体无法调用它。
用法示例:
{
"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"
}
}
}
返回:
{ success, feedbackId, creditsRefunded, creditsRefundedToday?, dailyRefundCap?, dailyCapReached?, websiteCapReached?, alreadySubmitted?, warning? }JSON。
4. 爬取工具(firecrawl_crawl)
启动爬取任务,轮询直到达到终止状态,并返回最终的爬取状态/数据。
最适合:
- 从多个相关页面提取内容,当你需要全面覆盖时。
不推荐用于:
- 从单个页面提取内容(请使用 scrape)
- 当 token 限制是问题时(使用 map + scrape 以获得更严格的控制)
- 当你需要快速结果时(爬取可能很慢)
警告: 爬取响应可能非常大,可能超出 token 限制。限制爬取深度和页面数量,或使用 map + scrape 以获得更严格的控制。
常见错误:
- 将 limit 或 maxDiscoveryDepth 设置得过高(导致 token 溢出)
- 对单个页面使用 crawl(请改用 scrape)
提示示例:
“获取 example.com/blog 前两层的所有博客文章。”
用法示例:
{
"name": "firecrawl_crawl",
"arguments": {
"url": "https://example.com/blog/*",
"maxDiscoveryDepth": 2,
"limit": 100,
"allowExternalLinks": false,
"deduplicateSimilarURLs": true
}
}
返回:
- 内部轮询后的最终爬取状态和数据,包括
id、status、completed、total、creditsUsed、expiresAt、next和data。如果你之后需要重新检查任务,请使用返回的id配合firecrawl_check_crawl_status。
5. 检查爬取状态(firecrawl_check_crawl_status)
按 ID 检查现有爬取任务的状态和结果。
{
"name": "firecrawl_check_crawl_status",
"arguments": {
"id": "550e8400-e29b-41d4-a716-446655440000"
}
}
返回:
- 响应包含爬取任务的状态:
6. 解析工具(firecrawl_parse)
使用 Firecrawl 的 /v2/parse 端点解析本地文件或托管上传引用。
最适合: 需要 markdown 或结构化 JSON 输出的 PDF、Word 文档、电子表格、HTML 文件和其他文档。托管端点使用两步上传流程;本地直接文件读取需要自托管的 FIRECRAWL_API_URL。
不推荐用于: 远程 URL(请使用 scrape)、一次调用中处理多个文件(每个文件调用一次 parse),或仅限浏览器的操作,例如截图和点击。
托管端点: 它无法读取你的文件系统。使用 filePath 调用 firecrawl_parse 以获取短期上传命令和 nextToolCall,在本地上传文件,然后使用返回的 uploadRef 再次调用 firecrawl_parse。上传步骤需要 Firecrawl 认证或无密钥层级。在本地 npx firecrawl-mcp 模式下,直接文件解析目前需要 FIRECRAWL_API_URL 指向自托管的 Firecrawl API;仅使用云 API 密钥的普通本地服务器无法通过此工具读取和上传文件。
用法示例:
{
"name": "firecrawl_parse",
"arguments": {
"filePath": "/absolute/path/to/document.pdf",
"formats": ["markdown"],
"parsers": ["pdf"],
"zeroDataRetention": true
}
}
返回: 解析后的文档内容,或带有 nextToolCall 的托管上传说明。
7. 使用 Scrape JSON 获取结构化数据
对于已知页面的结构化数据,请使用 formats: ["json"] 对每个 URL 调用一次 firecrawl_scrape。将提取提示和 JSON schema 放入 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"]
}
}
}
}
当 URL 未知或数据跨越多个站点时,请使用 firecrawl_agent 进行多源研究。
8. 智能体工具(firecrawl_agent)
自主网络研究智能体,当你不知道 URL 或答案跨越多个站点时返回结构化数据。描述你需要的字段,可选地传入 JSON schema 和种子 URL,智能体会搜索、导航、读取页面,并返回跨源汇总的 JSON。它适用于实体及其字段、列表和数据集,以及需要导航才能到达数据的页面。对于单个已知 URL,请改用 firecrawl_scrape 配合 JSON 格式。
工作原理:
智能体执行网络搜索、跟随链接、读取页面并自主收集数据。此过程异步运行——它会立即返回任务 ID,你通过轮询 firecrawl_agent_status 来检查何时完成并获取结果。
异步工作流:
- 使用你的提示/schema 调用
firecrawl_agent→ 返回任务 ID - 在智能体研究期间做其他工作(复杂查询可能需要几分钟)
- 使用任务 ID 轮询
firecrawl_agent_status以检查进度 - 当状态为“completed”时,响应包含提取的数据
最适合:
- 你不知道确切 URL 的复杂研究任务
- 多源数据收集
- 查找分散在网络上的信息
- 你可以在等待结果时做其他工作的任务
不推荐用于:
- 你知道 URL 的简单单页抓取(请使用带 JSON 格式的 scrape——更快且更便宜)
参数:
prompt:你想要的数据的自然语言描述(必需,最多 10,000 个字符)urls:可选的 URL 数组,用于让智能体聚焦于特定页面schema:可选的 JSON schema,用于结构化输出effort:可选。智能体任务的"low"、"medium"或"high"推理预算。maxCredits:可选的正整数。本次运行的积分消费上限。省略时 API 默认为 2,500,并将免费请求上限设为 2,500。strictConstrainToURLs:可选的布尔值。如果为true,智能体只访问urls中的 URL。threadId:可选。继续现有线程:来自先前firecrawl_agent或firecrawl_agent_status结果的threadId。省略则启动新线程。在后续调用中,省略的mode、urls、schema和exchange设置会沿用上一轮的值。mode:可选。"extract"(默认)每轮返回完整的结构化结果。"chat"允许不请求新数据的后续调用在message中获得简短回复,而不是重新运行;exchange.requireApproval需要它。exchange:可选。本轮 Alexandria 提供商设置,按原样转发到POST /v2/agent:enabled、toolkits(最多 5 个提供商 slug)、maxCalls(1 到 30)、requireApproval(付费调用以pendingApproval结束本轮;需要在同一次调用中设置mode: "chat",即使在后续调用中也是如此)onTermsRequired:当智能体将要使用的 Alexandria 提供商需要你的团队尚未接受的数据条款时该怎么做。受门控的提供商在任何模式下都不会被调用。在后续调用中省略会保留上一轮的值。"skip"(默认):仅使用已接受的提供商作答。状态结果上的exchange.skippedProviders会列出本可提供帮助的受门控提供商。"ask":同上,外加条款pendingApproval和exchange.requiresAction,包含批准 ID 和提供商要求。使用terms/show阅读条款;组织管理员在 Firecrawl 仪表板中接受它们。
approve:{ approvalId, callIds?, always? }对上一轮结束时所处的pendingApproval回答“是”。callIds和always仅适用于付费调用批准。decline:{ approvalId }回答“否”。拒绝条款提议会使这些提供商在该线程的剩余部分中被排除。approve和decline需要threadId,并且只能发送其中之一。
提供商条款(询问模式): 没有自动接受模式。当一轮以条款提议结束时,状态结果会带有 pendingApproval(kind: "terms")和 exchange.requiresAction,其中包含 approvalId 和提供商要求。该 API 负载中的任何 terms/accept 描述符都无法通过 MCP 使用。要使用该提供商:
- 向用户展示条款(
terms/show到firecrawl_scrape,配合alexandria)。 - 引导组织管理员在提供商的 URL 或数据源设置处接受条款。数据请求不等于同意。
- 等待管理员在仪表板中确认接受。
- 继续同一线程:使用相同的
threadId和exchange.approve: { "approvalId": "..." }调用firecrawl_agent。这会恢复研究,并不会接受条款。
如果用户说“否”,请改用相同的 threadId 和 exchange.decline: { "approvalId": "..." } 调用 firecrawl_agent。
提示示例:
“查找 Firecrawl 的创始人及其背景”
用法示例(启动智能体,然后轮询结果):
{
"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" }
}
}
}
}
}
}
}
然后使用返回的任务 ID 通过 firecrawl_agent_status 进行轮询。
用法示例(带 URL——智能体聚焦于特定页面):
{
"name": "firecrawl_agent",
"arguments": {
"urls": ["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
"prompt": "Compare the features and pricing information from these pages"
}
}
用法示例(同一线程上的后续调用):
{
"name": "firecrawl_agent",
"arguments": {
"prompt": "Only keep the startups based in Europe",
"threadId": "0199a1b2-0000-7000-8000-000000000031"
}
}
用法示例(在管理员确认仪表板接受后继续线程):
{
"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" } }
}
}
返回:
- 用于状态检查的任务 ID,以及
threadId和threadTurn。使用firecrawl_agent_status轮询结果。
9. 检查智能体状态(firecrawl_agent_status)
检查智能体任务的状态,并在完成时获取结果。在启动智能体后,使用此工具轮询结果。
轮询模式: 对于复杂查询,智能体研究可能需要几分钟。定期轮询此端点(例如每 10-30 秒一次),直到状态为“completed”或“failed”。
{
"name": "firecrawl_agent_status",
"arguments": {
"id": "550e8400-e29b-41d4-a716-446655440000"
}
}
可能的状态:
processing:智能体仍在研究——稍后再检查completed:研究完成——响应包含提取的数据failed:发生错误
10. 交互工具(firecrawl_interact)
与全新 URL 或已由 firecrawl_scrape 打开的页面进行交互。
最适合: 在不恢复已弃用浏览器工具的情况下,对动态页面进行点击、输入、导航和状态提取。
用法选项:
- 传入
url,在一次 MCP 调用中抓取并打开页面以进行交互。 - 传入
scrapeId,继续与现有已抓取页面交互。 - 要将浏览器状态(cookies、localStorage)保存到命名配置文件,请传入
url和scrapeOptions: { "profile": { "name": "my-profile", "saveChanges": true } }。当firecrawl_interact_stop结束会话时,状态会被保存。 - 请恰好传入
url或scrapeId之一,外加prompt或code之一。
用法示例:
{
"name": "firecrawl_interact",
"arguments": {
"url": "https://example.com",
"prompt": "Click the pricing link and summarize the visible plans"
}
}
返回: 交互结果,以及(对于 URL 模式)用于后续操作或清理的派生 scrapeId。
11. 停止交互工具(firecrawl_interact_stop)
当你完成交互后,停止已抓取页面的交互会话。
{
"name": "firecrawl_interact_stop",
"arguments": {
"scrapeId": "scrape-id-here"
}
}
12. 研究工具(firecrawl_research_*)
通过研究 MCP 工具搜索和检查论文与 GitHub 仓库。
涵盖范围: 生物医学、生命科学和临床文献(PubMed、bioRxiv、medRxiv)以及 arXiv 和其他科学来源的论文摘要和全文。
可用的研究工具:
firecrawl_research_search_papers:使用自然语言查询搜索论文元数据和摘要,可选按作者、类别和日期筛选。firecrawl_research_inspect_paper:检索单篇论文 ID(arXiv、PMC、PMID 或 DOI)的规范元数据。firecrawl_research_related_papers:通过引用图从一篇或多篇锚点论文向外扩展。firecrawl_research_read_paper:读取特定论文的全文段落。
最适合: 文献综述、论文查找和仓库发现工作流,其中智能体需要专注的研究界面,而不是通用网络搜索。
firecrawl_search 与 categories: ["research"] 是不同的界面:它将普通网络结果筛选为研究相关网站,并返回页面片段,而不是论文记录。当问题涉及文献本身时使用这些工具,并传入同一问题的多个不同表述,因为它们会呈现与单次查询不同的论文。
13. 监控工具(firecrawl_monitor_*)
创建和管理定期页面监控。监控按计划运行抓取或爬取,将每个结果与上次保留的快照进行差异比较,并可通过 webhook 或电子邮件通知。
最适合:
- 随时间观察一个或几个页面
- 使用通俗英语目标对有意义的变化发出警报
- 跟踪检查历史和页面级差异
推荐的创建模式:
使用 page 或 pages 加上 goal。MCP 服务器会以 30 分钟的计划构建监控请求,API 会自动启用有意义变化判断。
当设置了 goal 时,有意义变化判断会自动运行。页面 webhook 在 monitor.page 事件上暴露 isMeaningful 和 judgment。
将目标写成简洁的 2-3 句监控指令。说明什么应触发警报,保留用户给出的任何范围,并且仅在请求中明显时包含意图特定的排除项。空白、仅格式变化、请求 ID、跟踪参数、通用元数据和无关页面装饰等通用噪声已由判断器处理,因此不要在每条目标中重复。如果用户表述模糊,保持目标宽泛;如果他们要求广泛监控或“任何变化”,保留该意图。如果用户说他们不关心某些内容,请明确包含。
{
"name": "firecrawl_monitor_create",
"arguments": {
"page": "https://example.com/pricing",
"goal": "Alert when pricing, packaging, or launch messaging changes."
}
}
多个页面与 webhook:
{
"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"
}
}
高级创建请求:
当需要爬取目标、JSON 变化跟踪、自定义保留或显式 judgeEnabled 控制时,传入 body。
{
"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" }]
}
}
}
其他监控工具:
firecrawl_monitor_list:列出监控。firecrawl_monitor_get:获取单个监控。firecrawl_monitor_update:更新字段,包括goal、judgeEnabled、webhook和notification。firecrawl_monitor_run:立即触发检查。firecrawl_monitor_delete:删除监控(破坏性操作;仅在用户意图移除时调用)。firecrawl_monitor_checks:列出检查,可选按状态筛选。firecrawl_monitor_check:获取页面级结果,包括diff、snapshot、judgment.meaningful和judgment.meaningfulChanges。
14. 开发者搜索工具(firecrawl_developer_search)
搜索为编码智能体构建的索引。该索引涵盖 GitHub issue、已合并的 pull request、仓库 README 和代码文档。
最适合: 编程问题:代码行为、库或框架、API 契约、错误消息或已知 bug。
参数:
{
"name": "firecrawl_developer_search",
"arguments": {
"query": "how do I configure retries",
"k": 10,
"skills": "only"
}
}
query(必填):开发者问题或搜索短语。k:排序结果的数量。默认值为 10,最大值为 100。skills:设置为"only"以仅搜索智能体技能文件。
返回: 排序结果。每个结果包含 ID、来源类型(issue、pull_request、readme 或 doc)、URL、标题以及 markdown 格式的匹配段落。
firecrawl_search 与 categories: ["developer"] 会在网络结果旁搜索同一索引。当你需要匹配段落、skills 筛选器或响应中不包含网络结果时,改用此工具。仅搜索端点同时暴露这两个工具,同样的选择也适用于那里。
14b. 政府索引搜索工具(firecrawl_gov_search)
搜索来自美国联邦、州和地方政府来源的主要法律和监管材料:法规、规章、法典、法院意见和其他政府出版物。
最适合: 需要适用文本或官方政府来源的法律或监管问题。
参数:
{
"name": "firecrawl_gov_search",
"arguments": {
"query": "excessive force claims against police officers",
"k": 10,
"courtType": "federal-appellate",
"cites": "42 U.S.C. § 1983"
}
}
query(必填):法律或监管问题或搜索短语。k:排序结果的数量。默认值为 10,最大值为 100。jurisdiction:仅保留一个司法管辖区的页面:"us"表示联邦,或"us-"加上两位州或领地代码,例如"us-ca"或"us-dc"。court:仅保留标记为某一法院的页面,按 CourtListener 法院 ID,例如"scotus"、"ca9"或"nysd"。courtType:仅保留来自某一类型法院的页面:federal-supreme、federal-appellate、federal-district、federal-bankruptcy、federal-special、military、state-supreme、state-appellate、state-trial、state-special或state-attorney-general。cites:仅保留引用某一法律或案例的页面,可以是印刷引用格式,例如"42 U.S.C. § 1983"或"5 U.S. 137",或引用 ID,例如"us:usc:42:1983"。domain:仅保留来自某一站点的页面,例如"irs.gov"。
筛选器是可选的并且可以组合:结果必须匹配每个已设置的筛选器。筛选器仅保留索引已标记的页面,因此筛选搜索可能遗漏相关页面,无结果并不意味着不存在。法院标签对联邦法院和判例法集合最为完整。
返回: 排序结果。每个结果包含位置、标题、URL 和匹配片段。仅搜索端点也暴露此工具。
firecrawl_search 与 categories: ["gov"] 搜索相同来源,并在 data.web 中返回命中结果,附带 category: "gov"。gov 类别不接受这些筛选器,也不能与其他类别组合。
15. Alexandria 工具
Firecrawl Alexandria 是一个数据提供方目录,可通过 Firecrawl API 使用 Firecrawl API 密钥在具有 Alexandria 访问权限的团队中访问。无密钥会话(托管或本地)会获得 Alexandria requires an API key on a team with Alexandria access;Alexandria 发现工具不会为托管无密钥会话列出。
语义发现(firecrawl_search):
{
"name": "firecrawl_search",
"arguments": {
"query": "podcast conversations about AI agents",
"sources": ["web", "alexandria"],
"domainTools": true,
"limit": 2
}
}
data.tools 默认返回包含提供方、能力和描述的紧凑建议。设置 toolDetail: "summary" 以获取元数据和导航,或设置 toolDetail: "full" 以获取包括输入、响应字段和示例的契约。domainTools: true 会在同一数组中为查询提及和结果 URL 添加上下文匹配。检查 warning 以了解不可用的发现功能。搜索需要查询,不接受目录遍历筛选器。此发现功能在完整和仅搜索 MCP 界面上均可用。
渐进式披露(firecrawl_find_tools):
{
"name": "firecrawl_find_tools",
"arguments": {
"providers": ["particle"],
"capabilities": ["podcasts/episodes/search"],
"expand": ["options", "response", "examples"],
"limit": 2
}
}
从无参数开始获取类别,然后逐步缩小目录范围:
| 参数 | 结果 |
|---|---|
{} | 类别和简短描述 |
{"categories":["podcasts"]} | 该类别中的提供方 |
{"categories":["podcasts"],"providers":["particle"]} | 紧凑的工具名称和描述 |
{"providers":["particle"],"capabilities":["podcasts/episodes/search"]} | 完整的选定输入、约束、响应和示例 |
无需分组跳转。显式 level 支持 categories、providers、groups 或 tools;显式 expand 选择契约部分。expand: [] 即使选择能力时也保持结果紧凑。对于广泛完整契约,请显式请求 level: "tools" 和 expand: ["options", "response", "examples"]。URL 提供上下文发现而无需获取页面。除非设置了 includeCosts: true,工具结果会省略每项能力的信用价格;后续的 nextTool 参数会保留它。
结果位于 data.alexandria[0].data 中。通过调用条目的 name 并传入其 arguments 来跟随其 nextTool;页面的 nextTool 推进分页。现有的 next 对象仍可作为 Alexandria 发现调用,通过 firecrawl_scrape 使用。发现不消耗信用,且从不执行提供方工具。执行前请阅读选定的完整契约。
这些控制项需要匹配的 Alexandria API 部署。
执行(firecrawl_scrape 与 alexandria): 传入 alexandria 而不是 url(两者中恰好一个;也可以提供 requestId 和 timeout)。接受单次调用或最多十次调用的数组。
{
"name": "firecrawl_scrape",
"arguments": {
"alexandria": [
{
"provider": "fred",
"capability": "series/observations",
"options": { "series_id": "CPIAUCSL" }
}
]
}
}
返回: { success, scrape_id, requestId, data: { alexandria: [...], creditsCost } }。每个条目要么是结果(provider、capability、data、records、upstreamStatus),要么是带有 code 的 error;批次不会因提供方错误而整体失败,data.creditsCost 是请求的总计费用。Alexandria 错误响应体(无 Alexandria 访问权限时的 403,以及 402/409 计费状态)会连同其 code 在带内转发。
执行会生成一个 x-request-id,并在成功或失败时返回它。使用该 requestId 重试完全相同的负载;不要在结果不确定后创建新 ID。API 会检查可用信用。
如果团队尚未接受某 Alexandria 提供方的条款,则会在任何内容运行前失败,返回 HTTP 403 和以下响应体:
{
"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"
}
}
工具结果会将其作为错误转发,structuredContent 携带 code、status: 403、requestId、未更改的 requiresAction 对象,以及 next_actions(先是 human_action_required,然后是 retry_same_request)。接受条款是法律行为,因此组织管理员需在 Firecrawl 仪表板中接受,而不是通过 MCP。使用返回的 nextTool 调用,通过 firecrawl_scrape 和 alexandria: [{provider: "firecrawl", capability: "terms/show", options: {provider: "<provider>"}}] 阅读协议,与提供方执行分开发送,并将其呈现给用户。然后组织管理员在 requiresAction.url 或 https://www.firecrawl.dev/app/settings?tab=data-sources. 处接受。firecrawl_scrape 会拒绝所有其他 terms/* 能力,因此不会进行任何账户更改。请求数据不构成同意,也不会发生自动接受或不确定重试。被阻止的检索不收取信用。管理员确认接受后,使用完全相同的负载和 requestId 再次调用同一工具。
16. 信用使用工具
该工具需要经过身份验证的 Firecrawl 账户,并且是只读的。
firecrawl_credit_usage默认使用{ "view": "current" },并返回remainingCredits、planCredits、billingPeriodStart和billingPeriodEnd。当团队有充值或赠额时,剩余额度可能超过套餐额度。- 对于包含
startDate、endDate和creditsUsed的日历月周期,传入{ "view": "historical" }。传入{ "byApiKey": true }还会选择历史视图,并按 API key 拆分周期;此时每一行都包含apiKey。改为传入{ "byEndpoint": true }则按使用额度的端点(scrape、search、crawl、map、agent 等)拆分周期;此时每一行都包含endpoint。传入{ "bin": "day" }可按 UTC 日而非日历月划分周期。不要将byApiKey与byEndpoint组合使用,也不要将其中任何一个与{ "view": "current" }组合使用。最新周期的endDate可能为 null。如果 Firecrawl API 尚未提供端点拆分或按日周期,结果会带有notice和月度数据。
编程式使用(不稳定)
该包还暴露了一个库入口点,用于将服务器嵌入另一个运行时。它是不稳定的:API、其选项及其类型可能在任何版本中发生变化,包括次要版本和补丁版本,因此请固定使用确切的版本。
npm install --save-exact firecrawl-mcp zod
该示例使用 zod 定义工具参数,因此嵌入项目需将其作为自身依赖安装。
import { createFirecrawlMcpServer } from 'firecrawl-mcp/server';
import { z } from 'zod';
const server = createFirecrawlMcpServer({
transport: 'httpStream',
apiKey: process.env.FIRECRAWL_API_KEY,
unstable_hooks: {
registerExtraTools: (registrar) => {
registrar.addTool({
name: 'my_tool',
description: 'An extra tool served next to the Firecrawl tools.',
parameters: z.object({ text: z.string() }),
execute: async ({ text }) => text,
});
},
},
});
await server.start({
transportType: 'httpStream',
httpStream: { port: 3000, host: '127.0.0.1', endpoint: '/mcp', stateless: true },
});
// MCP endpoint: http://127.0.0.1:3000/mcp
显式设置 host。若不设置,服务器会监听 localhost,而 Node 将其绑定到单个地址(通常仅为 ::1),因此对 127.0.0.1 的请求会被拒绝。仅在网络访问控制或 unstable_hooks.authenticate 检查之后,才使用 0.0.0.0 或 :: 接受来自其他机器的连接:否则,每个能访问该端口的调用方都会以配置的 apiKey 被服务。
除非被要求,该库不会检查 Host 或 Origin,并且其 CORS 头允许任何来源。同一台机器上可从浏览器访问的服务器应传入 httpStream.allowedHosts(例如 ['localhost', '127.0.0.1', '[::1]']):此时,若请求的 Host 或 Origin 头指定了其他主机,则会得到 403(健康路径上的 GET 和 HEAD 除外),并且 CORS 头会回显允许的来源。命令行在本地 HTTP 模式下会设置此列表。
选项与 CLI 的环境变量相对应:apiUrl、apiKey、transport、logging、safeMode、fileAccess(local 或 upload)、requireCredential、searchFeedback 和 endpointFeedback。unstable_hooks 接受:
| 钩子 | 用途 |
|---|---|
authenticate(request) | 为请求解析会话;抛出 Response 以拒绝该请求。 |
wrapTool(tool) | 装饰每个已注册的工具。 |
onToolResult(event) | 观察每次工具调用的开始和结果。 |
instructions | 服务器指令,或从默认值中选择的函数。 |
registerExtraTools(registrar, context) | 在内置工具之后添加工具。 |
outboundRequest(session) | 每次 Firecrawl API 请求的凭据和额外头。 |
beforeKeylessRequest(session, origin) | 通过抛出异常来拒绝无密钥请求。 |
toolFilter(name) | 将内置工具排除在实例之外。 |
configureHttp(app) | 添加 HTTP 路由。 |
oauth.protectedResource | 提供 OAuth 受保护资源元数据。 |
该服务器基于官方 MCP TypeScript SDK(@modelcontextprotocol/server)构建。请使用从 firecrawl-mcp/server 导出的类型(Session、ToolDefinition、ToolRegistrar、FirecrawlMcpServerHooks 等),而不是 SDK 自带的类型。
该入口点还导出了内置工具使用的辅助函数,例如 recoveryPayload、normalizeHeader、requestOrigin、isRuntimeUserAgent、initializeClientSlug、searchToolBaseFields、searchOutputSchema 和 structuredCompact,以便额外的工具和钩子能够匹配内置行为。它们同样不稳定。
日志系统
该服务器包含全面的日志记录:
- 操作状态和进度
- 性能指标
- 速率限制跟踪
- 错误情况
示例日志消息:
[INFO] Firecrawl MCP Server initialized successfully
[INFO] Starting scrape for URL: https://example.com
[ERROR] Rate limit exceeded
错误处理
该服务器提供健壮的错误处理:
- 向 MCP 客户端呈现 API 速率限制错误
- 详细的错误消息
- 网络弹性
示例错误响应:
{
"content": [
{
"type": "text",
"text": "Error: Rate limit exceeded"
}
],
"isError": true
}
开发
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
贡献
- Fork 该仓库
- 创建你的功能分支
- 运行测试:
npm test - 提交拉取请求
感谢贡献者
感谢 @vrknetha、@cawstudios 的初始实现!
感谢 MCP.so 和 Klavis AI 的托管,以及 @gstarwd、@xiangkaiz 和 @zihaolin96 对我们服务器的集成。
许可证
MIT 许可证 - 详情请参阅 LICENSE 文件
结构化数据与大型结果
经过身份验证的搜索默认使用网页结果、语义 Alexandria 工具和域名匹配。从实际问题开始。使用 firecrawl_find_tools 进行直接的语义工具查找、选定合约或渐进式浏览:类别 → 提供方 → 紧凑工具 → 选定合约。通过 firecrawl_scrape 执行工具;普通的 URL 抓取和搜索绝不会自动执行提供方工具。
对于选定的合约,优先使用 expand: ["options", "response"],并且仅在输入结构不明确时才请求示例。一起检查相关能力,并复用返回的合约。
对于可能很大的工作流结果,在执行前提供并保留一个顶层 requestId。即使客户端拒绝该响应,该 ID 仍然可用。常规 URL 抓取则使用返回的抓取 ID。
对于大型保留的工作流或常规抓取结果,使用以下参数调用 firecrawl_scrape:
{
"alexandria": {
"provider": "firecrawl",
"capability": "bash",
"options": {
"requestId": "<source-request-or-scrape-id>",
"command": "ls -lh"
}
}
}
在 data.alexandria[0].data 中读取 stdout、stderr、exitCode 和 workspaceId。继续使用 options: {workspaceId, command},通过 jq 检查 response.json,或对于常规抓取,使用有界文本命令通过 document.md 检查。保持输出有选择性。源加载必须是独立调用;其嵌套源 ID 与顶层执行请求 ID 不同。工作区在空闲五分钟后过期,并且并非每个结果都会被保留(包括 ZDR 和 API 提供方工作流负载)。不支持搜索 ID。
对于工作流源,response.json 会保留 API 信封:选择 .data.alexandria[].data,然后当选定合约的 response.key 非空时选择它。当结构已知时,在一条 Bash 命令中合并相关计数和投影,而不是反复检查键。
超过 20,000 个估计 token(序列化 UTF-8 字节数除以四)的成功 Alexandria 执行响应,会在远程 Bash 确认完整批次可访问后返回一个小型交接。按照 nextTool 检查保留的数据。这会增加一次 Bash 调用,并启动一个空闲 TTL 为五分钟的工作区。完整负载会被保留。如果确认失败,原始响应保持内联。搜索、常规 URL 抓取、错误响应和 Firecrawl 实用工具调用保持不变。此交付预算不衡量客户端剩余的上下文;不会添加进程本地结果缓存。当本地文件系统工具可用时,保存 CLI 输出并读取选定部分是另一种选择。
CLI 发现序列映射到以下 MCP 调用:
| 意图 | 工具 | 参数 |
|---|---|---|
| 网页 + 语义 + 域名工具 | firecrawl_search | {"query":"<user question>"} |
| 仅语义工具 | firecrawl_search | {"query":"<user question>","sources":["alexandria"]} |
| 类别 | firecrawl_find_tools | {} |
| 类别中的提供方 | firecrawl_find_tools | {"categories":["<category-id>"]} |
| 紧凑提供方工具 | firecrawl_find_tools | {"providers":["<provider-id>"]} |
| 选定合约 | firecrawl_find_tools | {"providers":["<provider-id>"],"capabilities":["<capability-id>"]} |
| 执行 | firecrawl_scrape | {"alexandria":{"provider":"<provider-id>","capability":"<capability-id>","options":{"<required-field>":"<value>"}}} |
查找工具和执行在完整界面和搜索界面上均可用。当搜索中存在完整合约时,复用它,而不是再进行一次发现调用。仅在需要更多结果时,才按照返回的 nextTool 导航。
Alexandria 会话反馈
现有的 firecrawl_feedback 工具接受 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"
}
可选的 objective 是会话的底层目标:即 agent 或其用户最终试图完成的事情,而不仅仅是 requestedWebsite 中的单个网站。
这使用经过身份验证的 POST /v2/feedback,无需作业 ID。它必须在团队最近一次 Alexandria 搜索、发现或执行后的 20 分钟内到达;更晚的反馈会以 FEEDBACK_WINDOW_EXPIRED 被拒绝。符合条件的反馈可退还 1 个额度,但受每日上限限制:每个网站 10 个额度,每个团队 100 个额度(UTC 日)。超过任一上限后,反馈仍会被记录,但不会退款,并且响应会设置 websiteCapReached 或 dailyCapReached。可选的 providerFeedback 和 capabilityFeedback 数组描述覆盖缺口和执行问题;工具 schema 列出了支持的问题值。new_capability_request 需要 requestedFunctionality;missing_capability(提供方存在但缺少该能力)则不需要。现有的反馈退出和身份验证控制仍然适用。
符合条件的 Alexandria 执行和发现结果包含一个 feedbackTool 指针,其中带有工具名称和参数骨架。对于 Firecrawl 内部调用(例如 bash)以及当 firecrawl_feedback 未注册时(FIRECRAWL_NO_ENDPOINT_FEEDBACK 或无密钥启动),该指针会被省略。