你是否希望拥有一个完全自主可控的搜索引擎,不依赖任何商业API,并且能够绕过Cloudflare防护,爬取需要JavaScript渲染的网站?如果这一切还能与你的AI助手无缝集成,让AI帮你进行搜索,是不是听起来像一个理想的自托方案?这正是WebSearch-MCP为你带来的可能性。
WebSearch-MCP是一个模型上下文协议服务器,它集成了一个自托管的网络爬虫服务,为AI助手提供真正的网络搜索能力。与其他依赖商业API(如Google、Bing)的方案不同,这个项目让你完全控制搜索过程,从爬虫到结果呈现,全部可以在你自己的基础设施上运行。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | WebSearch-MCP |
| GitHub地址 | https://github.com/mnhlt/WebSearch-MCP |
| 项目描述 | [Self-hosted] A Model Context Protocol (MCP) server implementation that provides a web search capability over stdio transport. This server integrates with a WebSearch Crawler API to retrieve search results. |
| 作者 | mnhlt |
| 开源协议 | ISC License |
| 开源状态 | 公开状态 |
| Languages | TypeScript, JavaScript |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2026-04-27 |
一、项目介绍
WebSearch-MCP是一个架构清晰的MCP服务器。它由两部分组成:一个MCP服务器本体和一个独立的爬虫服务。MCP服务器负责与AI客户端通信,并将搜索请求转发给爬虫服务;爬虫服务则真正执行网络搜索,抓取结果并返回。
爬虫服务通过Docker Compose部署,它包含两个核心容器:websearch-crawler和flaresolverr。websearch-crawler是主要的爬虫引擎,负责接收搜索请求、访问搜索引擎并解析结果。flaresolverr则是一个强大的工具,专门用于绕过Cloudflare等反爬机制,并能执行JavaScript以渲染动态网页。两者配合,使得这个爬虫能够访问很多普通爬虫无法触及的网站。
该项目提供的web_search工具拥有丰富的参数。你可以指定搜索关键词、结果数量、语言、地区,还可以通过excludeDomains和includeDomains精细控制搜索的网站范围,或者通过excludeTerms过滤掉包含特定词语的结果。resultType参数还允许你限定搜索结果为新闻或博客。
二、核心优势
完全自托管,数据自主可控:这是该项目最核心的价值。你不需要将任何搜索查询发送给第三方API提供商(如Google、Bing、Serper)。整个搜索流程都在你自己的服务器上运行。这对于注重数据隐私、需要遵守严格数据合规性要求的组织或个人来说,是至关重要的特性。
绕过Cloudflare,访问更多网站:许多搜索引擎和网站都使用Cloudflare等防护措施,这导致普通的爬虫或简单的HTTP请求无法获取内容。该项目集成的FlareSolverr服务能够模拟真实浏览器行为,成功绕过这些防护,获取其他服务可能无法访问的搜索结果。
成本可控,尤其适合大规模使用:对于需要大量搜索查询的场景,使用商业API会产生不菲的费用。而自托管的爬虫服务的成本主要是运行Docker容器的服务器资源,没有按查询次数的计费。一旦你部署好服务,就可以几乎无限制地使用(受限于服务器性能和目标网站的速率限制)。
丰富的过滤和定向能力:通过includeDomains和excludeDomains,你可以将搜索范围限定在特定网站(如site:github.com的替代方案),或者排除低质量的站点。excludeTerms参数能帮助你过滤掉包含特定广告或关键词的结果,获得更干净的搜索体验。
三、适用场景
场景一:对隐私要求极高的研究。如果你是一名记者或研究人员,不希望自己的搜索行为被任何商业公司记录和分析。通过自托管的WebSearch-MCP,你可以完全掌控所有查询日志(或不记录),实现真正的匿名搜索。
场景二:大规模、自动化数据采集。如果你需要定期执行成千上万次搜索以获取市场情报或进行趋势分析,使用商业API将非常昂贵。你可以搭建一个WebSearch-MCP服务,以固定的基础设施成本承担任意数量的搜索。
场景三:集成到私有AI应用。你正在构建一个私有的、内部使用的AI助手,不希望它的任何依赖是外部API。你可以将WebSearch-MCP作为这个AI的搜索后端,整个系统完全闭环运行,消除对外部服务的网络依赖和合规风险。
场景四:访问反爬严格的目标网站。某些特定领域的网站或搜索引擎对爬虫非常不友好,普通方法无法获取结果。由于WebSearch-MCP使用了FlareSolverr,它能够成功访问这些受保护的站点,为你的AI提供其他工具无法获取的信息。
场景五:学习搜索引擎工作原理。开发者可以通过研究这个项目,了解一个完整的“爬虫+防护绕过+搜索API+MCP集成”的现代搜索系统是如何构建的。它是一个很好的教学范例。
四、安装教程
WebSearch-MCP的安装分为两步:启动爬虫服务,然后配置MCP客户端。
第一部分:启动爬虫服务(使用Docker Compose)
前置条件:确保你的系统已安装Docker和Docker Compose。
- 创建一个目录(例如
websearch-crawler),在其中新建一个文件名为docker-compose.yml。将以下内容复制进去:
version: '3.8'
services:
crawler:
image: laituanmanh/websearch-crawler:latest
container_name: websearch-api
restart: unless-stopped
ports:
- "3001:3001"
environment:
- NODE_ENV=production
- PORT=3001
- LOG_LEVEL=info
- FLARESOLVERR_URL=http://flaresolverr:8191/v1
depends_on:
- flaresolverr
volumes:
- crawler_storage:/app/storage
flaresolverr:
image: 21hsmw/flaresolverr:nodriver
container_name: flaresolverr
restart: unless-stopped
environment:
- LOG_LEVEL=info
- TZ=UTC
volumes:
crawler_storage:对于Mac Apple Silicon用户:你需要在crawler服务中添加platform: "linux/amd64",并在flaresolverr服务中添加platform: "linux/arm64"。完整的配置请参考项目README。
- 在终端中,导航到
docker-compose.yml文件所在的目录,运行以下命令启动服务:
docker-compose up -d- 验证服务是否成功启动:
curl http://localhost:3001/health如果返回{"status":"ok", ...},说明爬虫服务已经准备就绪。
第二部分:配置MCP客户端
爬虫服务运行后,你需要配置MCP客户端(如Claude Desktop)来连接它。
找到MCP客户端的配置文件,以Claude Desktop为例:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
使用文本编辑器打开该文件,添加以下配置:
{
"mcpServers": {
"websearch": {
"command": "npx",
"args": ["websearch-mcp"],
"env": {
"API_URL": "http://localhost:3001",
"MAX_SEARCH_RESULT": "5"
}
}
}
}API_URL需要指向你刚刚启动的爬虫服务的地址。MAX_SEARCH_RESULT是默认返回的结果数量。
对于Windows用户,如果直接运行遇到问题,可以尝试用cmd包装:
{
"mcpServers": {
"websearch": {
"command": "cmd",
"args": ["/c", "npx", "websearch-mcp"],
"env": {
"API_URL": "http://localhost:3001",
"MAX_SEARCH_RESULT": "5"
}
}
}
}第三部分:重启并验证
保存配置文件,完全退出MCP客户端并重新启动。在新的对话中,尝试提问:“请帮我搜索一下‘2026年世界杯’的相关信息。”
如果一切配置正确,AI会调用web_search工具,并返回从你的自托管爬虫服务中获取的搜索结果。
五、使用示例
配置完成后,你就可以利用完全自主可控的搜索引擎了。
示例一:基础搜索
你问:“搜索‘量子计算最新进展’。”
AI会调用web_search工具,使用默认参数。
示例二:限定域名搜索
你问:“搜索‘Python async/await教程’,只来自realpython.com。”
AI会设置includeDomains: ["realpython.com"]。
示例三:排除特定域名和关键词
你问:“搜索‘机器学习’,排除pinterest.com,同时排除标题中包含‘2020’的结果。”
AI会设置excludeDomains: ["pinterest.com"]、excludeTerms: ["2020"]。
示例四:搜索新闻
你问:“搜索‘Apple发布会’,结果类型限定为新闻。”
AI会设置resultType: "news"。
示例五:多参数组合搜索
你问:“搜索关于‘Rust语言2026特性’的博客文章,用英文,返回10条结果。”
AI会设置query: "Rust lang 2026 features"、resultType: "blogs"、language: "en"、numResults: 10。
六、常见问题
问题一:首次启动后,搜索返回错误或超时。
解决方案:爬虫服务(尤其是FlareSolverr)首次启动时需要下载浏览器组件,可能需要几分钟时间。你可以通过docker-compose logs crawler和docker-compose logs flaresolverr查看日志。看到类似“Browser started”或“Ready”的信息后,服务才完全就绪。
问题二:搜索某些关键词时返回空结果。
解决方案:这可能有几个原因。首先,检查爬虫服务是否正常运行(/health端点)。其次,某些搜索引擎(尤其是谷歌)可能会对来自数据中心IP的请求进行验证或拦截,导致返回空结果。你可以尝试在docker-compose.yml中修改爬虫使用的搜索引擎配置(如果支持)。此外,过于苛刻的速率限制也可能导致临时封禁。
问题三:MAX_SEARCH_RESULT设置得太大会导致结果返回很慢。
解决方案:该项目默认最大结果数建议不要设置得太大。因为每次搜索,爬虫都需要等待搜索引擎返回并解析所有结果。设置MAX_SEARCH_RESULT为5-10是比较合理的范围。如果需要更多结果,可以进行多次搜索或调整参数。
问题四:爬虫服务消耗大量CPU或内存。
解决方案:FlareSolverr基于浏览器引擎,确实会消耗较多的系统资源。对于Apple Silicon的Mac,注意配置正确的平台(linux/arm64)以使用原生架构,性能会更好。对于服务器部署,建议至少2GB内存。如果资源紧张,可以考虑降低FlareSolverr的实例数或调低并发。
问题五:我可以在其他城市或使用代理运行爬虫服务吗?
解决方案:完全可以。爬虫服务可以在任何能访问互联网的服务器上运行。你只需要将MCP客户端配置中的API_URL指向该服务器的公网IP或域名即可。这样,即使你的AI客户端在本地,搜索也会通过远端服务器进行,获得不同的搜索视角。
七、总结
WebSearch-MCP是一个为“控制”和“自由”而生的项目。它代表了MCP生态中一个重要的方向:自托管、去中心化、隐私优先。它不依赖任何商业搜索API,提供了完全自主的搜索解决方案。
这个项目的最大亮点在于其自托管特性和强大的反爬能力。通过Docker Compose,你可以在一台服务器上快速搭建起一个生产级的、能绕过Cloudflare的爬虫集群。这对于有隐私合规要求、大规模搜索需求,或需要访问特定受限网站的场景来说,是无可替代的工具。
当然,这种自由也带来了一定的运维责任。你需要管理自己的Docker容器,监控资源消耗,并解决搜索引擎可能出现的反爬挑战。但对于那些愿意为数据主权和技术自由付出这些努力的用户来说,WebSearch-MCP提供的回报是巨大的。
如果你渴望完全掌控你的搜索数据,并且希望AI助手能基于一个自主、强大的搜索引擎进行信息检索,那么WebSearch-MCP值得你投入时间去探索和部署。
This is an enterprise-grade solution for AI-powered search. Complete control, and no per-query fees.
作为一名记者,我会用这个服务器来调查一些敏感话题,没有人知道我搜过什么。
我把这个服务器配置在了家庭实验室里,现在全家人都能用,还没有任何API限额的烦恼。
响应速度取决于服务器性能。在我的VPS上,搜索一次大概需要5-8秒,可以接受。
The health check endpoint is very useful. I integrated it into my monitoring system.