mcpField
M
mcp-searxng

mcp-searxng

本地服务
github.com/erhwenkuo搜索与检索1128 周前更新

关于 mcp-searxng

mcp-searxng 将 SearXNG 元搜索与网页转 Markdown 结合,为 AI Agent 提供外部信息搜索和网页读取能力。项目展示了基于 SSE 的 MCP 服务部署与连接方式。

主要功能

  1. 01通过 SearXNG 搜索网页
  2. 02读取网页并提取 Markdown
  3. 03提供 SSE 连接方式
  4. 04可用 Docker Compose 启动服务

适用场景

  1. 01搜索外部网站中的新信息
  2. 02获取网页内容供 Agent 使用
  3. 03将 MCP 服务与客户端分开部署

MCP 相关

这是基于 SSE 的 MCP 服务,向客户端提供 `web_search` 和 `web_url_read` 工具,用于搜索网页及读取网页内容。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"searxng-erhwenkuo": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"compose"
]
}
}
}
启动命令docker run -i --rm compose

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocicompose

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

README 配图

mcp-searxng

英文版 README 繁體中文文件

这是一个供 AI Agent 使用的 MCP 服务示例,旨在通过 SearXNG 的开源元搜索引擎,让 AI Agent 搜索新的外部信息。

目前,市场上涌现了许多 Google 之外的搜索引擎,试图在 Google 表现不足的领域抢占市场份额。例如,DuckDuckGo 强调不追踪用户,Ecosia 会在每次搜索后种树,而 Brave Search 则旨在通过集体努力构建一个免费的搜索引擎。

然而,这些引擎返回的结果往往不尽如人意。首先,它们抓取的网页数量不及 Google;其次,它们对中文的支持较差。虽然它们能访问一些 Google 不会显示的有趣网页,但 Google 之外的搜索引擎仍然很难用。

那么,何不将多个搜索引擎的结果合并起来!?这正是元搜索引擎的作用。SearXNG 是一款开源元搜索引擎软件,可自托管,也可通过热心社区成员提供的网站使用。对于企业而言,SearXNG 提供了一种兼顾隐私与安全控制的方式,同时让 AI Agent 能够有效搜索所需的外部数据。

参考资料:

用途

此 MCP 服务演示了基于 SSE 的 MCP 服务(集成 SearXNG 和 Microsoft 的 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 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

现在两个服务均已运行:

  • SearXNG:可通过 http://localhost:8888 访问
  • MCP-SEARXNG:可通过 http://localhost:5488 访问

停止服务:

$ docker compose down
运行 SearXNG 服务

首先,在要运行服务的机器上安装 Docker 并完成相关配置。详细信息请参阅:在 Ubuntu 上安装 Docker Engine

项目目录中提供了预配置的简易 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 启动的,因此配置与 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:

# 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 Inspector:

$ 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. 在 Transport Type 下拉菜单中选择 SSE。
  2. 在 URL 字段中输入 MCP 服务的地址和端口:http://localhost:5488/sse。
  3. 点击 Connect。如果状态显示为 “Connected”,则表示已成功连接到 MCP 服务。
  4. 点击顶部的 “Tools” 选项卡。
  5. 点击 “List Tools” 按钮,你应该会看到两个工具:
    • web_search
    • web_url_read
  6. 点击 web_search。右侧会显示该工具的描述和参数。在 query 输入字段中输入要搜索的关键词,然后点击 “Run Tool” 按钮。

效果如下图所示:

README 配图

测试 web_url_read:

  • 点击 web_url_read。右侧会显示该工具的描述和参数。在 url 输入字段中输入要获取的网页 URL,然后点击 “Run Tool” 按钮。

README 配图

为什么使用 SSE

这意味着 MCP 服务可以是一个远程运行的进程,而 AI Agent(客户端)可以随时随地连接、使用并断开连接。换句话说,基于 SSE 的服务端和客户端可以是相互解耦的进程(甚至可能运行在相互独立的节点上)。

这与基于 STDIO 的模型不同;在该模型中,客户端会将服务端作为子进程启动。SSE 更适用于“云原生”用例。

MCP 服务端

server.py 是一个基于 SSE 的 MCP 服务。默认情况下,服务在 0.0.0.0:5488 上运行,但可以使用命令行参数进行配置,例如:

uv run server.py --host <your host> --port <your port>

启动参数:

参数必需默认值类型描述
--host否0.0.0.0str要绑定的主机
--port否5488int要监听的端口
--searxng_url否http://localhost:8888str要连接的 SearXNG URL

要将其添加到任意 MCP 配置文件中,请使用以下内容:

{
  "mcpServers": {
    "searxng": {
      "url": "http://localhost:5488/sse"
    }
  }
}

将 localhost:5488 替换为包含你的 mcp-searxng 实例的地址。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。