返回市场
MCP-搜索引擎

MCP-搜索引擎

作者:erhwenkuo7 星标更新:2025-03-30

项目介绍

【技术文档摘要】:

mcp-searxng

<p align="center"> <a href="./README.md"><img alt="英文文档" src="https://img.shields.io/badge/English-d9d9d9"></a> <a href="./README_TW.md"><img alt="繁體中文文件" src="https://img.shields.io/badge/繁體中文-d9d9d9"></a> </p>

这是一个用于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

运行服务

运行SearXNG服务

首先,在要运行它的机器上安装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

启动MCP-SEARXNG服务

方法1. 使用uv启动:

输入以下命令启动:

$ 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镜像:

$ 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,并执行以下操作:

  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>

启动参数:

参数必需默认值类型描述
--host0.0.0.0字符串绑定的主机
--port5488整数监听的端口
--searxng_urlhttp://localhost:8888字符串要连接的SearXNG URL