当前位置: 首页 > news >正文

给 OpenClaw 装上私有搜索:SearXNG + MCP 替代 Brave API

给 OpenClaw 装上私有搜索:SearXNG + MCP 替代 Brave API

📦 相关仓库

仓库说明地址
searxng-dockerSearXNG 容器 + MCP Servergitee.com/quan-zong/searxng-docker
mcp-searchOpenClaw 插件,注册web_search_mcp工具gitee.com/quan-zong/mcp-search

为什么要做这件事?

OpenClaw 内置的web_search工具走的是 Brave Search API。用起来没问题,但有两个小痛点:

  1. 要钱(或者说要额度)—— API Key 申请麻烦,调用还有次数限制
  2. 不私有—— 你的每一次搜索都经过 Brave 的服务器

所以我和我的 AI 搭档花了几个小时,搓了一套完全开源、完全私有的替代方案。思路很简单:用 SearXNG 这个开源聚合搜索引擎替代 Brave,再通过 MCP 协议对接到 OpenClaw。

零成本、多引擎、数据不出内网。

架构长这样

OpenClaw Agent │ ├── 内置 web_search → Brave API(原来的) │ └── web_search_mcp → MCP Server → SearXNG → 百度/必应/搜狗/GitHub...(现在的)

三层结构,职责清晰:

  • OpenClaw 插件:注册工具,让 Agent 知道有个新搜索可用
  • MCP Server:协议翻译官,把 Agent 的请求转成 SearXNG 能听懂的 HTTP
  • SearXNG:真正的搜索引擎,同时问百度、必应、搜狗,谁有结果用谁的

MCP 是什么?

MCP(Model Context Protocol),模型上下文协议,由 Anthropic(就是做 Claude 那家公司)在 2024 年底推出。说白了就是给 AI Agent 和外部工具/数据源之间定了一套通用接口标准。

为什么需要 MCP?

在 MCP 出现之前,AI 应用想调用外部工具(搜索、数据库、API 等),每个工具都要单独写适配代码。就像手机充电口没统一之前,每家厂商一个接口,线一堆。

MCP 就是那个Type-C—— 统一接口,工具只要按 MCP 协议暴露服务,任何支持 MCP 的 Agent 都能直接用。

MCP 的工作方式

MCP 采用客户端-服务端架构:

┌─────────────┐ ┌─────────────┐ │ MCP Client │◄──SSE──►│ MCP Server │ │ (在Agent里) │ │ (工具侧) │ └─────────────┘ └─────────────┘

传输层:支持两种方式

  • SSE(Server-Sent Events):服务端推送,适合长连接,本项目用的就是这个
  • stdio:标准输入输出,适合本地 CLI 工具

核心能力

  1. 工具发现(list_tools):Client 问 Server「你有哪些工具?」,Server 返回工具列表和参数说明
  2. 工具调用(call_tool):Client 发送工具名和参数,Server 执行并返回结果

本项目中的 MCP

这里要澄清一个关键点:OpenClaw 原生不支持 MCP 协议。它的插件系统提供的是通用的registerTool接口,并不知道 MCP 的存在。

所以我们的插件做了额外的工作——在内部嵌了一个 MCP Client(用@modelcontextprotocol/sdk),通过 SSE 连接 MCP Server,再把 MCP Server 暴露的工具「翻译」成 OpenClaw 能注册的格式:

MCP Server ──SSE/MCP协议──► 插件内 MCP Client ──翻译──► OpenClaw registerTool()

插件本质上是个协议桥接器,让不懂 MCP 的 OpenClaw 也能用上 MCP 生态的工具。

# 暴露一个工具:search@server.list_tools()asyncdeflist_tools():return[Tool(name="search",description="搜索互联网",inputSchema={"query":"string","num_results":"integer"})]# 处理调用@server.call_tool()asyncdefcall_tool(name,arguments):# 把请求转给 SearXNG,返回结果returnawaitsearch_searxng(arguments["query"])

就这么简单。MCP Server 本质上就是个协议翻译器——把 Agent 发来的 MCP 格式请求,翻译成后端服务能懂的语言(HTTP API),再把结果按 MCP 格式返回。

MCP 生态

目前支持 MCP 的 AI 应用越来越多:

  • OpenClaw(本项目)
  • Claude Desktop
  • Cursor
  • Continue
  • 以及其他兼容 MCP 协议的 Agent 框架

这意味着你写一个 MCP Server,所有这些应用都能直接用,一次开发,到处运行。


📋 配置需求

硬件要求

项目最低配置推荐配置
CPU1 核2 核
内存1 GB2 GB

实测 1 核 1G 跑 SearXNG + MCP Server 完全够用,搜索响应也很快。这套东西很轻量,不需要什么大机器。

软件环境

项目要求
OSLinux(Ubuntu/Debian/CentOS 均可)
Docker & Docker ComposeSearXNG 跑在容器里
Python >= 3.10MCP Server 用 Python 写的
Node.js >= 22插件编译需要
OpenClaw >= 2026.3.x插件系统兼容性
pip 依赖mcphttpxstarletteuvicorn
npm 依赖@modelcontextprotocol/sdk@sinclair/typebox

端口占用:

  • 8080— SearXNG Web UI + API
  • 3000— MCP Server SSE 端点

如果这些端口被占了也没关系,后面可以改。

🚀 开搞

第一步:部署 SearXNG + MCP Server

gitclone git@gitee.com:quan-zong/searxng-docker.gitcdsearxng-docker# 装依赖pipinstallmcp httpx starlette uvicorn# 生成 secret_key,把输出填到 settings.yml 里openssl rand-hex32# 一把梭启动chmod+x ctl_mcpsearxng.sh ./ctl_mcpsearxng.sh start

验证一下:

./ctl_mcpsearxng.sh statuscurl-s"http://localhost:8080/search?q=test&format=json"|python3-mjson.tool|head-20

第二步:安装 OpenClaw 插件

gitclone git@gitee.com:quan-zong/mcp-search.git ~/.openclaw/extensions/mcp-searchcd~/.openclaw/extensions/mcp-searchnpminstallnpmrun build

第三步:配置 OpenClaw

编辑~/.openclaw/openclaw.json,加一行:

{"plugins":{"allow":["mcp-search"],"entries":{"mcp-search":{"enabled":true,"config":{"mcpServerUrl":"http://localhost:3000/sse","enabled":true}}}}}

然后重启:

openclaw gateway restart

第四步:收工,试试看

直接和 Agent 对话:

帮我搜一下 OpenAI 最新动态

Agent 会自动调用web_search_mcp,走你自己的 SearXNG 搜索。

🔧 怎么调教

换搜索引擎

SearXNG 默认启用了百度、必应(国内版)、搜狗、Google 等。想加减引擎?编辑settings.yml

engines:-name:baiduengine:baidudisabled:false# true = 关掉-name:duckduckgoengine:duckduckgodisabled:false# 开一个新的

改完docker-compose restart就行。

MCP Server 跑在别的机器上

settings.ymlmcpServerUrl改成对应 IP:

"mcpServerUrl":"http://192.168.1.100:3000/sse"

常用管理命令

./ctl_mcpsearxng.sh start# 全部启动./ctl_mcpsearxng.sh stop# 全部停止./ctl_mcpsearxng.sh restart# 重启./ctl_mcpsearxng.sh logs# 看日志./ctl_mcpsearxng.sh status# 看状态

对比一下

Brave APISearXNG + MCP
💰 费用API Key + 额度免费
🔒 隐私经过第三方内网闭环
🔍 搜索源Brave百度 + 必应 + 搜狗 + …
⚙️ 可控性人家说了算你说了算
🏗️ 部署开箱即用多一个 Docker 容器

说白了就是用一点点部署成本,换来了免费、私有、多引擎。我觉得值。



整个过程我和 AI 搭档从零到上线大概花了半天时间,代码已经开源,欢迎折腾。

http://www.jsqmd.com/news/475508/

相关文章:

  • 大专商务数据分析与应用专业考哪些证书比较好找工作?
  • 看不懂,第一次发布
  • OOMKilled、CrashLoopBackOff、ImagePullBackOff 原因
  • 计算机毕业设计springboot基于java的音乐网站设计与实现 基于SpringBoot的在线音乐流媒体播放平台开发 高校校园音乐分享与歌单管理系统的设计与实现
  • 人工智能求职指南(职业规划)
  • JeechBoot前端设置表格内自定义元素
  • 无线模块ESD整改与抗干扰设计:提升连接可靠性的关键
  • 赶考状元AI学伴适合高三复习用吗?——AI与真人辅导的黄金组合深度解析
  • 用 uni-app x 重构我们的 App:一套代码跑通 iOS、Android、鸿蒙!人力成本直降 60%
  • iwebsec通关笔记-xxe篇
  • AI用在食品安全上,更能体现技术价值
  • 数据赋能!让城市治理有了 “数字大脑”
  • OpenClawCn保姆级教程-Deepseek(Linux- Ubantu)
  • 2026年B2B企业做GEO前必须想清楚的10个问题(AI搜索时代企业必读)
  • 2026年存储市场核心数据与趋势分析
  • Redis面试题 02
  • 省下一周整理时间!百考通AI智能聚类文献,告别碎片化罗列
  • Skills+CoT双核心技术:大模型从“会生成”到“会思考”的关键密码
  • CTF开源情报获取方法(以探姬去哪了?_1为例)
  • [Java]RuoYi帝可得-3工单管理
  • 高并发定时任务调度系统
  • 家用除螨仪真的有效果吗?除螨仪哪家好排名第一的?良心推荐央视公认十大除螨仪品牌,抄作业篇!
  • 学习网络安全第四天
  • 如何快速识别B站评论区用户背景:智能成分检测工具全解析
  • Android16 第三方应用里面启动service不断循环读写被系统冻结
  • 删除pdf扫描件里的空白页
  • 无水印在线图片合成GIF:快速生成高清gif图片
  • 突破音乐加密限制:Unlock Music工具的全方位解密解决方案
  • OpenClaw大虾 | 极速安装,踩坑教程
  • AR/VR显示器市场前瞻:426.1亿到971.2亿的显示革命