搜索代理服务器

一个与SearXNG集成的MCP服务器实现,为AI代理提供强大且保护隐私的搜索能力。

  • by The-AI-Workshops
  • Python
  • 本地部署
  • 27 星标
  • 更新于
在 GitHub 查看 The-AI-Workshops/searxng-mcp-server

使用说明

SearXNG MCP服务器

模型上下文协议(MCP)服务器的MCP-sse实现与 SearXNG 为AI代理提供强大的、尊重隐私的搜索功能。


概述

该项目演示了如何构建一个MCP服务器,使AI代理能够使用SearXNG实例执行web搜索。它作为一个实用的模板,使用SearXNG作为后端创建自己的MCP服务器。

该实现遵循Anthropic为构建MCP服务器制定的最佳实践,允许与任何兼容MCP的客户端无缝集成。


先决条件

  • Python 3.9+
  • 访问正在运行的SearXNG实例(本地或远程)
  • Docker(可选,用于容器化部署)
  • 紫外线 (可选,用于快速Python依赖管理)
  • 史密瑟里 (可选,用于MCP服务器管理)

SearXNG服务器(必需)

您必须有一个正在运行且可访问的SearXNG服务器。推荐的方式是通过Docker:

docker run -d --name=searxng -p 32768:8080 -v "/root/searxng:/etc/searxng" \
  -e "BASE_URL=http://0.0.0.0:32768/" \
  -e "INSTANCE_NAME=home" \
  --restart always searxng/searxng
  • 这将在端口32768上运行SearXNG,并在 /root/searxng.
  • MCP服务器预计SearXNG将在 http://172.17.0.1:32768 默认情况下(请参见 .env).

安装

使用紫外线

如果没有,请安装uv:

pip install uv

克隆此存储库:

git clone https://github.com/The-AI-Workshops/searxng-mcp-server.git
cd searxng-mcp-server/dev/searXNG-mcp

安装依赖项:

uv pip install -r requirements.txt

创建一个 .env 基于所提供示例的文件:

nano .env
# Edit .env as needed

在中配置环境变量 .env 文件(请参阅配置部分)。


使用Docker(推荐)

构建Docker镜像:

docker build -t mcp/searxng-mcp .

创建一个 .env 归档并配置您的环境变量。


运行Docker镜像:

docker run -d --env-file ./.env -p 32769:32769 mcp/searxng-mcp

使用Smithery

史密瑟里 是一个用于管理AI代理工具和MCP服务器的命令行工具。

如果您没有Smithery,请安装它(有关各种安装方法,请参阅Smithery文档,例如使用pipx):

pipx install smithery

使用Smithery安装SearXNG MCP服务器:

smithery install @The-AI-Workshops/searxng-mcp-server

这将把服务器及其依赖项安装到Smithery管理的专用环境中。

安装后,Smithery将为您提供已安装服务器的路径。您需要导航到此目录进行配置。例如,如果Smithery将工具安装到 ~/.smithery/tools/,路径可能是 ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server.

创建一个 .env 通过复制示例将文件复制到服务器目录中:

# Example:
# cd ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server
cp .env.example .env
nano .env
# Edit .env as needed

在中配置环境变量 .env 文件(请参阅配置部分)。


配置

以下环境变量可以在您的 .env 文件:

变量 描述 示例
SEARXNG_BASE_URL 您的SEARXNG实例的基本URL http://172.17.0.1:32768
HOST 使用SSE传输时要绑定的主机 0.0.0.0
PORT 使用SSE传输时要监听的端口 32769
TRANSPORT 传输协议(sse或stdio) sse

运行服务器

使用紫外线

苏格兰和南方能源公司运输

集 TRANSPORT=sse 在……里面 .env 那么:

uv run dev/searXNG-mcp/server.py

标准运输

使用stdio,MCP客户端本身可以启动MCP服务器,因此此时无需运行任何东西。


使用Docker

苏格兰和南方能源公司运输

docker build -t mcp/searxng-mcp .
docker run --rm -it -p 32769:32769 --env-file dev/searXNG-mcp/.env -v $(pwd)/dev/searXNG-mcp:/app mcp/searxng-mcp
  • 这 -v $(pwd)/dev/searXNG-mcp:/app mount允许您实时编辑主机上的代码和.env文件,并将更改反映在正在运行的容器中。
  • 服务器将在以下时间可用 http://localhost:32769/sse.

标准运输

使用stdio,MCP客户端本身可以启动MCP服务器容器,因此此时无需运行任何东西。


与Smithery一起跑步

苏格兰和南方能源公司运输

集 TRANSPORT=sse 在……里面 .env 在Smithery安装的服务器目录中。 然后,您通常可以在Smithery为该工具创建的虚拟环境中使用Python解释器运行服务器:

# Navigate to the server directory, e.g.,
# cd ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server
~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python server.py

或者,如果Smithery为已安装的工具提供直接运行命令(请查看Smithery文档):

smithery run @The-AI-Workshops/searxng-mcp-server

服务器将根据您在中的HOST和PORT设置可用 .env (例如。, http://localhost:32769/sse).

标准运输

使用stdio,MCP客户端本身将启动服务器。客户端配置需要指向 server.py Smithery托管目录中的脚本,可能使用 smithery exec 或者指向工具虚拟环境中Python解释器的直接路径。有关示例,请参阅“与MCP客户端集成”部分。


与MCP客户端集成

SSE配置

一旦服务器运行了SSE传输,您就可以使用以下配置连接到它:

{
  "mcpServers": {
    "searxng": {
      "transport": "sse",
      "url": "http://localhost:32769/sse"
    }
  }
}

Windsurf用户注意事项: 使用 serverUrl 而不是 url 在您的配置中:

{
  "mcpServers": {
    "searxng": {
      "transport": "sse",
      "serverUrl": "http://localhost:32769/sse"
    }
  }
}

n8n用户注意事项: 使用 host.docker.internal 而不是 localhost 由于n8n必须从其自身容器外部到达主机:

因此,MCP节点中的完整URL将是: http://host.docker.internal:32769/sse

如果您使用的值不是默认的32769,请确保更新端口。


带Stdio配置的Python

将此服务器添加到Claude Desktop、Windsurf或任何其他MCP客户端的MCP配置中:

{
  "mcpServers": {
    "searxng": {
      "command": "python",
      "args": ["dev/searXNG-mcp/server.py"],
      "env": {
        "TRANSPORT": "stdio",
        "SEARXNG_BASE_URL": "http://localhost:32768",
        "HOST": "0.0.0.0",
        "PORT": "32769"
      }
    }
  }
}

带Stdio配置的Docker

{
  "mcpServers": {
    "searxng": {
      "command": "docker",
      "args": ["run", "--rm", "-i",
               "-e", "TRANSPORT",
               "-e", "SEARXNG_BASE_URL",
               "-e", "HOST",
               "-e", "PORT",
               "mcp/searxng-mcp"],
      "env": {
        "TRANSPORT": "stdio",
        "SEARXNG_BASE_URL": "http://localhost:32768",
        "HOST": "0.0.0.0",
        "PORT": "32769"
      }
    }
  }
}

带标准配置的Smithery

如果您使用Smithery安装了服务器,则可以将MCP客户端配置为通过stdio运行它。Smithery提供 exec 命令从工具环境中运行可执行文件。

{
  "mcpServers": {
    "searxng": {
      "command": "smithery",
      "args": ["exec", "@The-AI-Workshops/searxng-mcp-server", "--", "python", "server.py"],
      // "cwd" (current working directory) might be automatically handled by Smithery.
      // If server.py is in a subdirectory, adjust the python script path e.g., "python", "path/to/server.py"
      "env": {
        "TRANSPORT": "stdio",
        "SEARXNG_BASE_URL": "http://localhost:32768", // Adjust as needed
        "HOST": "0.0.0.0", // Typically not used by stdio server itself but good to set
        "PORT": "32769"  // Typically not used by stdio server itself
      }
    }
  }
}

或者,您可以在Smithery创建的虚拟环境中找到Python解释器的路径(例如。, ~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python)以及通往 server.py (例如。, ~/.smithery/tools/The-AI-Workshops/searxng-mcp-server/server.py)并直接使用它们:

{
  "mcpServers": {
    "searxng": {
      "command": "~/.smithery/venvs/The-AI-Workshops_searxng-mcp-server/bin/python",
      "args": ["~/.smithery/tools/The-AI-Workshops/searxng-mcp-server/server.py"],
      // "cwd" should be the directory containing server.py if not using absolute paths for args,
      // or if server.py relies on relative paths for other files (like .env).
      // Example: "cwd": "~/.smithery/tools/The-AI-Workshops/searxng-mcp-server",
      "env": {
        "TRANSPORT": "stdio",
        "SEARXNG_BASE_URL": "http://localhost:32768"
        // Other necessary env vars from .env can be duplicated here
      }
    }
  }
}

确保路径适合您的Smithery安装,并且 .env 文件可由以下人员发现 server.py (通常通过设置 cwd 到服务器的根目录或确保 server.py 如果Smithery设置了绝对路径,则从绝对路径加载它)。


构建自己的服务器

此模板为构建更复杂的MCP服务器提供了基础。建立自己的:

  • 通过使用创建方法来添加自己的工具 @mcp.tool() 装饰器
  • 创建自己的生命周期函数来添加自己的依赖项(客户端、数据库连接等)
  • 添加提示和资源 @mcp.resource() 和 @mcp.prompt()

SearXNG搜索工具参数

这 search 该工具支持以下参数(除 q):

  • q (必填):搜索查询字符串。
  • categories:以逗号分隔的活动搜索类别列表。
  • engines:以逗号分隔的活动搜索引擎列表。
  • language:语言代码。
  • page:搜索页码(默认值:1)。
  • time_range:[日、月、年]
  • format:[json、csv、rss](默认值:json)
  • results_on_new_tab: [0, 1]
  • image_proxy:[正确,错误]
  • autocomplete:[谷歌、dbpedia、duckduckgo、mwmble、startpage、维基百科、stract、swisscows、qwant]
  • safesearch: [0, 1, 2]
  • theme:[简单]
  • enabled_plugins:已启用插件的列表。
  • disabled_plugins:禁用插件列表。
  • enabled_engines:启用的发动机列表。
  • disabled_engines:停用发动机列表。

请参阅 SearXNG文件 了解更多详情。


许可证

MIT许可证