搜索网关服务

一个统一的搜索网关服务,支持本地MCP服务器和直接CLI调用,提供搜索、提取、爬取和状态检查功能。

  • by AnNingUI
  • Rust
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 AnNingUI/search-mcp-gateway

使用说明

搜索mcp网关

search-mcp-gateway 是一个Rust项目,它公开了相同的搜索网关 通过本地MCP服务器和直接CLI实现功能。它是为了 保持MCP支持的完整性,同时通过技能支持延迟加载 仅在需要时调用CLI。

特性

  • 具有与提供商无关的请求和响应模型的统一搜索网关。
  • 本地 stdio MCP服务器,具有紧凑的工具表面。
  • 具有等效功能的CLI search, extract, crawl,以及 status 子命令。
  • 自动选择提供者、健康感知轮换、可重试回退,以及 断路。
  • 默认搜索路由更倾向于Tavily,以获得更丰富的面向答案的查询, 而DuckDuckGo仍然是一个轻量级的后备方案。
  • MCP和CLI JSON模式的稳定JSON信封输出: { "ok": true|false, "data": ..., "error": ... }.
  • 两者之间的DuckDuckGo兼容性策略 html 和 lite 端点 POST和GET请求回退。
  • Tavily和DuckDuckGo在第一个版本中提供服务。

命令

直接运行CLI:

cargo run -- search --query "latest AI agent news" --include-answer --json

这 --json flag打印一个稳定的信封:

{
  "ok": true,
  "data": {
    "provider_used": "tavily"
  },
  "error": null
}

运行本地MCP服务器:

cargo run -- mcp

CI和发布

该存储库包括用于验证和标记的GitHub Actions工作流 释放。CI工作流在Linux、Windows和 macOS。发布工作流构建标记的二进制文件并将其上传到GitHub 释放。

CI工作流

CI工作流在推送上运行 main 以及拉取请求。目前 构建这些目标:

  • x86_64-unknown-linux-gnu
  • x86_64-pc-windows-msvc
  • aarch64-apple-darwin

每个矩阵作业运行:

  1. cargo test --quiet --target <target>
  2. cargo build --release --target <target>

发布工作流程

当您推送匹配的标签时,发布工作流就会运行 v*例如:

git tag v0.1.0
git push origin v0.1.0

工作流上传这些发布资产:

  • Linux存档: search-mcp-gateway-x86_64-unknown-linux-gnu.tar.gz
  • Windows存档: search-mcp-gateway-x86_64-pc-windows-msvc.zip
  • macOS存档: search-mcp-gateway-aarch64-apple-darwin.tar.gz
  • SHA256SUMS

依赖关系更新

存储库包括 dependabot.yml 对于两个更新流:

  • GitHub操作版本
  • 货物依赖关系

这将使工作流操作和Rust依赖关系向前发展 正常的pull请求,而不是默默地过时。

配置

配置是可选的。如果不提供配置文件,网关 从内置默认值开始,只读取Tavily令牌等机密 从环境变量。

配置加载顺序

网关按以下顺序解析配置:

  1. 如果你通过 --config <path>,它使用该文件。
  2. 否则,如果 SEARCH_MCP_GATEWAY_CONFIG 如果已设置,则使用该路径。
  3. 否则,它会寻找 search-mcp-gateway.toml 在目前的工作中 目录。
  4. 如果不存在文件,则使用内置默认值。

最小设置

最小的工作设置仅是一个环境变量。这已经足够了 内置的Tavily提供程序。

在Windows PowerShell上:

$env:TAVILY_HIKARI_TOKEN = "your-token"
cargo run -- search --query "latest AI agent news" --json

如果直接运行已安装的二进制文件:

$env:TAVILY_HIKARI_TOKEN = "your-token"
<path-to-search-mcp-gateway> search --query "latest AI agent news" --json

示例配置文件

如果要覆盖默认值,请创建 search-mcp-gateway.toml:

[gateway]
default_timeout_ms = 20000
cache_enabled = true
cache_ttl_seconds = 120
circuit_failure_threshold = 3
circuit_open_seconds = 30
search_provider_order = ["tavily", "ddg"]

[tavily]
enabled = true
base_url = "https://tavily.ivanli.cc"
api_key_env = "TAVILY_HIKARI_TOKEN"
search_path = "/api/tavily/search"
extract_path = "/api/tavily/extract"
crawl_path = "/api/tavily/crawl"

[ddg]
enabled = true
base_url = "https://html.duckduckgo.com/html/"
lite_url = "https://lite.duckduckgo.com/lite/"
region = "wt-wt"
safe_search = "moderate"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"

配置参考

这些是当前支持的配置密钥。

[gateway]

这 [gateway] 部分控制请求流、缓存、断路和 默认提供商订购。

  • default_timeout_ms 提供程序请求的HTTP超时。违约: 20000.
  • cache_enabled 启用内存中的搜索缓存。违约: true.
  • cache_ttl_seconds 以秒为单位设置缓存TTL。违约: 120.
  • circuit_failure_threshold 在连续多次故障后打开提供程序电路。违约: 3.
  • circuit_open_seconds 使提供者电路保持打开状态达数秒。违约: 30.
  • search_provider_order 在应用排名和健康惩罚之前设置基本提供者顺序。 违约: ["tavily", "ddg"].

[tavily]

这 [tavily] 部分配置内置的Tavily兼容提供程序。

  • enabled 启用或禁用Tavily。违约: true.
  • base_url 设置Tavilly API主机。违约: https://tavily.ivanli.cc.
  • api_key_env 设置存储令牌的环境变量名称。违约: TAVILY_HIKARI_TOKEN.
  • api_key 可选地将令牌直接嵌入配置文件中。如果两者都有 api_key 和 api_key_env 存在, api_key 获胜。
  • search_path 设置搜索端点路径。违约: /api/tavily/search.
  • extract_path 设置提取端点路径。违约: /api/tavily/extract.
  • crawl_path 设置爬网端点路径。违约: /api/tavily/crawl.

[ddg]

这 [ddg] 部分配置了内置的DuckDuckGo回退提供程序。

  • enabled 启用或禁用DDG。违约: true.
  • base_url 设置DDG HTML端点。违约: https://html.duckduckgo.com/html/.
  • lite_url 设置DDG Lite端点。违约: https://lite.duckduckgo.com/lite/.
  • region 设置DDG地区代码。违约: wt-wt.
  • safe_search 设置安全搜索模式。当前代码中支持的值为 off, strict, 以及中等模式的任何其他值。违约: moderate.
  • user_agent 设置用于DDG请求的User-Agent标头。默认值为 浏览器类似于用户代理,因为DDG使用它更稳定。

Codex MCP示例

如果你想让Codex启动本地MCP服务器,请添加这样的条目 ~/.codex/config.toml:

[mcp_servers.tavily_hikari]
command = "/absolute/path/to/search-mcp-gateway"
args = ["mcp"]

[mcp_servers.tavily_hikari.env]
TAVILY_HIKARI_TOKEN = "your-token"

如果将项目配置存储在其他地方,请添加 SEARCH_MCP_GATEWAY_CONFIG:

[mcp_servers.tavily_hikari]
command = "/absolute/path/to/search-mcp-gateway"
args = ["mcp"]

[mcp_servers.tavily_hikari.env]
TAVILY_HIKARI_TOKEN = "your-token"
SEARCH_MCP_GATEWAY_CONFIG = "/absolute/path/to/search-mcp-gateway.toml"

替换 /absolute/path/to/search-mcp-gateway 通过绝对路径 已在您的计算机上安装可执行文件。例如:

  • 窗户: D:\\Software\\Dev\\CLI\\search-mcp-gateway.exe
  • macOS或Linux: /usr/local/bin/search-mcp-gateway

电流限制

当前版本仅支持通过配置的内置提供程序 [tavily] 和 [ddg] 部分。它还不支持用户自定义 供应商通过任意 toml 阻碍。