mcpField
F
firecrawl

firecrawl

本地服务
firecrawl.dev浏览器自动化196.1k今天更新

关于 firecrawl

Firecrawl 是面向开发者和 AI Agent 的网页数据 API,提供搜索、抓取、页面交互、站点爬取和文档解析,并可输出 Markdown、结构化 JSON 或截图。

主要功能

  1. 01搜索网页并获取页面内容
  2. 02将 URL 抓取为 Markdown、JSON 或截图
  3. 03通过操作或提示词与页面交互
  4. 04爬取网站并发现其 URL
  5. 05解析 PDF 和 DOCX 等文档
  6. 06批量抓取 URL 并监测内容变化

适用场景

  1. 01收集网页搜索结果中的页面内容
  2. 02从网站或文档提取结构化数据
  3. 03提取前导航并操作网页
  4. 04收集站点页面或检查内容变化

MCP 相关

Firecrawl 可通过 firecrawl-mcp 服务连接兼容 MCP 的客户端,为客户端提供网页搜索、抓取和页面交互能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"firecrawl-firecrawl": {
"command": "npx",
"args": [
"-y",
"firecrawl-cli"
]
}
}
}
启动命令npx -y firecrawl-cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmfirecrawl-cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

README 配图

🔥 Firecrawl

用于大规模搜索、抓取和交互网页的 API。Firecrawl 是面向 AI Agent 的上下文 API。🔥 开源,并提供托管服务。

悄悄说:嘿,说的就是你,来加入我们的星标用户吧 :)

GitHub 星标数

为什么选择 Firecrawl?

  • 业界领先的可靠性:覆盖 96% 的网页,包括 JavaScript 内容繁多的页面——无需为代理烦恼,只获取干净的数据(查看基准测试)
  • 速度极快:数百万个页面的 P95 延迟为 3.4 秒,专为实时 Agent 和动态应用打造
  • 适用于大模型的输出:提供干净的 Markdown、结构化 JSON、截图等——减少 token 消耗,打造更出色的 AI 应用
  • 棘手问题交给我们:轮换代理、编排、速率限制、受 JavaScript 阻止的内容等,均无需配置
  • 适用于 Agent:只需一条命令,即可将 Firecrawl 连接到任意 AI Agent 或 MCP 客户端
  • 文档解析:将 PDF、DOCX 和其他文档转换为干净的 Markdown 或结构化 JSON
  • 操作:提取内容前,可点击、滚动、输入、等待和按键
  • 开源:以透明、协作的方式开发——加入我们的社区

功能概览

核心端点

功能说明
搜索搜索网页并获取搜索结果中的完整页面内容
抓取将任意 URL 转换为 Markdown、HTML、截图或结构化 JSON
交互抓取页面,然后使用 AI 提示词或代码与页面交互

更多功能

功能说明
解析将 PDF、DOCX 和其他文档转换为干净的 Markdown 或结构化 JSON
Agent自动收集数据,只需描述你的需求
爬取通过一次请求抓取网站上的所有 URL
映射即时发现网站上的所有 URL
批量抓取异步抓取数千个 URL
监控网站内容发生变化时收到通知

快速开始

在 firecrawl.dev 注册以获取 API 密钥。前往 playground 试用。

搜索

搜索网络并获取搜索结果的完整内容。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

search_result = app.search("firecrawl", limit=5)
Node.js / cURL / CLI

Node.js

import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});

app.search("firecrawl", { limit: 5 })

cURL

curl -X POST 'https://api.firecrawl.dev/v2/search' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
  "query": "firecrawl",
  "limit": 5
}'

CLI

firecrawl search "firecrawl" --limit 5

输出:

[
  {
    "url": "https://firecrawl.dev",
    "title": "Firecrawl",
    "markdown": "Turn websites into..."
  },
  {
    "url": "https://docs.firecrawl.dev",
    "title": "Firecrawl Docs",
    "markdown": "# Getting Started..."
  }
]
抓取

从任意网站获取适用于大模型的上下文——Markdown、JSON、屏幕截图等。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.scrape('firecrawl.dev')
Node.js / cURL / CLI

Node.js

import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({ apiKey: "fc-YOUR_API_KEY" });

app.scrape('firecrawl.dev')

cURL

curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
  "url": "firecrawl.dev"
}'

CLI

firecrawl scrape https://firecrawl.dev
firecrawl https://firecrawl.dev --only-main-content

输出:

# Firecrawl

Firecrawl helps AI agents search, scrape, and interact with the web.

## Features
- Search: Find information across the web
- Scrape: Clean data from any page
- Interact: Click, navigate, and operate pages
- Agent: Autonomous data gathering
交互

抓取页面,然后使用 AI 提示词或代码与其交互。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.scrape("https://amazon.com")
scrape_id = result.metadata.scrape_id

app.interact(scrape_id, prompt="Search for 'mechanical keyboard'")
app.interact(scrape_id, prompt="Click the first result")
Node.js / cURL / CLI

Node.js

import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});

const result = await app.scrape("https://amazon.com");

await app.interact(result.metadata.scrapeId, {
  prompt: "Search for 'mechanical keyboard'"
});
await app.interact(result.metadata.scrapeId, {
  prompt: "Click the first result"
});

cURL

# 1. Scrape the page
curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url": "https://amazon.com"}'

# 2. Interact with the page (use scrapeId from step 1)
curl -X POST 'https://api.firecrawl.dev/v2/scrape/SCRAPE_ID/interact' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"prompt": "Search for mechanical keyboard"}'

CLI

firecrawl scrape https://amazon.com
firecrawl interact exec --prompt "Search for 'mechanical keyboard'"
firecrawl interact exec --prompt "Click the first result"

输出:

{
  "success": true,
  "output": "Keyboard available at $100",
  "liveViewUrl": "https://liveview.firecrawl.dev/..."
}

为 Agent 提供动力

只需几分钟,即可将 Firecrawl 连接到任意 AI Agent 或 MCP 客户端。

Skill

只需一条命令,即可让 Agent 轻松获取实时网络数据。

npx -y firecrawl-cli@latest init --all --browser

安装后重启 Agent。支持 Claude Code、Antigravity、OpenCode 等。

MCP

只需几秒,即可将任意兼容 MCP 的客户端连接到网络。

{
  "mcpServers": {
    "firecrawl-mcp": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY"
      }
    }
  }
}
Agent 入门指南

你是 AI Agent 吗?获取此 Skill,为用户注册、获取 API 密钥,并开始使用 Firecrawl 构建。

curl -s https://firecrawl.dev/agent-onboarding/SKILL.md

所有可用命令请参阅 Skill + CLI 文档。MCP 相关内容请参阅 firecrawl-mcp-server。


更多端点

Agent

从网络获取数据的最简单方式。 描述你需要的内容,我们的 AI Agent 会搜索、浏览并获取数据。无需提供 URL。

Agent 是我们 /extract 端点的升级版:速度更快、更可靠,而且无需事先知道 URL。

curl -X POST 'https://api.firecrawl.dev/v2/agent' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "Find the pricing plans for Notion"
  }'

响应:

{
  "success": true,
  "data": {
    "result": "Notion offers the following pricing plans:\n\n1. Free - $0/month...\n2. Plus - $10/seat/month...\n3. Business - $18/seat/month...",
    "sources": ["https://www.notion.so/pricing"]
  }
}
使用结构化输出的 Agent

使用架构获取结构化数据:

from firecrawl import Firecrawl
from pydantic import BaseModel, Field
from typing import List, Optional

app = Firecrawl(api_key="fc-YOUR_API_KEY")

class Founder(BaseModel):
    name: str = Field(description="Full name of the founder")
    role: Optional[str] = Field(None, description="Role or position")

class FoundersSchema(BaseModel):
    founders: List[Founder] = Field(description="List of founders")

result = app.agent(
    prompt="Find the founders of Firecrawl",
    schema=FoundersSchema
)

print(result.data)
{
  "founders": [
    {"name": "Eric Ciarla", "role": "Co-founder"},
    {"name": "Nicolas Camara", "role": "Co-founder"},
    {"name": "Caleb Peffer", "role": "Co-founder"}
  ]
}
指定 URL 的 Agent(可选)

让 Agent 专注于特定页面:

result = app.agent(
    urls=["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
    prompt="Compare the features and pricing information"
)
选择工作量

设置 Agent 在任务上投入的推理量:

工作量适用场景
low在一个网站上进行简单查询
medium在少数几个页面上执行多步骤任务
high深度研究、复杂浏览、关键数据
result = app.agent(
    prompt="Compare enterprise features across Firecrawl, Apify, and ScrapingBee",
    effort="high"
)

每个工作量级别都使用 spark-2 模型。工作量调整的是推理 预算,而不是模型。

模型

每次 Agent 运行默认都使用 spark-2,因此无需设置 model。为保持向后兼容,已停用的 spark-1-pro 和 spark-1-mini 名称仍可使用, 但它们已弃用,实际运行时会使用 spark-2。

在我们的 Agent 文档中了解有关 Spark 模型的更多信息。

抓取

抓取整个网站并获取所有页面的内容。

curl -X POST 'https://api.firecrawl.dev/v2/crawl' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://docs.firecrawl.dev",
    "limit": 100,
    "scrapeOptions": {
      "formats": ["markdown"]
    }
  }'

返回一个任务 ID:

{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
检查抓取状态
curl -X GET 'https://api.firecrawl.dev/v2/crawl/123-456-789' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY'
{
  "status": "completed",
  "total": 50,
  "completed": 50,
  "creditsUsed": 50,
  "data": [
    {
      "markdown": "# Page Title\n\nContent...",
      "metadata": {"title": "Page Title", "sourceURL": "https://..."}
    }
  ]
}

注意: SDK 会自动处理轮询,以提供更好的开发体验。

映射

立即发现网站上的所有 URL。

curl -X POST 'https://api.firecrawl.dev/v2/map' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://firecrawl.dev"}'

响应:

{
  "success": true,
  "links": [
    {"url": "https://firecrawl.dev", "title": "Firecrawl", "description": "The context API for AI agents"},
    {"url": "https://firecrawl.dev/pricing", "title": "Pricing", "description": "Firecrawl pricing plans"},
    {"url": "https://firecrawl.dev/blog", "title": "Blog", "description": "Firecrawl blog"}
  ]
}
使用搜索的映射

在网站中查找特定 URL:

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.map("https://firecrawl.dev", search="pricing")
# Returns URLs ordered by relevance to "pricing"
批量抓取

一次抓取多个 URL:

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

job = app.batch_scrape([
    "https://firecrawl.dev",
    "https://docs.firecrawl.dev",
    "https://firecrawl.dev/pricing"
], formats=["markdown"])

for doc in job.data:
    print(doc.metadata.source_url)

SDK

我们的 SDK 提供了便捷的方式来使用 Firecrawl 的所有功能,并会自动处理异步操作的轮询。

Python

安装 SDK:

pip install firecrawl
from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

# Scrape a single URL
doc = app.scrape("https://firecrawl.dev", formats=["markdown"])
print(doc.markdown)

# Use the Agent for autonomous data gathering
result = app.agent(prompt="Find the founders of Stripe")
print(result.data)

# Crawl a website (automatically waits for completion)
docs = app.crawl("https://docs.firecrawl.dev", limit=50)
for doc in docs.data:
    print(doc.metadata.source_url, doc.markdown[:100])

# Search the web
results = app.search("best AI data tools 2024", limit=10)
print(results)
Node.js

安装 SDK:

npm install firecrawl
import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });

// Scrape a single URL
const doc = await app.scrape('https://firecrawl.dev', { formats: ['markdown'] });
console.log(doc.markdown);

// Use the Agent for autonomous data gathering
const result = await app.agent({ prompt: 'Find the founders of Stripe' });
console.log(result.data);

// Crawl a website (automatically waits for completion)
const docs = await app.crawl('https://docs.firecrawl.dev', { limit: 50 });
docs.data.forEach(doc => {
    console.log(doc.metadata.sourceURL, doc.markdown.substring(0, 100));
});

// Search the web
const results = await app.search('best AI data tools 2024', { limit: 10 });
results.data.web.forEach(result => {
    console.log(`${result.title}: ${result.url}`);
});
Go

安装 SDK:

go get github.com/firecrawl/firecrawl/apps/go-sdk
package main

import (
	"context"
	"fmt"
	"log"

	firecrawl "github.com/firecrawl/firecrawl/apps/go-sdk"
	"github.com/firecrawl/firecrawl/apps/go-sdk/option"
)

func main() {
	// Create a client (reads FIRECRAWL_API_KEY from environment)
	client, err := firecrawl.NewClient(option.WithAPIKey("fc-YOUR_API_KEY"))
	if err != nil {
		log.Fatal(err)
	}

	ctx := context.Background()

	// Scrape a single URL
	doc, err := client.Scrape(ctx, "https://firecrawl.dev", &firecrawl.ScrapeOptions{
		Formats: []string{"markdown"},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(doc.Markdown)

	// Use the Agent for autonomous data gathering
	agent, err := client.Agent(ctx, &firecrawl.AgentOptions{
		Prompt: "Find the founders of Stripe",
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(agent.Data)

	// Crawl a website (automatically waits for completion)
	job, err := client.Crawl(ctx, "https://docs.firecrawl.dev", &firecrawl.CrawlOptions{
		Limit: firecrawl.Int(50),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Crawled %d pages\n", len(job.Data))

	// Search the web
	results, err := client.Search(ctx, "best AI data tools 2024", &firecrawl.SearchOptions{
		Limit: firecrawl.Int(10),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(results)
}
Java

添加依赖(Gradle/Maven):

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.firecrawl:firecrawl-java-sdk:2.0'
}
import dev.firecrawl.client.FirecrawlClient;
import dev.firecrawl.model.*;

FirecrawlClient client = new FirecrawlClient(
    System.getenv("FIRECRAWL_API_KEY"), null, null
);

// Scrape a single URL
ScrapeParams scrapeParams = new ScrapeParams();
scrapeParams.setFormats(new String[]{"markdown"});
FirecrawlDocument doc = client.scrapeURL("https://firecrawl.dev", scrapeParams);
System.out.println(doc.getMarkdown());

// Use the Agent for autonomous data gathering
AgentParams agentParams = new AgentParams("Find the founders of Stripe");
AgentResponse start = client.createAgent(agentParams);
AgentStatusResponse result = client.getAgentStatus(start.getId());
System.out.println(result.getData());

// Crawl a website (polls until completion)
CrawlParams crawlParams = new CrawlParams();
crawlParams.setLimit(50);
CrawlStatusResponse job = client.crawlURL("https://docs.firecrawl.dev", crawlParams, null, 10);
for (FirecrawlDocument page : job.getData()) {
    System.out.println(page.getMetadata().get("sourceURL"));
}

// Search the web
SearchParams searchParams = new SearchParams("best AI data tools 2024");
searchParams.setLimit(10);
SearchResponse results = client.search(searchParams);
for (SearchResult r : results.getResults()) {
    System.out.println(r.getTitle() + ": " + r.getUrl());
}
Elixir

添加依赖:

def deps do
  [
    {:firecrawl, "~> 1.0"}
  ]
end
# Scrape a URL
{:ok, response} = Firecrawl.scrape_and_extract_from_url(
  url: "https://firecrawl.dev",
  formats: ["markdown"]
)

# Crawl a website
{:ok, response} = Firecrawl.crawl_urls(
  url: "https://docs.firecrawl.dev",
  limit: 50
)

# Search the web
{:ok, response} = Firecrawl.search_and_scrape(
  query: "best AI data tools 2024",
  limit: 10
)

# Map URLs
{:ok, response} = Firecrawl.map_urls(url: "https://example.com")
Rust

添加依赖:

[dependencies]
firecrawl = "2"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
use firecrawl::{Client, ScrapeOptions, Format, CrawlOptions};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new("fc-YOUR_API_KEY")?;

    // Scrape a URL
    let document = client.scrape("https://firecrawl.dev", None).await?;
    println!("{:?}", document.markdown);

    // Crawl a website
    let options = CrawlOptions {
        limit: Some(50),
        ..Default::default()
    };
    let result = client.crawl("https://docs.firecrawl.dev", options).await?;
    println!("Crawled {} pages", result.data.len());

    // Search the web
    let response = client.search("best web scraping tools 2024", None).await?;
    println!("{:?}", response.data);

    Ok(())
}
Ruby

安装 SDK:

gem install firecrawl-sdk
require "firecrawl"

client = Firecrawl::Client.new(api_key: "fc-YOUR_API_KEY")

# Scrape a single URL
doc = client.scrape("https://firecrawl.dev",
  Firecrawl::Models::ScrapeOptions.new(formats: ["markdown"]))
puts doc.markdown

# Use the Agent for autonomous data gathering
result = client.agent(
  Firecrawl::Models::AgentOptions.new(prompt: "Find the founders of Stripe"))
puts result.data

# Crawl a website (automatically waits for completion)
job = client.crawl("https://docs.firecrawl.dev",
  Firecrawl::Models::CrawlOptions.new(limit: 50))
job.data.each { |d| puts d.metadata.source_url }

# Search the web
results = client.search("best AI data tools 2024",
  Firecrawl::Models::SearchOptions.new(limit: 10))
puts results
.NET

安装 SDK:

dotnet add package firecrawl-sdk
using Firecrawl;
using Firecrawl.Models;

var client = new FirecrawlClient("fc-YOUR_API_KEY");

// Scrape a single URL
var doc = await client.ScrapeAsync("https://firecrawl.dev",
    new ScrapeOptions { Formats = new List<object> { "markdown" } });
Console.WriteLine(doc.Markdown);

// Crawl a website (automatically waits for completion)
var job = await client.CrawlAsync("https://docs.firecrawl.dev",
    new CrawlOptions { Limit = 50 });
Console.WriteLine($"Crawled {job.Data.Count} pages");

// Search the web
var results = await client.SearchAsync("best AI data tools 2024",
    new SearchOptions { Limit = 10 });
Console.WriteLine(results);
PHP

安装 SDK:

composer require firecrawl/firecrawl-sdk
<?php

use Firecrawl\Client\FirecrawlClient;
use Firecrawl\Models\ScrapeOptions;
use Firecrawl\Models\CrawlOptions;
use Firecrawl\Models\SearchOptions;

$client = FirecrawlClient::create(apiKey: 'fc-YOUR_API_KEY');

// Scrape a single URL
$doc = $client->scrape('https://firecrawl.dev', ScrapeOptions::with(
    formats: ['markdown'],
));
echo $doc->getMarkdown();

// Crawl a website (automatically waits for completion)
$job = $client->crawl('https://docs.firecrawl.dev', CrawlOptions::with(limit: 50));
foreach ($job->getData() as $page) {
    echo $page->getMetadata()['sourceURL'] . "\n";
}

// Search the web
$results = $client->search('best AI data tools 2024', SearchOptions::with(limit: 10));
print_r($results);

集成

Agent 和 AI 工具

构建技能(将 Firecrawl 集成到产品代码中)在本仓库的 skills/ 下编写,并通过 CI 同步到目录。想要贡献技能?CLI 技能(包括 research/developer 索引技能)→ 向 firecrawl/cli 提交 PR。构建/SDK 技能 → 向本仓库(skills/)提交 PR。工作流技能 → 向 firecrawl/firecrawl-workflows 提交 PR。目录(firecrawl/skills)为只读 — 请勿直接向其提交 PR。

平台

查看所有集成 →

没找到你喜欢的工具? 提交 issue 告诉我们!


资源


开源版与云端版

Firecrawl 基于 AGPL-3.0 许可证开源。firecrawl.dev 上的云端版本包含更多功能:

开源版与云端版

如需在本地运行,请参阅贡献指南。如需自托管,请参阅自托管指南。


贡献

我们欢迎贡献!提交拉取请求前,请阅读我们的贡献指南。

贡献者
贡献者

许可证

本项目主要基于 GNU Affero 通用公共许可证 v3.0(AGPL-3.0)授权。SDK 和部分 UI 组件基于 MIT 许可证授权。详情请参阅各目录中的 LICENSE 文件。


最终用户有责任在抓取网站时遵守网站政策。 建议用户遵守适用的隐私政策和使用条款。默认情况下,Firecrawl 会遵守 robots.txt 指令。使用 Firecrawl 即表示你同意遵守这些条件。

↑ 返回顶部 ↑

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。