Back to MCP directory
publicPublicdnsLocal runtime

anycrawl-mcp-server

AnyCrawl MCP Server是一个基于模型上下文协议(MCP)的网页爬取和抓取服务器,支持单页抓取、网站爬取和搜索引擎集成,提供多种输出格式和引擎选择。

article

README

🚀 AnyCrawl MCP Server

🚀 AnyCrawl MCP Server 是一款强大的网页抓取和爬取工具,它通过模型上下文协议(MCP)为 Cursor、Claude 等大语言模型(LLM)客户端提供支持。

🚀 快速开始

AnyCrawl MCP Server 可助力你高效地进行网页抓取和爬取工作。以下是使用前的准备步骤:

  1. 获取 API 密钥:访问 AnyCrawl 网站,注册或登录账号。注册后可免费获得 1500 个积分,足以爬取近 1500 个页面。打开仪表盘,点击 “API Keys”,复制你的密钥。
  2. 设置环境变量:将获取的 API 密钥设置为 ANYCRAWL_API_KEY 环境变量。示例:export ANYCRAWL_API_KEY="your-api-key-here"
  3. 选择安装方式:你可以选择使用 npx 运行,或者手动安装。

✨ 主要特性

  • 网页抓取:从单个 URL 提取内容,支持多种输出格式。
  • 网站爬取:可对整个网站进行爬取,支持配置爬取深度和限制。
  • 搜索引擎集成:支持在网络上搜索,并可选择对搜索结果进行抓取。
  • 多引擎支持:支持 Playwright、Cheerio 和 Puppeteer 等多种抓取引擎。
  • 灵活输出:支持 Markdown、HTML、文本、截图和结构化 JSON 等多种输出格式。
  • 异步操作:支持非阻塞式爬取任务,并可进行状态监控。
  • 错误处理:具备强大的错误处理和日志记录功能。
  • 多模式支持:支持 STDIO(默认)、MCP(HTTP)、SSE 等模式,可通过 Nginx 代理实现云端部署。

📦 安装指南

使用 npx 运行

ANYCRAWL_API_KEY=YOUR-API-KEY npx -y anycrawl-mcp

手动安装

npm install -g anycrawl-mcp-server

ANYCRAWL_API_KEY=YOUR-API-KEY anycrawl-mcp

配置环境变量

设置必需的环境变量:

export ANYCRAWL_API_KEY="your-api-key-here"

可选设置自定义基础 URL:

export ANYCRAWL_BASE_URL="https://api.anycrawl.dev"  # 默认值

💻 使用示例

可用模式

AnyCrawl MCP Server 支持以下部署模式,默认模式为 STDIO(无需设置环境变量),可通过设置 ANYCRAWL_MODE 进行切换。

| 模式 | 描述 | 适用场景 | 传输方式 | | ------- | --------------------------------- | ----------------------------------------- | ----------- | | STDIO | 通过标准输入输出实现标准 MCP(默认) | 命令型 MCP 客户端、本地工具 | 标准输入输出 | | MCP | 可流式传输的 HTTP(JSON,有状态) | Cursor(可流式传输的 HTTP)、API 集成 | HTTP + JSON | | SSE | 服务器发送事件 | 网页应用、浏览器集成 | HTTP + SSE |

快速启动命令

# 开发环境(本地)
npm run dev            # STDIO(默认)
npm run dev:mcp          # MCP 模式(JSON /mcp)
npm run dev:sse          # SSE 模式 (/sse)

# 生产环境(构建输出)
npm start              # STDIO(默认)
npm run start:mcp
npm run start:sse

# 环境变量示例
ANYCRAWL_MODE=MCP ANYCRAWL_API_KEY=YOUR-KEY npm run dev:mcp
ANYCRAWL_MODE=SSE ANYCRAWL_API_KEY=YOUR-KEY npm run dev:sse

Docker Compose(MCP + SSE 搭配 Nginx)

本仓库提供了一个生产就绪的镜像,可在同一容器中通过 Nginx 前端在端口 3000 运行 MCP(JSON),在端口 3001 运行 SSE。Nginx 还支持以 API 密钥为前缀的路径 /{API_KEY}/mcp/{API_KEY}/sse,并通过 x-anycrawl-api-key 头转发密钥。

docker compose build
docker compose up -d

Docker 镜像中使用的环境变量:

  • ANYCRAWL_MODE: MCP_AND_SSE(Compose 中的默认值),或 MCPSSE
  • ANYCRAWL_MCP_PORT: 默认值为 3000
  • ANYCRAWL_SSE_PORT: 默认值为 3001
  • CLOUD_SERVICE: 设置为 true 可从 /{API_KEY}/... 或头信息中提取 API 密钥
  • ANYCRAWL_BASE_URL: 默认值为 https://api.anycrawl.dev

在 Cursor 上运行

配置 Cursor(需要 Cursor v0.45.6+ 版本)。

对于 Cursor v0.48.6 及更高版本,将以下内容添加到 MCP Servers 设置中:

{
  "mcpServers": {
    "anycrawl-mcp": {
      "command": "npx",
      "args": ["-y", "anycrawl-mcp"],
      "env": {
        "ANYCRAWL_API_KEY": "YOUR-API-KEY"
      }
    }
  }
}

对于 Cursor v0.45.6 版本:

  1. 打开 Cursor 设置 → 功能 → MCP Servers → "+ 添加新的 MCP 服务器"
  2. 名称:"anycrawl-mcp"(或你喜欢的名称)
  3. 类型:"命令"
  4. 命令:
env ANYCRAWL_API_KEY=YOUR-API-KEY npx -y anycrawl-mcp

在 Windows 系统上遇到问题时:

cmd /c "set ANYCRAWL_API_KEY=YOUR-API-KEY && npx -y anycrawl-mcp"

在 VS Code 上运行

手动安装时,将以下 JSON 添加到 VS Code 的用户设置(JSON)中(命令面板 → 首选项:打开用户设置(JSON)):

{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "apiKey",
        "description": "AnyCrawl API 密钥",
        "password": true
      }
    ],
    "servers": {
      "anycrawl": {
        "command": "npx",
        "args": ["-y", "anycrawl-mcp"],
        "env": {
          "ANYCRAWL_API_KEY": "${input:apiKey}"
        }
      }
    }
  }
}

可选地,将以下内容放置在工作区的 .vscode/mcp.json 中以共享配置:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "apiKey",
      "description": "AnyCrawl API 密钥",
      "password": true
    }
  ],
  "servers": {
    "anycrawl": {
      "command": "npx",
      "args": ["-y", "anycrawl-mcp"],
      "env": {
        "ANYCRAWL_API_KEY": "${input:apiKey}"
      }
    }
  }
}

在 Windsurf 上运行

将以下内容添加到 ./codeium/windsurf/model_config.json 中:

{
  "mcpServers": {
    "mcp-server-anycrawl": {
      "command": "npx",
      "args": ["-y", "anycrawl-mcp"],
      "env": {
        "ANYCRAWL_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

使用 SSE 服务器模式

SSE(服务器发送事件)模式为 MCP 通信提供了基于 Web 的界面,适用于网页应用、测试以及与基于 Web 的 LLM 客户端集成。

快速启动

# 开发模式
ANYCRAWL_API_KEY=YOUR-API-KEY npx -y anycrawl-mcp

# 或使用 npm 脚本
ANYCRAWL_API_KEY=YOUR-API-KEY npm run dev:sse

服务器配置

可选的服务器设置(显示默认值):

export ANYCRAWL_PORT=3000
export ANYCRAWL_HOST=0.0.0.0

健康检查

curl -s http://localhost:${ANYCRAWL_PORT:-3000}/health
# 响应:ok

通用 MCP/SSE 客户端配置

对于支持 SSE 传输的其他 MCP/SSE 客户端,使用以下配置:

{
  "mcpServers": {
    "anycrawl": {
      "type": "sse",
      "url": "https://mcp.anycrawl.dev/{API_KEY}/sse",
      "name": "AnyCrawl MCP 服务器",
      "description": "网页抓取和爬取工具"
    }
  }
}

{
  "mcpServers": {
    "AnyCrawl": {
      "type": "streamable_http",
      "url": "https://mcp.anycrawl.dev/{API_KEY}/mcp"
    }
  }
}

环境设置

# 使用 API 密钥启动 SSE 服务器
ANYCRAWL_API_KEY=your-api-key-here npm run dev:sse

Cursor 配置(HTTP 模式,可流式传输的 HTTP)

配置 Cursor 以连接到你的 HTTP MCP 服务器。

本地 HTTP 可流式传输服务器:

{
  "mcpServers": {
    "anycrawl-http-local": {
      "type": "streamable_http",
      "url": "http://127.0.0.1:3000/mcp"
    }
  }
}

云端 HTTP 可流式传输服务器:

{
  "mcpServers": {
    "anycrawl-http-cloud": {
      "type": "streamable_http",
      "url": "https://mcp.anycrawl.dev/{API_KEY}/mcp"
    }
  }
}

注意:对于 HTTP 模式,需在服务器进程环境或 URL 中设置 ANYCRAWL_API_KEY(以及可选的主机/端口)。使用 streamable_http 时,Cursor 不需要你的 API 密钥。

可用工具

1. 抓取工具 (anycrawl_scrape)

从单个 URL 抓取内容并以多种格式提取。

适用场景

  • 从单个页面提取内容
  • 快速数据提取
  • 测试特定 URL

参数

  • url(必需):要抓取的 URL
  • engine(必需):抓取引擎(playwrightcheeriopuppeteer
  • formats(可选):输出格式(markdownhtmltextscreenshotscreenshot@fullPagerawHtmljson
  • proxy(可选):代理 URL
  • timeout(可选):超时时间(毫秒,默认值:300000)
  • retry(可选):失败时是否重试(默认值:false)
  • wait_for(可选):页面加载等待时间
  • include_tags(可选):要包含的 HTML 标签
  • exclude_tags(可选):要排除的 HTML 标签
  • json_options(可选):JSON 提取选项

示例

{
  "name": "anycrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "engine": "cheerio",
    "formats": ["markdown", "html"],
    "timeout": 30000
  }
}

2. 爬取工具 (anycrawl_crawl)

启动爬取任务以从网站抓取多个页面。默认情况下,使用 SDK 的 client.crawl 等待任务完成并返回聚合结果(默认:每 3 秒轮询一次,60 秒后超时)。

适用场景

  • 从多个相关页面提取内容
  • 全面的网站分析
  • 批量数据收集

参数

  • url(必需):要爬取的基础 URL
  • engine(必需):抓取引擎
  • max_depth(可选):最大爬取深度(默认值:10)
  • limit(可选):最大页面数(默认值:100)
  • strategy(可选):爬取策略(allsame-domainsame-hostnamesame-origin
  • exclude_paths(可选):要排除的 URL 模式
  • include_paths(可选):要包含的 URL 模式
  • scrape_options(可选):单个页面抓取选项
  • poll_seconds(可选):等待时的轮询间隔秒数(默认值:3)
  • timeout_ms(可选):等待的总超时毫秒数(默认值:60000)

示例

{
  "name": "anycrawl_crawl",
  "arguments": {
    "url": "https://example.com/blog",
    "engine": "playwright",
    "max_depth": 2,
    "limit": 50,
    "strategy": "same-domain",
    "poll_seconds": 3,
    "timeout_ms": 60000
  }
}

返回结果:{ "job_id": "...", "status": "completed", "total": N, "completed": N, "creditsUsed": N, "data": [...] }

3. 爬取状态工具 (anycrawl_crawl_status)

检查爬取任务的状态。

参数

  • job_id(必需):爬取任务 ID

示例

{
  "name": "anycrawl_crawl_status",
  "arguments": {
    "job_id": "7a2e165d-8f81-4be6-9ef7-23222330a396"
  }
}

4. 爬取结果工具 (anycrawl_crawl_results)

获取爬取任务的结果。

参数

  • job_id(必需):爬取任务 ID
  • skip(可选):要跳过的结果数(用于分页)

示例

{
  "name": "anycrawl_crawl_results",
  "arguments": {
    "job_id": "7a2e165d-8f81-4be6-9ef7-23222330a396",
    "skip": 0
  }
}

5. 取消爬取工具 (anycrawl_cancel_crawl)

取消待处理的爬取任务。

参数

  • job_id(必需):要取消的爬取任务 ID

示例

{
  "name": "anycrawl_cancel_crawl",
  "arguments": {
    "job_id": "7a2e165d-8f81-4be6-9ef7-23222330a396"
  }
}

6. 搜索工具 (anycrawl_search)

使用 AnyCrawl 搜索引擎在网络上搜索。

适用场景

  • 在多个网站上查找特定信息
  • 研究和发现
  • 不确定信息所在网站时使用

参数

  • query(必需):搜索查询
  • engine(可选):搜索引擎(google
  • limit(可选):最大结果数(默认值:10)
  • offset(可选):要跳过的结果数(默认值:0)
  • pages(可选):要搜索的页面数
  • lang(可选):语言代码
  • country(可选):国家代码
  • scrape_options(必需):搜索结果抓取选项
  • safeSearch(可选):安全搜索级别(0=关闭,1=中等,2=严格)

示例

{
  "name": "anycrawl_search",
  "arguments": {
    "query": "latest AI research papers 2024",
    "engine": "google",
    "limit": 5,
    "scrape_options": {
      "engine": "cheerio",
      "formats": ["markdown"]
    }
  }
}

📚 详细文档

输出格式

  • Markdown:干净、结构化的 Markdown 内容,非常适合 LLM 处理。
  • HTML:保留所有格式的原始 HTML 内容。
  • 文本:格式最少的纯文本内容。
  • 截图:页面的视觉截图。
  • Screenshot@fullPage:包含折叠下方内容的全页截图。
  • 原始 HTML:未处理的 HTML 内容。
  • JSON:使用自定义模式进行结构化数据提取。

引擎

Cheerio

  • 快速轻量级
  • 适用于静态内容
  • 服务器端渲染

Playwright

  • 全浏览器自动化
  • JavaScript 渲染
  • 最适合动态内容

Puppeteer

  • Chrome/Chromium 自动化
  • 功能和性能的良好平衡

🔧 技术细节

错误处理

服务器提供全面的错误处理:

  • 验证错误:无效参数或缺少必需字段
  • API 错误:AnyCrawl API 错误,带有详细消息
  • 网络错误:连接和超时问题
  • 速率限制:自动重试并进行退避

日志记录

服务器包含详细的日志记录:

  • 调试:详细的操作信息
  • 信息:一般操作状态
  • 警告:非关键问题
  • 错误:关键错误和失败

可通过环境变量设置日志级别:

export LOG_LEVEL=debug  # debug, info, warn, error

开发

前提条件

  • Node.js 18+
  • npm

设置

git clone <repository>
cd anycrawl-mcp
npm ci

构建

npm run build

测试

npm test

代码检查

npm run lint

格式化

npm run format

📄 许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

支持

关于 AnyCrawl

AnyCrawl 是一个强大的 Node.js/TypeScript 爬虫,可将网站转换为适合 LLM 的数据,并从 Google、Bing、百度等搜索引擎提取结构化的搜索结果页面(SERP)数据。它具有原生多线程处理功能,支持多种输出格式。

  • 网站:https://anycrawl.dev
  • GitHub:https://github.com/any4ai/anycrawl
  • API:https://api.anycrawl.dev
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client