元搜索引擎服务

一个基于SearXNG的开源元搜索引擎,允许AI代理通过整合多个搜索引擎结果来搜索外部信息。

  • by erhwenkuo
  • Python
  • 本地部署
  • 11 星标
  • 更新于
在 GitHub 查看 erhwenkuo/mcp-searxng

使用说明

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 在浏览器中执行以下操作:

  1. 选择 SSE 在“传输类型”下拉列表中。
  2. 在URL字段中输入MCP服务器的地址和端口: http://localhost:5488/sse.
  3. 点击 Connect。如果状态显示“已连接”,则表示您已成功连接到MCP服务器。
  4. 单击顶部的“工具”选项卡。
  5. 点击“列出工具”按钮,您应该看到两个工具:
    • web_search
    • web_url_read
  6. 点击 web_search。在右侧,您将看到该工具的描述和参数。在中输入要搜索的关键字 query 输入字段,然后单击“运行工具”按钮。

效果如下图所示:

测试 web_url_read:

  • 点击 web_url_read。在右侧,您将看到该工具的描述和参数。在中输入要检索的网页的URL url 输入字段,然后单击“运行工具”按钮。

为什么使用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实例的任何内容。