【技术文档摘要】:

这是一个用于AI代理的MCP服务器示例,旨在通过SearXNG开源元搜索引擎让AI代理搜索新的外部信息。
目前,市场上出现了许多除了Google之外的搜索引擎,试图在Google表现不佳的领域抢占市场份额。例如,DuckDuckGo强调不追踪用户,Ecosia每进行一次搜索就会种植一棵树,而Brave Search则旨在利用集体力量构建一个免费的搜索引擎。
然而,这些引擎返回的结果往往不尽如人意。首先,它们爬取的网页数量不如Google多;其次,它们对中文的支持较差。虽然它们可以访问一些Google不显示的有趣页面,但除了Google之外的搜索引擎仍然很难使用。
那么为什么不把多个搜索引擎的结果结合起来呢?这就是元搜索引擎的作用。SearXNG是一款开源元搜索引擎软件,可以自行托管或通过社区成员提供的网站使用。对于企业来说,SearXNG提供了一种在维护隐私和安全控制的同时,使AI代理能够有效地搜索所需外部数据的方法。
参考资料:
此MCP服务器演示了一个基于SSE的MCP服务器(集成SearXNG和微软的markdownify以将网页提取为Markdown格式文本)及其使用MCP Inspector(MCP客户端)的操作模式。
该项目使用uv管理依赖项和Python运行时环境。如果尚未安装uv,请按照官方网站上的安装说明进行操作。
以下命令是在Ubuntu 24.04环境中执行的。对于其他操作系统,请相应调整:
$ curl -LsSf https://astral.sh/uv/install.sh | sh
下载源代码:
$ git clone https://github.com/erhwenkuo/mcp-searxng.git
$ cd mcp-searxng
$ uv sync
首先,在要运行它的机器上安装Docker并进行相关配置。有关详细信息,请参阅:在Ubuntu上安装Docker引擎
项目目录中有一个预配置的简单SearXNG设置,便于测试。
mcp-searxng/searxng-docker/
├── docker-compose.yaml
└── searxng
├── settings.yml
└── uwsgi.ini
切换到searxng-docker目录,并使用Docker Compose启动SearXNG服务:
$ cd searxng-docker
$ docker compose up -d
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
searxng docker.io/searxng/searxng:latest "/sbin/tini -- /usr/…" searxng 29分钟前 Up 29分钟 (健康) 0.0.0.0:8888->8080
测试SearXNG服务映射到本地机器的端口: 8888。
输入以下命令启动:
$ uv run server.py --searxng_url="http://localhost:8888"
INFO: 已启动服务器进程 [219904]
INFO: 正在等待应用程序启动。
INFO: 应用程序启动完成。
INFO: Uvicorn正在运行于 http://0.0.0.0:5488 (按CTRL+C退出)
首先,构建Docker镜像:
$ docker build -t mcp-searxng .
启动mcp-searxng。由于是使用Docker启动mcp-searxng服务,因此在配置连接到SearXNG时不能使用localhost指向SearXNG服务地址。建议直接查询本地机器的IP地址,然后使用SEARXNG_URL环境变量进行配置。
以下启动参数假设本地机器的IP地址为192.168.54.88:
$ docker run -d -e SEARXNG_URL="http://192.168.54.88:8888" -p 5488:5488 mcp-searxng
首先,安装Node.js:
# 下载并安装nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
# 代替重启shell
\. "$HOME/.nvm/nvm.sh"
# 下载并安装Node.js:
nvm install 22
# 验证Node.js版本:
node -v # 应该打印 "v22.14.0"。
nvm current # 应该打印 "v22.14.0"。
# 验证npm版本:
npm -v # 应该打印 "10.9.2"。
接下来,启动MCP Inspector:
$ npx @modelcontextprotocol/inspector
正在启动MCP inspector...
代理服务器正在监听端口3000
🔍 MCP Inspector已在 http://localhost:5173 运行 🚀
在浏览器中打开http://localhost:5173,并执行以下操作:
SSE。http://localhost:5488/sse。Connect。如果状态显示“已连接”,则表示您已成功连接到MCP服务器。web_searchweb_url_readweb_search。右侧会显示工具的描述和参数。在query输入字段中输入您想要搜索的关键字,然后点击“运行工具”按钮。效果如下图所示:

测试web_url_read:
web_url_read。右侧会显示工具的描述和参数。在url输入字段中输入您想要检索的网页URL,然后点击“运行工具”按钮。
这意味着MCP服务器可以是一个远程运行的过程,而AI代理(客户端)可以在任何时间、任何地点连接、使用并断开与它的连接。换句话说,基于SSE的服务器和客户端可以是解耦的过程(甚至可能在解耦的节点上)。
与基于STDIO的模型不同,其中客户端作为子进程启动服务器,这有所不同且更适合“云原生”用例。
server.py是一个基于SSE的MCP服务器。默认情况下,服务器运行在0.0.0.0:5488,但可以通过命令行参数进行配置,例如:
uv run server.py --host <your host> --port <your port>
启动参数:
| 参数 | 必需 | 默认值 | 类型 | 描述 |
|---|---|---|---|---|
--host | 否 | 0.0.0.0 | 字符串 | 绑定的主机 |
--port | 否 | 5488 | 整数 | 监听的端口 |
--searxng_url | 否 | http://localhost:8888 | 字符串 | 要连接的SearXNG URL |