mcpField
C
CrawlEyes MCP Server

CrawlEyes MCP Server

本地服务
github.com浏览器自动化21 周前更新

关于 CrawlEyes MCP Server

CrawlEyes MCP Server 为 AI Agent 提供网页搜索、正文提取、深度研究和站点地图工具,适用于需要网页内容的 Agent 与 MCP 客户端。它组合 SearXNG 搜索、无密钥 Tavily 回退、Crawl4AI 提取及本地语义重排。

主要功能

  1. 01搜索并自动回退到 Tavily
  2. 02提取并清理网页正文
  3. 03本地语义重排搜索结果
  4. 04生成带引用的研究报告
  5. 05发现站点地图 URL

适用场景

  1. 01为 Agent 搜索并提取网页资料
  2. 02整理主题研究并生成引用报告
  3. 03发现网站 URL 以准备抓取

MCP 相关

MCP 服务向客户端公开 search、extract、deep_research 和 sitemap 工具,支持 stdio 与 streamable-http 传输。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"waiky-github-crawleyes": {
"command": "uvx",
"args": [
"crawleyes"
],
"env": {
"SEARXNG_URL": "<SEARXNG_URL>",
"TAVILY_API_KEY": "<TAVILY_API_KEY>"
}
}
}
}
启动命令uvx crawleyes
需要配置的环境变量
SEARXNG_URLOptional. Base URL of a SearXNG instance (e.g. http://localhost:8080). If unset, falls back to Tavily keyless.
TAVILY_API_KEY密钥Optional. Tavily API key for higher-rate search fallback. If unset, uses Tavily keyless (rate-limited).

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

安装包
pypicrawleyes0.2.0

工具

还没有获取到工具列表

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

详细介绍

CrawlEyes — 面向 AI Agent 的网页抓取与搜索工具包

英语 | 中文

GitHub stars GitHub license Python MCP MIT

CrawlEyes 为 AI Agent 提供可靠的全文提取(web_extract)和稳健搜索(web_search)后端——让 Agent 能够查看和阅读网页的「眼睛」。该工具基于 Hermes Agent 构建并经过测试。

它还可作为标准 MCP 服务运行,因此任何 MCP 客户端(Claude Desktop、Cursor 及其他 Agent)都能复用相同的搜索和提取功能。

CrawlEyes 演示

为什么选择 CrawlEyes?

大多数 Agent 工具包只覆盖流程中的一个环节。CrawlEyes 是少有的一体化工具包,无需外部账号即可在防火长城之后运行。

典型 Agent 工具包CrawlEyes
🔍 搜索需要 API 密钥,且在中国通常受阻✅ SearXNG(可自托管)+ Tavily 无密钥备用方案——零配置、零密钥
📄 提取需要单独的爬虫,或使用 Firecrawl SaaS✅ 内置 Crawl4AI 全文提取,噪声去除率约为 89%
🧠 语义重排很少包含✅ 本地 fastembed 重排——无需 torch,模型约 50MB
🔌 MCP 服务通常不提供✅ 标准 MCP 工具(search + extract + deep_research + sitemap),支持任何客户端
🌐 适用于中国大多为英文内容,或被 GFW 屏蔽✅ 已在中国大陆的真实服务器上测试(baidu + yandex)

零 API 密钥。零外部账号。一条命令。 CrawlEyes 是这一领域中唯一将搜索、提取、语义重排和 MCP 集成于单一、适用于中国且可自托管的软件包中的工具包。

功能

能力位置重要性
全文提取scripts/crawl4ai_cli.py无头浏览器抓取 → 清晰的 Markdown;可处理约 80% 的 JS/动态/被 UA 屏蔽的页面
内容去噪(P1)crawl4ai_cli.py --noise-filter通过 Crawl4AI 的 PruningContentFilter 清除导航/广告/评论——在一篇典型文章上测得 24.6k→2.8k 个字符(约 89% 的噪声已移除)
带退避的重试(P3)crawl4ai_cli.py --retry N遇到暂时性故障时采用指数退避(1s/2s/4s)
浏览器会话复用(P4)crawl4ai_cli.py --session NAME在单个进程中跨多次抓取复用浏览器上下文——每个 URL 无需冷启动
关键词聚焦提取crawl4ai_cli.py --bm25 KEYWORD仅保留与关键词相关的段落(实验性功能——BM25 以英语为主,最适用于英文文档)
搜索(主要)SearXNG(可自托管的元搜索)注重隐私的搜索聚合器
搜索(备用)Tavily 无密钥 APISearXNG 停用或无结果时,无需配置、无需密钥的备用方案
搜索编排plugins/searxng-tavily/Hermes 插件提供方:优先使用 SearXNG → 自动回退到 Tavily 无密钥方案;三态断路器(失败 3 次 → 冷却 60s → 半开)+ 共享 SQLite 缓存(TTL 3600s)
语义重排(P2)scripts/crawl_search_standalone.py使用 fastembed + BAAI/bge-small-zh-v1.5 对搜索结果进行本地嵌入重排(512 维、无 torch 依赖、约 50MB、带缓存)——将相关结果排在前面。实测:与爬取相关的结果得分为 0.817/0.732,升至顶部;无关结果得分为 0.302/0.139,降至底部
MCP 服务(P5)scripts/mcp_crawl_server.py将 search + extract + deep_research + sitemap 作为标准 MCP 工具公开(默认使用 stdio,远程客户端也可使用 streamable-http)。适用于任何 MCP 客户端,无需依赖 Hermes。提取的内容经过净化,可防范提示词注入(移除不可见字符 + 劫持提示词的行)。统一的速率限制 + 指数退避保护每个工具(滑动窗口、按工具计费),避免并发 Agent 调用对下游服务造成过大压力
站点地图发现(P1)crawleyes/sitemap.pysitemap(origin) → 解析 sitemap.xml(普通 / gzip / 索引递归),并在必要时回退到 robots.txt,返回去重后的 URL 映射。无需密钥即可发现整个站点的 URL 范围,用于全站抓取或深度研究的种子数据
多格式提取(P0)extract(..., format=)markdown(默认)/ fit(去噪)/ raw(未经筛选)/ markdown_with_citations——可按需选择清理程度
适用于 RAG 的接口crawleyes/rag.py使用一行代码 markdown(url) / search_markdown(query) → 获取清晰、已净化、可供大模型使用的 Markdown,用于 RAG 语料库
深度研究crawleyes/deep_research.pydeep_research(topic) → 将主题拆解为子问题 → 搜索 → 提取 → 综合生成带引用的 Markdown 报告。可选使用大模型(任何兼容 OpenAI 的端点);不使用大模型时会降级为证据汇总模式
验证scripts/通过简洁的子进程脚本,按 Hermes 配置文件端到端验证各个后端

项目结构

plugins/searxng-tavily/   Hermes web-search provider plugin (SearXNG → Tavily keyless fallback)
                          + three-state circuit breaker + shared SQLite cache
scripts/
  crawl4ai_cli.py          Universal scraping CLI (URL → Markdown), with denoise/retry/session/BM25
  crawl_search_standalone.py  Standalone search (SearXNG → Tavily) + optional semantic rerank.
                             No Hermes dependency — usable anywhere, powers the MCP server.
  mcp_crawl_server.py      Standard MCP server exposing search + extract + deep_research + sitemap (stdio)
  single_env_check.py      Verify crawl4ai provider registered+available+extracts (one profile)
  verify_searxng_tavily.py Verify searxng-tavily provider: normal path + forced fallback
  agent_link_check.py      Verify full agent tool chain: web_search_tool dispatch + logs

快速开始

1. 安装 Crawl4AI(适用于中国的镜像)
python3 -m venv .venv
# Use Tsinghua PyPI mirror for speed (or any mirror you prefer)
.venv/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple crawl4ai
# Playwright browser kernel — use npmmirror binary mirror if cdn.playwright.dev is blocked
PLAYWRIGHT_DOWNLOAD_HOST=https://registry.npmmirror.com/-/binary/playwright \
  .venv/bin/python -m playwright install chromium
.venv/bin/crawl4ai-setup
2. 抓取页面
.venv/bin/python scripts/crawl4ai_cli.py https://example.com          # stdout Markdown
.venv/bin/python scripts/crawl4ai_cli.py https://example.com -o out.md  # to file
.venv/bin/python scripts/crawl4ai_cli.py URL --text --max-words 5000   # plain text, truncated

# Multi-format extraction (markdown|fit|raw|markdown_with_citations)
.venv/bin/python scripts/crawl4ai_cli.py URL --format raw              # unfiltered source markdown
.venv/bin/python scripts/crawl4ai_cli.py URL --format markdown_with_citations  # + source URLs

# Respect robots.txt (opt-in, default off)
.venv/bin/python scripts/crawl4ai_cli.py URL --respect-robots

# Denoise nav/ads + retry 3x + reuse session across scrapes
.venv/bin/python scripts/crawl4ai_cli.py URL --noise-filter --retry 3 --session s1
3. 使用搜索 + 重排(独立运行,无需 Hermes)
# Optional: local semantic rerank of results (fastembed + bge-small-zh, auto-downloaded)
.venv/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple fastembed

# SearXNG first, Tavily keyless fallback, then rerank
SEARXNG_URL=https://your-searxng .venv/bin/python -c "
import sys; sys.path.insert(0, 'scripts')
from crawl_search_standalone import CrawlSearch
r = CrawlSearch(rerank=True).search('your query')
print(r['data']['web'])"

中国网络说明:嵌入模型从 HuggingFace 下载,而 HuggingFace 在中国大陆网络上无法访问。请设置 HF_ENDPOINT=https://hf-mirror.com 和 HF_HUB_DISABLE_XET=1(hf-mirror 不支持 xet 协议,未设置此项时会返回 401)。

4. 作为 MCP 服务运行(适用于任何客户端)
# Any MCP client can connect via stdio (default):
.venv/bin/python scripts/mcp_crawl_server.py
# Exposes tools:
#   search(query, limit)                 - SearXNG → Tavily keyless, rerank, retry+rate-limit
#   extract(url, max_words, format)      - markdown|fit|raw|markdown_with_citations
#   deep_research(topic, num_questions)  - multi-round cited report
#   sitemap(origin, max_urls)            - URL map from sitemap.xml / robots.txt

# Or serve over HTTP (streamable-http) for remote clients:
.venv/bin/python -m crawleyes.mcp_crawl_server --transport http --port 8765 --host 127.0.0.1
#   → clients connect to http://127.0.0.1:8765/mcp
#   (host/port configurable; default 127.0.0.1:8765)

如需在 Hermes 中使用,请添加到 config.yaml:

mcp_servers:
  crawl:
    command: "/path/to/crawl/.venv/bin/python"
    args: ["/path/to/crawl/scripts/mcp_crawl_server.py"]
    timeout: 90
    connect_timeout: 60
4b. Firecrawl 兼容的 /scrape 端点

已经在使用 Firecrawl 的 Python SDK?将其指向 CrawlEyes,即可继续使用现有代码:

.venv/bin/python -m crawleyes.firecrawl_api --port 8899 --host 127.0.0.1
#   POST /v2/scrape  →  { success, data: { markdown, metadata } }
#   GET  /healthz    →  health check
from firecrawl import Firecrawl
fc = Firecrawl(api_url="http://127.0.0.1:8899", api_key="ignored")
doc = fc.scrape(url="https://example.com")   # → { markdown, metadata }

这是 Firecrawl API 的实用子集:由 CrawlEyes 自有的提取引擎提供核心 /scrape 契约(success + data.markdown + data.metadata)。它不实现 Firecrawl 的异步 /crawl 队列、/search 或 /map;设计理由请参阅设计说明。

5. 安装搜索插件(Hermes)

将 plugins/searxng-tavily/ 复制到 Hermes 插件目录,然后运行:

hermes plugins enable web/searxng-tavily
hermes config set web.search_backend searxng-tavily

在 Hermes 配置文件的 .env 中设置 SEARXNG_URL,使其指向你的 SearXNG 实例。如果未设置或无法访问,提供程序会自动回退到无需密钥的 Tavily API(不需要 API 密钥)。

注意:该插件仅对新启动的 Agent 会话生效。

6. 验证
# Requires the Hermes source tree + its venv
venv/bin/python scripts/verify_searxng_tavily.py $HERMES_HOME
venv/bin/python scripts/agent_link_check.py $HERMES_HOME

设计说明

  • 分层组合:没有单一工具能满足所有需求。Crawl4AI 负责提取;SearXNG + Tavily 负责搜索;每一层都有经过测试的回退方案。
  • 无需密钥的 Tavily 无需配置或账户即可使用,为整个搜索流程提供低成本的韧性保障。
  • 断路器仅适用于 SearXNG:Tavily 回退成功不会重置断路器(否则断路器永远不会触发)。只有 SearXNG 自身成功时才会调用 record_success()。
  • 共享 SQLite 缓存位于实际用户主目录中(通过 pwd.getpwuid 获取,而非 $HOME——Hermes 配置文件会覆盖它),因此所有配置文件共用一个缓存。WAL + 5s 超时 + try/except 可在并发情况下退化为不使用缓存。
  • 语义重排成本低:fastembed(ONNX)避免了约 2GB 的 torch 依赖;模型缓存后只需约 0.6s 即可加载,生成嵌入约需 50ms。
  • MCP 服务独立运行:它不会导入 Hermes 内部模块,因此可在任何 Python 3.12 环境中运行,并为任何 MCP 客户端提供服务。
  • MCP 传输支持双模式:stdio(默认,适用于标准 MCP 客户端)或 streamable-http(--transport http),因此同一套代码既可服务本地进程,也可服务远程 HTTP 客户端。
  • 统一限流采用分层设计:MCP 工具和深度研究内部的搜索/提取共用一个滑动窗口限流器(按工具计费),因此即使在多轮深度研究中,并发 Agent 扇出也无法对 SearXNG/Tavily/Crawl4AI 造成过大压力。

致谢与灵感来源

本项目基于一系列优秀的开源工具构建。此处所有代码均为独立实现(未复制代码),但构想和接口借鉴了以下项目——谨向其作者致以诚挚谢意:

本仓库中的功能灵感来源许可证
提取引擎(Crawl4AI 封装)Crawl4AI — 直接依赖Apache-2.0
内容降噪(P1)Readability、GeneralNewsExtractor(构想)Apache-2.0 / MIT
语义重排(P2)Vane、Perplexica(构想)MIT / MIT
带退避的重试(P3)Crawlee(构想)Apache-2.0
浏览器会话复用(P4)camoufox(构想)MIT
MCP 服务(P5)playwright-mcp、exa-mcp-server(构想)Apache-2.0 / MIT
搜索编排 / 回退SearXNG — 可自托管(官方 Docker 镜像,未修改源代码),仅通过 HTTP API 访问 · Tavily keylessAGPL-3.0(服务端软件,未链接 / 嵌入)/ 专有 API

设计独立性:此处的实现均从零开始编写——我们研究了上述项目的方法(降噪阈值、重排流程、退避策略、MCP 工具模式),但没有复制其源代码。依赖项已在 requirements.txt 中声明。如果您认为有遗漏或不正确的署名,请提交 issue。

合规性

CrawlEyes 是一款用于合法研究和个人用途的通用抓取工具包。它有意不包含代理池、指纹轮换或 CAPTCHA 求解(规避反爬措施)功能——这些不在项目范围内。

Robots.txt 默认不启用:将 respect_robots=True 传给 extract / markdown(或在 CLI 中使用 --respect-robots),即可检查每个目标站点的 robots.txt(RFC 9309),并拒绝访问其中明确禁止的 URL。默认关闭是为了避免激进或有误的 robots 规则在用户不知情的情况下阻止合法抓取——是否合规由调用者根据具体用途自行判断。大规模抓取前,请务必查看各网站的服务条款。

许可证

MIT — 参见 LICENSE。


📮 关注我们

公众号:AI Aperture —— 分享 AI 工程实践、多 Agent 系统与开源项目经验。

AI Aperture 公众号二维码

扫码关注,获取项目更新与更多技术内容。

评论

支持 Markdown

第一次接触 MCP?

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

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