Firecrawl MCP Server

官方

为Cursor和Claude等LLM客户端添加强大的网页抓取和搜索功能。

文档

Firecrawl MCP 服务器

一个模型上下文协议 (MCP) 服务器,将 Firecrawl 引入兼容 MCP 的 AI 代理——搜索、抓取并与实时网络交互,获取干净、可供代理使用的上下文。

非常感谢 @vrknetha@knacklabs 的初始实现!

功能特性

  • 搜索网络并获取完整页面内容
  • 将任何 URL 抓取为干净、结构化的数据
  • 与页面交互——点击、导航和操作
  • 使用自主代理进行深度研究
  • 自动重试和速率限制
  • 支持云端和自托管
  • 支持 SSE

MCP.so 的游乐场Klavis AI 上试用我们的 MCP 服务器。

安装

使用 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 服务器配置指南

在 Cursor v0.48.6 中配置 Firecrawl MCP

  1. 打开 Cursor 设置
  2. 转到“功能” > “MCP 服务器”
  3. 点击“+ 添加新的全局 MCP 服务器”
  4. 输入以下代码:
    {
      "mcpServers": {
        "firecrawl-mcp": {
          "command": "npx",
          "args": ["-y", "firecrawl-mcp"],
          "env": {
            "FIRECRAWL_API_KEY": "YOUR-API-KEY"
          }
        }
      }
    }
    

在 Cursor v0.45.6 中配置 Firecrawl MCP

  1. 打开 Cursor 设置
  2. 转到“功能” > “MCP 服务器”
  3. 点击“+ 添加新的 MCP 服务器”
  4. 输入以下内容:
    • 名称:“firecrawl-mcp”(或您喜欢的名称)
    • 类型:“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 密钥。如果您还没有,可以创建一个帐户并从 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"
      }
    }
  }
}

使用可流式 HTTP 本地模式运行

要在本地使用可流式 HTTP 而不是默认的 stdio 传输来运行服务器:

env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp

使用 URL:http://localhost:3000/mcp

通过 Smithery 安装(旧版)

要通过 Smithery 为 Claude Desktop 自动安装 Firecrawl:

npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

在 VS Code 上运行

对于一键安装,请点击下面的安装按钮之一...

Install with NPX in VS Code Install with NPX in VS Code Insiders

对于手动安装,请将以下 JSON 块添加到 VS Code 的用户设置 (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 密钥
    • 使用云端 API 时必需(默认)
    • 使用带有 FIRECRAWL_API_URL 的自托管实例时可选
  • FIRECRAWL_API_URL(可选):自托管实例的自定义 API 端点
    • 示例:https://firecrawl.your-domain.com
    • 如果未提供,将使用云端 API(需要 API 密钥)

MCP OAuth(Bearer 访问令牌)

托管的 Firecrawl 可以通过 firecrawl.dev 上的授权服务器颁发 OAuth 访问令牌 (fco_…)。此 MCP 服务器将其解析到的任何凭据作为 Authorization: Bearer … 转发到 Firecrawl API。

  • HTTP 流传输 (CLOUD_SERVICE=trueHTTP_STREAMABLE_SERVER=trueSSE_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 密钥。

仅使用 access 令牌 (fco_…)。刷新令牌 (fcr_…) 必须在令牌端点进行交换,不能传递给抓取/搜索 API。

可选配置

重试配置
  • FIRECRAWL_RETRY_MAX_ATTEMPTS:最大重试次数(默认:3)
  • FIRECRAWL_RETRY_INITIAL_DELAY:首次重试前的初始延迟(毫秒)(默认:1000)
  • FIRECRAWL_RETRY_MAX_DELAY:重试之间的最大延迟(毫秒)(默认:10000)
  • FIRECRAWL_RETRY_BACKOFF_FACTOR:指数退避乘数(默认:2)
信用额度使用监控
  • FIRECRAWL_CREDIT_WARNING_THRESHOLD:信用额度使用警告阈值(默认:1000)
  • FIRECRAWL_CREDIT_CRITICAL_THRESHOLD:信用额度使用严重阈值(默认:100)

配置示例

对于带有自定义重试和信用监控的云端 API 使用:

# Required for cloud API
export FIRECRAWL_API_KEY=your-api-key

# Optional retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=5        # Increase max retry attempts
export FIRECRAWL_RETRY_INITIAL_DELAY=2000    # Start with 2s delay
export FIRECRAWL_RETRY_MAX_DELAY=30000       # Maximum 30s delay
export FIRECRAWL_RETRY_BACKOFF_FACTOR=3      # More aggressive backoff

# Optional credit monitoring
export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000    # Warning at 2000 credits
export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500    # Critical at 500 credits

对于自托管实例:

# 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

# Custom retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
export FIRECRAWL_RETRY_INITIAL_DELAY=500     # Start with faster retries

与 Claude Desktop 一起使用

将此添加到您的 claude_desktop_config.json

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE",

        "FIRECRAWL_RETRY_MAX_ATTEMPTS": "5",
        "FIRECRAWL_RETRY_INITIAL_DELAY": "2000",
        "FIRECRAWL_RETRY_MAX_DELAY": "30000",
        "FIRECRAWL_RETRY_BACKOFF_FACTOR": "3",

        "FIRECRAWL_CREDIT_WARNING_THRESHOLD": "2000",
        "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD": "500"
      }
    }
  }
}

系统配置

服务器包含几个可通过环境变量设置的可配置参数。以下是未配置时的默认值:

const CONFIG = {
  retry: {
    maxAttempts: 3, // Number of retry attempts for rate-limited requests
    initialDelay: 1000, // Initial delay before first retry (in milliseconds)
    maxDelay: 10000, // Maximum delay between retries (in milliseconds)
    backoffFactor: 2, // Multiplier for exponential backoff
  },
  credit: {
    warningThreshold: 1000, // Warn when credit usage reaches this level
    criticalThreshold: 100, // Critical alert when credit usage reaches this level
  },
};

这些配置控制:

  1. 重试行为

    • 自动重试因速率限制而失败的请求
    • 使用指数退避以避免 API 过载
    • 示例:使用默认设置,重试将在以下时间尝试:
      • 第 1 次重试:延迟 1 秒
      • 第 2 次重试:延迟 2 秒
      • 第 3 次重试:延迟 4 秒(上限为 maxDelay)
  2. 信用额度使用监控

    • 跟踪云端 API 使用的 API 信用消耗
    • 在指定阈值提供警告
    • 有助于防止意外的服务中断
    • 示例:使用默认设置:
      • 剩余 1000 信用点时发出警告
      • 剩余 100 信用点时发出严重警报

速率限制和批处理

服务器利用 Firecrawl 内置的速率限制和批处理功能:

  • 使用指数退避自动处理速率限制
  • 批处理操作的高效并行处理
  • 智能请求排队和节流
  • 对瞬时错误自动重试

如何选择工具

使用此指南为您的任务选择合适的工具:

  • 如果您知道确切的一个或多个 URL:
    • 一个:使用 scrape(使用 JSON 格式获取结构化数据)
    • 多个:使用 batch_scrape
  • 如果您需要发现网站上的 URL: 使用 map
  • 如果您想搜索网络信息: 使用 search
  • 如果您需要跨多个未知来源进行复杂研究: 使用 agent
  • 如果您想分析整个网站或部分: 使用 crawl(有限制!)
  • 如果您需要交互式浏览器自动化(点击、输入、导航):使用 scrape + interact

快速参考表

工具最适合返回
scrape单个页面内容JSON(首选)或 markdown
interact与抓取的页面交互执行结果
batch_scrape多个已知 URLJSON(首选)或 markdown[]
map发现网站上的 URLURL[]
crawl多页面提取(有限制)markdown/html[]
search网络搜索信息results[]
agent复杂的多源研究JSON(结构化数据)

格式选择指南

使用 scrapebatch_scrape 时,请选择合适的格式:

  • JSON 格式(大多数情况下推荐): 当您需要页面中的特定数据时使用。根据您需要提取的内容定义模式。这可以保持响应较小,并避免上下文窗口溢出。
  • Markdown 格式(谨慎使用): 仅当您确实需要完整的页面内容时使用,例如阅读整篇文章以进行摘要或分析页面结构。

可用工具

1. 抓取工具 (firecrawl_scrape)

使用高级选项从单个 URL 抓取内容。

最适合:

  • 单个页面内容提取,当您确切知道哪个页面包含信息时。

不推荐用于:

  • 从多个页面提取内容(对于已知 URL,使用 batch_scrape;或先使用 map + batch_scrape 发现 URL;或使用 crawl 获取完整页面内容)
  • 当您不确定哪个页面包含信息时(使用 search)

常见错误:

  • 对 URL 列表使用 scrape(应改用 batch_scrape)。
  • 默认使用 markdown 格式(应使用 JSON 格式仅提取所需内容)。

选择合适的格式:

  • JSON 格式(首选): 对于大多数用例,使用带有模式的 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
  }
}

使用示例(品牌格式 - 提取品牌标识):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formats": ["branding"]
  }
}

品牌格式: 提取全面的品牌标识(颜色、字体、排版、间距、徽标、UI 组件),用于设计分析或样式复制。 隐私: 设置 redactPII: true 以返回经过编辑的个人身份信息内容。

返回:

  • JSON 结构化数据、markdown、品牌配置文件或指定的其他格式。

2. 批量抓取工具 (firecrawl_batch_scrape)

使用内置的速率限制和并行处理高效地抓取多个 URL。

最适合:

  • 从多个页面检索内容,当您确切知道要抓取哪些页面时。

不推荐用于:

  • 发现 URL(如果您不知道 URL,请先使用 map)
  • 抓取单个页面(使用 scrape)

常见错误:

  • 一次使用 batch_scrape 处理过多 URL(可能达到速率限制或令牌溢出)

提示示例:

"获取这三篇博客文章的内容:[url1, url2, url3]。"

使用示例:

{
  "name": "firecrawl_batch_scrape",
  "arguments": {
    "urls": ["https://example1.com", "https://example2.com"],
    "options": {
      "formats": ["markdown"],
      "onlyMainContent": true
    }
  }
}

返回:

  • 响应包含用于状态检查的操作 ID:
{
  "content": [
    {
      "type": "text",
      "text": "Batch operation queued with ID: batch_1. Use firecrawl_check_batch_status to check progress."
    }
  ],
  "isError": false
}

3. 检查批处理状态 (firecrawl_check_batch_status)

检查批处理操作的状态。

{
  "name": "firecrawl_check_batch_status",
  "arguments": {
    "id": "batch_1"
  }
}

4. 映射工具 (firecrawl_map)

映射网站以发现站点上所有已索引的 URL。

最适合:

  • 在决定抓取什么之前发现网站上的 URL
  • 查找网站的特定部分

不推荐用于:

  • 当您已经知道需要哪个特定 URL 时(使用 scrape 或 batch_scrape)
  • 当您需要页面内容时(映射后使用 scrape)

常见错误:

  • 使用 crawl 而不是 map 来发现 URL

提示示例:

"列出 example.com 上的所有 URL。"

使用示例:

{
  "name": "firecrawl_map",
  "arguments": {
    "url": "https://example.com"
  }
}

返回:

  • 在站点上找到的 URL 数组

5. 搜索工具 (firecrawl_search)

搜索网络,并可选择从搜索结果中提取内容。

最适合:

  • 在多个网站中查找特定信息,当您不知道哪个网站拥有该信息时。
  • 当您需要查询的最相关内容时

不推荐用于:

  • 当您已经知道要抓取哪个网站时(使用 scrape)
  • 当您需要全面覆盖单个网站时(使用 map 或 crawl)

常见错误:

  • 对开放式问题使用 crawl 或 map(应改用 search)

使用示例:

{
  "name": "firecrawl_search",
  "arguments": {
    "query": "latest AI research papers 2023",
    "limit": 5,
    "lang": "en",
    "country": "us",
    "scrapeOptions": {
      "formats": ["markdown"],
      "onlyMainContent": true,
      "redactPII": true
    }
  }
}

返回:

  • 搜索结果数组(带有可选的抓取内容),以及一个 id 字段。在您使用结果后,将该 id 传递给 firecrawl_search_feedback,以退还 1 个信用点(搜索花费 2 个)并提高搜索质量。

提示示例:

"查找 2023 年发表的关于 AI 的最新研究论文。"

5b. 搜索反馈工具 (firecrawl_search_feedback)

对之前的 firecrawl_search 结果发送结构化反馈。每个搜索 ID 的第一次反馈退还 1 个信用点,并提高 Firecrawl 的搜索质量。每个搜索 ID 幂等。

在您实际使用的每次搜索后调用此工具(或没有帮助的搜索)。带有 missingContent 的不良/部分反馈与良好反馈一样有价值。

选择退出: 在启动 MCP 服务器时,在环境中设置 FIRECRAWL_NO_SEARCH_FEEDBACK=1(或 FIRECRAWL_DISABLE_SEARCH_FEEDBACK=1)。firecrawl_search_feedback 工具将不会被注册,因此代理无法调用它。团队管理员也可以在服务器端禁用反馈;在这种情况下,工具已注册但始终返回 feedbackErrorCode: "TEAM_OPTED_OUT"

最重要的字段: missingContent。它是一个代理期望找到但未找到的特定内容片段的数组。每个缺失的主题一个条目——这些条目在团队中汇总,并告诉我们接下来要索引什么。

每日退款上限(每个团队,每个 UTC 日,默认 100 信用点)。 一旦团队的 creditsRefundedToday 达到 dailyRefundCap,后续提交仍会记录反馈,但不再退还信用点。响应设置 dailyCapReached: true。当代理看到该标志时,应在 UTC 日剩余时间内停止调用此工具。

使用示例:

{
  "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'"
  }
}

返回:

  • { success, feedbackId, creditsRefunded, alreadySubmitted? } JSON。

5c. 通用反馈工具 (firecrawl_feedback)

通过 /v2/feedback 为已完成的 v2 端点作业发送结构化反馈。 将此用于 scrapeparsemapsearch 作业的端点级反馈。 对于搜索结果的特定质量,优先使用 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?, alreadySubmitted?, warning? } JSON。

6. 爬取工具 (firecrawl_crawl)

在网站上启动异步爬取作业,并从所有页面提取内容。

最适合:

  • 从多个相关页面提取内容,当您需要全面覆盖时。

不推荐用于:

  • 从单个页面提取内容(使用 scrape)
  • 当令牌限制是一个问题时(使用 map + batch_scrape)
  • 当您需要快速结果时(爬取可能很慢)

警告: 爬取响应可能非常大,并可能超出令牌限制。限制爬取深度和页面数量,或使用 map + batch_scrape 以获得更好的控制。

常见错误:

  • 将 limit 或 maxDepth 设置得太高(导致令牌溢出)
  • 对单个页面使用 crawl(应改用 scrape)

提示示例:

"获取 example.com/blog 前两层的所有博客文章。"

使用示例:

{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://example.com/blog/*",
    "maxDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
  }
}

返回:

  • 响应包含用于状态检查的操作 ID:
{
  "content": [
    {
      "type": "text",
      "text": "Started crawl for: https://example.com/* with job ID: 550e8400-e29b-41d4-a716-446655440000. Use firecrawl_check_crawl_status to check progress."
    }
  ],
  "isError": false
}

7. 检查爬取状态 (firecrawl_check_crawl_status)

检查爬取作业的状态。

{
  "name": "firecrawl_check_crawl_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

返回:

  • 响应包含爬取作业的状态:

8. 提取工具 (firecrawl_extract)

使用 LLM 功能从网页中提取结构化信息。支持云端 AI 和自托管 LLM 提取。

最适合:

  • 提取特定的结构化数据,如价格、名称、详细信息。

不推荐用于:

  • 当您需要页面的完整内容时(使用 scrape)
  • 当您不寻找特定的结构化数据时

参数:

  • urls:要从中提取信息的 URL 数组
  • prompt:用于 LLM 提取的自定义提示
  • systemPrompt:指导 LLM 的系统提示
  • schema:用于结构化数据提取的 JSON 模式
  • allowExternalLinks:允许从外部链接提取
  • enableWebSearch:启用网络搜索以获取附加上下文
  • includeSubdomains:在提取中包含子域

使用自托管实例时,提取将使用您配置的 LLM。对于云端 API,它使用 Firecrawl 的托管 LLM 服务。 提示示例:

"从这些产品页面提取产品名称、价格和描述。"

使用示例:

{
  "name": "firecrawl_extract",
  "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extract product information including name, price, and description",
    "systemPrompt": "You are a helpful assistant that extracts product information",
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "price": { "type": "number" },
        "description": { "type": "string" }
      },
      "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
  }
}

返回:

  • 由您的模式定义的结构化提取数据
{
  "content": [
    {
      "type": "text",
      "text": {
        "name": "Example Product",
        "price": 99.99,
        "description": "This is an example product description"
      }
    }
  ],
  "isError": false
}

9. 代理工具 (firecrawl_agent)

自主网络研究代理。这是一个独立的 AI 代理层,可独立浏览互联网、搜索信息、浏览页面,并根据您的查询提取结构化数据。

工作原理:

代理自主执行网络搜索、跟踪链接、阅读页面并收集数据。这异步运行——它立即返回一个作业 ID,您轮询 firecrawl_agent_status 以检查何时完成并检索结果。

异步工作流程:

  1. 使用您的提示/模式调用 firecrawl_agent → 返回作业 ID
  2. 在代理研究期间执行其他工作(复杂查询可能需要几分钟)
  3. 使用作业 ID 轮询 firecrawl_agent_status 以检查进度
  4. 当状态为“completed”时,响应包含提取的数据

最适合:

  • 当您不知道确切 URL 时的复杂研究任务
  • 多源数据收集
  • 查找分散在网络上的信息
  • 在等待结果时可以执行其他工作的任务

不推荐用于:

  • 您知道 URL 的简单单页抓取(使用带有 JSON 格式的 scrape - 更快更便宜)

参数:

  • prompt:对所需数据的自然语言描述(必需,最多 10,000 个字符)
  • urls:可选的 URL 数组,用于将代理集中在特定页面上
  • schema:可选的 JSON 模式,用于结构化输出

提示示例:

"查找 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"
  }
}

返回:

  • 用于状态检查的作业 ID。使用 firecrawl_agent_status 轮询结果。

10. 检查代理状态 (firecrawl_agent_status)

检查代理作业的状态,并在完成后检索结果。在启动代理后使用此工具轮询结果。

轮询模式: 代理研究对于复杂查询可能需要几分钟。定期轮询此端点(例如,每 10-30 秒),直到状态为“completed”或“failed”。

{
  "name": "firecrawl_agent_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

可能的状态:

  • processing:代理仍在研究 - 稍后再检查
  • completed:研究完成 - 响应包含提取的数据
  • failed:发生错误

11. 监控工具 (firecrawl_monitor_*)

创建和管理定期页面监控器。监控器运行计划的抓取或爬取,将每个结果与上次保留的快照进行比较,并可以通过 webhook 或电子邮件通知。

最适合:

  • 随时间推移观察一个或几个页面
  • 使用简明英语目标对有意义的变化发出警报
  • 跟踪检查历史和页面级差异

推荐的创建模式:

使用 pagepages 加上 goal。MCP 服务器以 30 分钟的计划构建监控器请求,API 自动启用有意义的变化判断。

当设置 goal 时,有意义的变化判断会自动运行。页面 webhook 在 monitor.page 事件上公开 isMeaningfuljudgment

将目标写为简洁的 2-3 句监控器指令。说明什么应触发警报,保留用户给出的任何范围,并仅在请求中明确时才包含特定于意图的排除项。通用噪音,如空格、仅格式更改、请求 ID、跟踪参数、通用元数据和不相关的页面 chrome,已由判断器处理,因此不要在每个目标中重复。如果用户含糊不清,请保持目标宽泛;如果他们要求广泛监控或“任何更改”,请保留该要求。如果用户说他们不关心某事,请明确包含该内容。

{
  "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:更新字段,包括 goaljudgeEnabledwebhooknotification
  • firecrawl_monitor_run:立即触发检查。
  • firecrawl_monitor_checks:列出检查,可选择按状态过滤。
  • firecrawl_monitor_check:获取页面级结果,包括 diffsnapshotjudgment.meaningfuljudgment.meaningfulChanges

日志系统

服务器包含全面的日志记录:

  • 操作状态和进度
  • 性能指标
  • 信用额度使用监控
  • 速率限制跟踪
  • 错误条件

示例日志消息:

[INFO] Firecrawl MCP Server initialized successfully
[INFO] Starting scrape for URL: https://example.com
[INFO] Batch operation queued with ID: batch_1
[WARNING] Credit usage has reached warning threshold
[ERROR] Rate limit exceeded, retrying in 2s...

错误处理

服务器提供强大的错误处理:

  • 对瞬时错误自动重试
  • 使用退避处理速率限制
  • 详细的错误消息
  • 信用额度使用警告
  • 网络弹性

示例错误响应:

{
  "content": [
    {
      "type": "text",
      "text": "Error: Rate limit exceeded. Retrying in 2 seconds..."
    }
  ],
  "isError": true
}

开发

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

贡献

  1. Fork 仓库
  2. 创建您的功能分支
  3. 运行测试:npm test
  4. 提交拉取请求

感谢贡献者

感谢 @vrknetha@cawstudios 的初始实现!

感谢 MCP.so 和 Klavis AI 的托管,以及 @gstarwd@xiangkaiz@zihaolin96 集成我们的服务器。

许可证

MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件