MCP搜索和浏览(SearXNG+Craw4AI)
模型上下文协议(MCP)服务器,允许LLM客户端:
- 网络搜索(通过SearXNG)
- 打开页面并检索干净的内容(通过Crawl4ai,在Markdown中)
此文件夹仅用于Docker执行。
建筑
Client LLM (Claude / agent / etc.)
|
| MCP (SSE)
v
mcp-browser (FastMCP) :8003
- tool: search
- tool: open
- tool: find
|
| recherche -> searxng (interne)
| fetch -> crawl4ai (interne)
v
SearXNG + Crawl4AI + Redis
Optionnel (secondaire / fallback):
mcpo (proxy MCP) :8004 -> http://mcp-browser:8003/sse服务Docker
定义于 docker-compose.yml :
mcp-browser:MCP服务器(公开)8003:8003)searxng:元搜索引擎(默认情况下未发布端口)crawl4ai:Chromium无头抓取服务(默认情况下未发布端口)redis:缓存/依赖关系crawl4aimcpo:代理MCP(暴露8004:8004) — 二级服务/回退
注意:SearXNG和Crawl4AI只能通过Docker网络访问 search-net (除非您发布了它们的端口)。
先决条件
- Docker+Docker组合
快速启动(Docker)
从该文件:
docker compose up -d --build要停止:
docker compose down配置(.env)
- 复制模板:
cp .env.example .env- 编辑
.env(最低限度:秘密SearXNG)。
堆栈使用的典型变量:
SEARXNG_SECRET:SearXNG要求SEARXNG_URL_EXT:使用的内部URLmcp-browser(默认http://searxng:8080)CRAWL4AI_URL_EXT:使用的内部URLmcp-browser(默认http://crawl4ai:8002)CRAWL4AI_API_TOKEN:可选(如果您正在保护Crawl4ai)MCP_BROWSER_PORT:MCP服务器端口(默认)8003)PROXY_URL:可选(Crawl4AI侧Chromium的代理)
端点
主端点(推荐)
- MCP SSE:
http://localhost:8003/sse
二级/回退端点(MCPO)
- 代理MCP:
http://localhost:8004
mcpo lance un代理 http://mcp-browser:8003/sse如果您更喜欢插入包装器/代理(例如,对于某些环境),则非常有用。
展出的MCP工具
服务器 mcp-browser 暴露:
search(query, topn=10, source=None):使用SearXng JSON API进行搜索open(id, cursor, loc, num_lines, view_source=False, source=None):打开URL或结果并返回可读内容(Markdown优先)find(pattern, cursor=-1):在当前页面中精确搜索模式
故障排除(未暴露端口)
默认情况下, searxng 和 crawl4ai 不要将其端口发布到 localhost.
- 要从您的机器访问SearXNG UI,请取消注释
portsdu服务searxng在docker-compose.yml. - 要从您的机器调用Crawl4AI API,请取消注释
portsdu服务crawl4ai.
安全说明
- 永远不要承诺
.env - 避免在没有身份验证和网络过滤的情况下在互联网上暴露SearXNG/Crawl4AI
野心与开发:MCP搜索与浏览(SearXNG+Craw4AI)——自托管
服务器 主控程序 代理/LLM的(模型上下文协议),基于“简单浏览器”(GPT-OSS风格)并呈现 可独立主机 通过:
- SearXNG :重新搜索网页(元搜索)
- Crawl4AI :获取/抓取无头(Chromium)+提取 AI就绪 (降价)
- MCP服务器 :暴露des工具“类似浏览器”(
search,open,find)可立即由代理使用
目标:提供砖块 *网络搜索+内容提取* 对于自托管LLM平台(代理、RAG、深度研究),稳定且可预测,同时保持与“简单浏览器”模式的兼容性。
______________________________________________________________________
功能
- 通过SearXNG(JSON API)进行网络搜索
- 通过Crawl4ai打开URL并提取干净内容(优先级Markdown)
- 工具MCP:
search,open,find - 堆栈100%Docker
- 服务 mcpo 包括在 后备方案 (代理MCP),根据集成有用
______________________________________________________________________
架构(概述)
Client LLM (vLLM / agent / etc.)
|
| MCP (SSE)
v
mcp-browser (FastMCP) :8003
- tool: search
- tool: open
- tool: find
|
| search -> searxng (interne docker)
| fetch -> crawl4ai (interne docker)
v
SearXNG + Crawl4AI + Redis
Fallback (secondaire) :
mcpo (proxy MCP) :8004 -> http://mcp-browser:8003/sse______________________________________________________________________
服务Docker
定义于 docker-compose.yml :
mcp-browser:MCP服务器(公开)8003:8003)searxng:聚合搜索引擎(未发布端口 默认情况下)crawl4ai:服务去刮无头铬(未发布端口 默认情况下)redis:缓存/依赖关系crawl4aimcpo:代理MCP(暴露8004:8004) — 二级服务/回退
注意:SearXNG和Crawl4AI仍然可以访问 只有 在Docker网络上 search-net (除非您发布了它们的端口)。
______________________________________________________________________
先决条件
- Docker+Docker组合
______________________________________________________________________
快速启动(仅限Docker)
从该文件:
docker compose up -d --build停止:
docker compose down______________________________________________________________________
配置(.env)
- 创建您的文件
.env:
cp .env.example .env- 编辑
.env.
堆栈使用的典型变量:
SEARXNG_SECRET:SearXNG要求SEARXNG_URL_EXT:使用的内部URLmcp-browser(默认http://searxng:8080)CRAWL4AI_URL_EXT:使用的内部URLmcp-browser(默认http://crawl4ai:8002)CRAWL4AI_API_TOKEN:可选(如果您正在保护Crawl4ai)MCP_BROWSER_PORT:MCP服务器端口(默认)8003)MCP_BROWSER_HOST:侦听主机(默认)0.0.0.0)CORS_ORIGINS:授权来源(缺陷*)PROXY_URL:可选(Chromium/Crawl4AI侧代理)
______________________________________________________________________
端点
主端点(推荐)
- MCP SSE: http://localhost:8003/sse
二级/回退端点(MCPO)
- 代理MCP: http://localhost:8004
mcpo 用作包装器/代理 http://mcp-browser:8003/sse仅当集成需要代理或要隔离访问时使用。
______________________________________________________________________
公开的MCP工具(紧凑型“简单浏览器”)
服务器 mcp-browser 暴露:
search(query, topn=10, source=None)
- 使用SearXNG JSON API进行搜索
open(id, cursor, loc, num_lines, view_source=False, source=None)
- 打开结果(id)或URL(字符串)并返回可读内容 - Markdown优先级(如果需要,回退HTML)
find(pattern, cursor=-1)
- 在当前页面中精确搜索模式
______________________________________________________________________
Connexion客户(即时)
1)VLLM(优先级)-VIA --tool-server ...
您可以将此MCP服务器连接为VLLM的“工具服务器”。
- 推荐端点:
- http://localhost:8003/sse
- 通过mcpo回退:
- http://localhost:8004
示例(根据您的VLLM版本和订单进行调整) serve) :
vllm serve \
--tool-server http://localhost:8003/sse如果您有特定需求(代理/紧凑型),请测试:
vllm serve \
--tool-server http://localhost:8004笔记:
- 根据版本的不同,VLLM可以在工具端等待精确的格式/传输。在这个repo中,暴露的运输是 MCP SSE.
- 如果您给我您的VLLM版本+您使用的确切命令,我可以为您提供最终的“复制粘贴”配置。
______________________________________________________________________
2)OpenWebUI(“当前”支持)
建议:
- 首先尝试直接MCP集成:
http://localhost:8003/sse - 如果遇到困难,请使用回退
mcpo:http://localhost:8004
为什么 mcpo ?
mcpo由OpenWebui提供(图片ghcr.io/open-webui/mcpo)并且经常用作OpenWebUI和MCP服务器之间的适配器/代理。
______________________________________________________________________
3)LibreChat(“当前”支持)
同样的方法:
- 端点MCP负责人:
http://localhost:8003/sse - 后备代理(mcpo):
http://localhost:8004
如果您告诉我您使用的LibreChat集成方法(本机MCP、插件、代理等),我可以指定确切的配置块。
______________________________________________________________________
故障排除
未显示SearXNG/Crawl4AI端口
默认情况下, searxng 和 crawl4ai 不要将其端口发布到 localhost.
- 要从您的机器访问SearXNG UI:
- 取消评论 ports: 在服务中 searxng 度 docker-compose.yml
- 要从您的机器调用Crawl4AI API:
- 取消评论 ports: 在服务中 crawl4ai
日志
crawl4ai通过卷写入日志./logs:/app/logs- 您还可以查看Docker日志:
docker compose logs -f --tail=200______________________________________________________________________
安全说明
- 永远不要承诺
.env - 避免在没有身份验证+网络过滤的情况下通过互联网暴露SearXNG/Crawl4AI/MCP
- 警告SSRF:如果您不设置安全措施,可以使用“获取URL”工具尝试访问内部资源(路线图如下)
______________________________________________________________________
TODO/路线图(提议)
目标:从“最小MCP桥”到 为代理提供可靠的web搜索服务, 不破坏兼容性 search/open/find.
阶段1-固化底座(可靠性)
- \[\]添加工具
health(状态搜索/crawl4ai/redis+延迟) - \[\]规范化错误(代码+可操作消息):
- SEARCH_BACKEND_UNAVAILABLE, FETCH_TIMEOUT, ANTI_BOT_BLOCKED, CONTENT_TOO_LARGE, UNSUPPORTED_MIME_TYPE, EMPTY_RESULT等等。
- \[\]端到端超时cohérents+重试出生
- \[\]日志结构(JSON)+请求id/相关id
第2阶段-研究质量(代理)
- \[\]搜索过滤器:
allowed_domains,blocked_domains,language,freshness_days - \[\]删除/规范化URL(条带跟踪器,不必要的参数)
- \[\]本地重新排序(简单混合评分)以改善结果排序SearXng
第3阶段-内容“LLM就绪”
- \[\]提取模式(
markdown,readable,links_only等等) - \[\]原生块(Rag就绪块)
- \[\]结构化提取(模式/字段),同时保留“类似浏览器”的compat
- \[\]PDF支持(MIME检测+管道提取+块)
第四阶段——生产(自制版)
- \[\]带TTL的智能缓存(搜索+获取+提取)
- \[\]竞争限制/队列(防止代理中断服务)
- \[\]安全:SSRF护栏、允许列表/拒绝列表、尺寸限制
- \[\]可观察性:指标(普罗米修斯)+成功/错误率+延迟
第5阶段-差异化
- \[\]“研究会议”(状态、URL视图、中期摘要)
- \[\]可选RAG连接器(QDRant/PGVector/Weaviate)
- \[\]按网站类型划分的策略(文档/新闻/论坛/pdf优先)
______________________________________________________________________
许可证
麻省理工学院
