使用说明
mcp searxng
一个供AI代理使用的MCP服务器示例,旨在允许AI代理通过SearXNG的开源元搜索引擎搜索新的外部信息。
目前,市场上出现了许多谷歌以外的搜索引擎,试图在谷歌不足的领域抢占市场份额。例如,DuckDuckGo强调不跟踪用户,Ecosia在每次搜索中都种树,Brave search旨在利用集体努力构建一个免费的搜索引擎。
然而,这些引擎返回的结果往往不令人满意。首先,它们抓取的网页不像谷歌那么多;其次,他们对中国人的支持很差。尽管他们可以访问一些谷歌没有显示的有趣页面,但谷歌以外的搜索引擎仍然很难使用。
那么,为什么不把多个搜索引擎的结果结合起来呢!?这正是元搜索引擎所做的。SearXNG是一款开源元搜索引擎软件,可以自行托管,也可以通过热心的社区成员提供的网站使用。对于企业来说,SearXNG提供了一种维护隐私和安全控制的方法,同时使AI代理能够有效地搜索他们需要的外部数据。
参考文献
目的
此MCP服务器演示了基于SSE的MCP服务器(与SearXNG和微软的markdownify集成,将网页提取为Markdown格式的文本)及其使用 MCP检查员 (MCP客户端)。
运行时环境
此项目使用 紫外线 管理依赖关系和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 Compose运行这两个服务
为了简化设置,您可以使用根级别 docker-compose.yaml 文件来同时运行SearXNG服务和MCP-SearXNG服务。此方法自动处理两个服务之间的网络配置。这是设置mcp-searxng的最快方法。
首先,确保您位于项目根目录中:
$ cd /path/to/mcp-searxng
然后,使用Docker Compose构建并启动这两个服务:
$ docker compose build
$ docker compose up -d
检查正在运行的容器的状态:
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mcp-searxng mcp-searxng-mcp "uv run server.py" mcp About a minute ago Up 50 seconds 0.0.0.0:5488->5488/tcp, [::]:5488->5488/tcp
searxng docker.io/searxng/searxng:latest "/usr/local/searxng/…" searxng About an hour ago Up 11 minutes 0.0.0.0:8888->8080/tcp, [::]:8888->8080/tcp
这两个服务现在都在运行:
- 瑟克斯NG:可在以下网址访问
http://localhost:8888 - MCP-searchng:可在以下网址访问
http://localhost:5488
要停止服务,请执行以下操作:
$ docker compose down
运行SearXNG服务
首先,在运行Docker的机器上安装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 minutes ago Up 29 minutes (healthy) 0.0.0.0:8888->8080
测试SearXNG服务被映射到本地机器的 port: 8888.
启动MCP-SEARXNG服务
方法1。使用uv启动:
输入以下命令以启动:
$ uv run server.py --searxng_url="http://localhost:8888"
INFO: Started server process [219904]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:5488 (Press CTRL+C to quit)
使用Docker开始
首先,构建Docker镜像:
$ docker build -t mcp-searxng .
启动mcp searxng。由于mcp-searxng服务是使用Docker启动的,因此您无法使用 localhost 在配置与SearXNG的连接时,指向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:
# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
# In lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"
# Download and install Node.js:
nvm install 22
# Verify the Node.js version:
node -v # Should print "v22.14.0".
nvm current # Should print "v22.14.0".
# Verify npm version:
npm -v # Should print "10.9.2".
接下来,启动 MCP检查员:
$ npx @modelcontextprotocol/inspector
Starting MCP inspector...
Proxy server listening on port 3000
🔍 MCP Inspector is up and running at http://localhost:5173 🚀
打开 http://localhost:5173 在浏览器中执行以下操作:
- 选择
SSE在“传输类型”下拉列表中。 - 在URL字段中输入MCP服务器的地址和端口:
http://localhost:5488/sse. - 点击
Connect。如果状态显示“已连接”,则表示您已成功连接到MCP服务器。 - 单击顶部的“工具”选项卡。
- 点击“列出工具”按钮,您应该看到两个工具:
web_searchweb_url_read
- 点击
web_search。在右侧,您将看到该工具的描述和参数。在中输入要搜索的关键字query输入字段,然后单击“运行工具”按钮。
效果如下图所示:
测试 web_url_read:
- 点击
web_url_read。在右侧,您将看到该工具的描述和参数。在中输入要检索的网页的URLurl输入字段,然后单击“运行工具”按钮。
为什么使用SSE
这意味着MCP服务器可以是远程运行的进程,AI代理(客户端)可以随时随地连接、使用和断开与它的连接。换句话说,基于SSE的服务器和客户端可以是解耦的进程(甚至可能在解耦的节点上)。
与基于STDIO的模型相比,客户端将服务器作为子流程生成,这是不同的,更适合“云原生”用例。
MCP服务器
server.py 是基于SSE的MCP服务器。默认情况下,服务器运行在 0.0.0.0:5488,但可以使用命令行参数进行配置,例如:
uv run server.py --host <your host> --port <your port>
启动参数:
| 参数 | 必填 | 默认 | 类型 | 说明 |
|---|---|---|---|---|
--host |
没有 | 0.0.0.0 |
str | 要绑定的主机 |
--port |
没有 | 5488 |
int | 要监听的端口 |
--searxng_url |
没有 | http://localhost:8888 |
str | 要连接的SearXNG URL |
要将其添加到任何MCP配置文件中,请使用以下命令:
{
"mcpServers": {
"searxng": {
"url": "http://localhost:5488/sse"
}
}
}
替换 localhost:5488 指向包含mcp searxng实例的任何内容。