网页爬取服务器

Firecrawl MCP Server是一个集成网页爬取、内容提取和搜索功能的服务器实现,适用于数据收集和研究场景。

  • by jasonking0112
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Jaycee1996/firecrawl-mcp-server

使用说明

Firecrawl MCP 服务器

一个模型上下文协议(MCP)服务器实现,该实现与(其他系统或功能)集成 火爬虫 用于网页抓取功能。

非常感谢 @vrknetha(这个用户名或标签在中文中通常保持不变,直接翻译可能无实际意义,故保留原样), @knacklabs(该标签或用户名保持原样,不直接翻译,因其可能是特定网站、应用或社交媒体上的专有名称) 用于初步实施!

特点/特性

  • 网页抓取、爬取和发现
  • 搜索和内容提取
  • 深入研究与批量抓取
  • 自动重试和速率限制
  • 云服务和自托管支持
  • SSE支持

随意摆弄/尝试 我们的MCP服务器在MCP.so的游乐场(或测试环境中) 或者在 Klavis AI(可译为“克拉维斯人工智能”或根据具体语境简化为“克拉维斯AI”,但直接翻译保持原名风格)。

安装

使用 npx 运行

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

手动安装

npm install -g firecrawl-mcp

在光标处运行

配置光标 🖥️ 注:需要 Cursor 版本 0.45.6 或更高版本 如需获取最新的配置说明,请参阅官方Cursor文档中关于配置MCP服务器的部分: Cursor MCP 服务器配置指南

在Cursor中配置Firecrawl MCP v0.48.6

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

在Cursor中配置Firecrawl MCP v0.45.6

  1. 打开光标设置
  2. 前往“功能”>“MCP 服务器”
  3. 点击“+ 添加新的MCP服务器”
  4. 请输入以下内容:
    • 名称:“firecrawl-mcp”(或您喜欢的名称)
    • 类型:“命令”
    • 命令: 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,但您也可以通过描述您的网页抓取需求来明确请求使用它。在Mac上,按Command+L访问Composer,选择提交按钮旁边的“Agent”,然后输入您的查询。

在风帆冲浪上奔跑

把这个加到你的(列表/计划等)里 ./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

使用网址:http://localhost:3000/mcp

通过Smithery(旧版)进行安装

通过以下方式自动为Claude Desktop安装Firecrawl Smithery(注:此词在标准英语中并不常见,可能是特定语境或虚构作品中的词汇,直译为“史密斯工坊”或“史密斯工艺”可能并不准确,具体含义需结合上下文确定。):

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

在VS Code上运行

要进行一键安装,请点击下面的安装按钮之一。。。

对于手动安装,请将以下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密钥)

可选配置

重试配置
  • 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桌面版的使用

把这个加到你的(清单/计划/东西里) 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秒
      • 第二次重试:延迟2秒
      • 第三次重试:延迟4秒(最多延迟不超过最大延迟时间)
  2. 信用使用监控

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

速率限制和批处理

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

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

如何选择工具

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

  • 如果您知道确切的URL(网址):
    • 首先:使用 刮取;刮擦
    • 对许多人来说:使用 批量抓取
  • 如果你需要在网站上查找URL: 使用 地图
  • 如果你想在网上搜索信息: 使用 搜索
  • 如果您想提取结构化数据: 使用 提取
  • 如果您想分析整个网站或某个部分: 使用 爬行 (有限制!)

快速参考表

工具 最适合用于 返回值
抓取 单页内容 markdown/html
batch_scrape 多个已知URL markdown/html[]
map 发现网站上的URLs URL[]
爬取 多页面提取(有限制) markdown/html[]
搜索 在网络上搜索信息 结果[]
提取 从页面中提取结构化数据 JSON

可用工具

1. 刮削工具(firecrawl_scrape)

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

最适合用于:

  • 当您确切知道哪一页包含所需信息时,进行单页内容提取。

不建议用于:

  • 从多个页面中提取内容(使用batch_scrape处理已知URL,或先使用map + batch_scrape发现URL,或使用crawl获取完整页面内容)
  • 当你不确定哪一页包含所需信息时(请使用搜索功能)
  • 当你需要结构化数据时(使用提取功能)

常见错误:

  • 使用 scrape 函数处理 URL 列表时(请改用 batch_scrape 函数)。

提示示例:

“获取https://example.com页面的内容。”

使用示例:

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formats": ["markdown"],
    "onlyMainContent": true,
    "waitFor": 1000,
    "timeout": 30000,
    "mobile": false,
    "includeTags": ["article", "main"],
    "excludeTags": ["nav", "footer"],
    "skipTlsVerification": false
  }
}

返回:

  • Markdown、HTML 或其他指定格式。

2. 批量抓取工具(firecrawl_batch_scrape)

利用内置的速率限制和并行处理功能,高效抓取多个URL。

最适合用于:

  • 从多个页面中提取内容,当你确切知道要抓取哪些页面时。

不建议用于:

  • 发现URL(如果不知道URL,请先使用地图)
  • 抓取单个页面(使用 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)
  • 当你需要页面内容时(映射后使用抓取功能)

常见错误:

  • 使用爬取来发现URL,而不是映射

提示示例:

“列出example.com上的所有URL。”

使用示例:

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

返回:

  • 在网站上找到的一系列URL

5. 搜索工具(firecrawl_search)

在互联网上进行搜索,并可选择性地从搜索结果中提取内容。

最适合用于:

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

不建议用于:

  • 当你已经知道要抓取哪个网站时(使用抓取功能)
  • 当你需要对单个网站进行全面覆盖时(使用地图或爬取功能)

常见错误:

  • 对于开放式问题,使用爬取或映射(建议使用搜索代替)

使用示例:

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

返回值:

  • 搜索结果数组(可选包含抓取的内容)

提示示例:

“查找2023年发表的最新人工智能研究论文。”

6. 爬取工具(firecrawl_crawl)

在网站上启动一个异步抓取任务,并从所有页面中提取内容。

最适合用于:

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

不建议用于:

  • 从单页中提取内容(使用抓取功能)
  • 当令牌限制成为关注点时(使用映射+批量抓取)
  • 当你需要快速结果时(爬取过程可能很慢)

警告: 爬取响应可能会非常大,并可能超出令牌限制。请限制爬取深度和页面数量,或者使用映射(map)+ 批量抓取(batch_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提取。

最适合用于:

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

不建议用于:

  • 当你需要获取页面的全部内容时(使用抓取功能)
  • 当你不需要寻找特定的结构化数据时

参数:

  • urls用于提取信息的URL数组
  • prompt用于LLM提取的自定义提示
  • systemPrompt系统提示以引导大型语言模型(LLM)
  • schema用于结构化数据提取的JSON模式
  • allowExternalLinks允许从外部链接提取
  • enableWebSearch启用网页搜索以获取更多上下文信息
  • includeSubdomains在提取过程中包含子域名

当使用自托管实例时,提取过程将使用您配置的大型语言模型(LLM)。对于云API,它使用Firecrawl的托管大型语言模型服务。 提示示例:

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

使用示例:

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

日志系统

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

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

示例日志消息:

[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. 为仓库创建分支(或:克隆仓库)
  2. 创建你的功能分支
  3. 运行测试: npm test
  4. 提交拉取请求

感谢贡献者

多亏了 @vrknetha(这个用户名或标签在中文中通常保持不变,直接翻译可能无实际意义,故保留原样), @cawstudios 用于初步实施!

感谢MCP.so和Klavis AI提供托管服务 @gstarwd, @向凯兹 并且 @zihaolin96(注:这是一个用户名或特定标识,直接翻译为中文仍为“@zihaolin96”,在中文语境下通常保持原样) 用于集成我们的服务器。

许可证

MIT 许可证 - 详见 LICENSE 文件