隐私搜索服务

为Zed AI助手提供的隐私优先的网页搜索和URL内容获取服务,通过SearXNG实例实现。

  • by swannysec
  • Rust
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 swannysec/mcp-server-searxng

使用说明

SearXNG搜索MCP服务器

通过SearXNG实例对Zed AI助手进行以隐私为中心的网络搜索。在不损害隐私的情况下搜索网络并阅读网址。

概述

此Zed扩展提供 模型上下文协议(MCP) 服务器集成 SearXNG,使您的AI助手能够搜索网络并获取网页内容,同时尊重您的隐私。

主要特点:

  • 🔍 网页搜索:通过您的SearXNG实例在多个搜索引擎中搜索
  • 📄 URL读取:获取网页并将其转换为markdown以进行AI分析
  • 🔒 隐私第一:所有搜索都通过您配置的SearXNG实例进行
  • ⚡ 快速轻便:133KB WASM二进制文件,开销最小
  • 🛠️ 灵活的配置:支持身份验证、代理和自定义标头

⚠️ 安全与隐私

重要安全注意事项:

凭据存储

  • 明文存储:身份验证凭据(auth_username, auth_password)已存储 未加密 在你的Zed settings.json 文件
  • 流程可见性:凭据作为环境变量传递,可能在流程列表中可见(通过 ps、任务管理器或类似工具)
  • 推荐:使用自托管的SearXNG实例 无身份验证 如果可能,或者使用具有身份验证的反向代理,而不是HTTP基本身份验证

保密考虑

  • 公共实例:公共SearXNG实例(如 searx.be)可以记录您的搜索查询。使用前检查实例的隐私策略
  • 自托管:为了最大限度地保护隐私, 自行托管自己的SearXNG实例
  • 实例选择:参观 searx.space 查找具有明确隐私政策且无日志记录承诺的实例

SSRF保护(可配置)

  • 默认行为:允许本地主机和私有IP地址(allow_private_instances: true)支持自托管SearXNG实例
  • 严格模式:设置 allow_private_instances: false 阻止localhost/RFC1918私有IP并实施SSRF保护
  • 何时使用严格模式:仅在共享/不受信任的环境中需要,恶意用户可能会尝试SSRF攻击
  • 自托管用户:保留默认值 true 设置以访问您的本地SearXNG实例

供应链安全

  • 此扩展使用 固定版本0.8.0 的 mcp-searxng npm安全包
  • 更新需要手动版本更改和安全审查
  • 该扩展验证所有配置输入,以防止注入攻击

需求

  • Zed编辑:版本0.205.x或更高
  • Node.js:版本20或更高(适用于npx)
  • SearXNG实例:自托管或公共实例访问

披露

这种扩展主要由人工智能代理编码,作为一种谨慎和有意的学习练习,包括用于质量和安全的半自动代码审查。使用风险自负。

安装

1.安装扩展

选项A:来自Zed扩展(推荐)

  1. 打开Zed
  2. 按 Cmd+Shift+P (macOS)或 Ctrl+Shift+P (Linux/Windows)
  3. 搜索“zed:扩展”
  4. 搜索“MCP服务器:SearXNG”
  5. 点击“安装”

选项B:As Dev扩展(用于开发)

  1. 克隆此存储库
  2. 打开Zed
  3. 按 Cmd+Shift+P 并搜索“zed:安装开发扩展”
  4. 选择扩展目录

2.查找SearXNG实例

公共实例: 访问 searx.space 查找公共SearXNG实例。选择一个:

  • ✅ JSON格式已启用
  • ✅ 良好的正常运行时间
  • ✅ 合理的响应时间

自托管: 跟随 SearXNG安装指南 托管自己的实例。

3.在Zed中配置

打开Zed设置(Cmd+, 或 Settings > Open Settings):

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://searx.be"
      }
    }
  }
}

4.验证安装

  1. 在Zed中打开AI助手面板
  2. 开始新的对话
  3. 助理现在应该可以访问 searxng_web_search 和 web_url_read 工具

注: Zed会自动将设置从 settings.json 转换为传递给MCP服务器的环境变量。扩展程序会验证这些设置,并在配置错误时提供有用的错误消息。

配置示例

最小配置(公共实例)

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://searx.be"
      }
    }
  }
}

自托管配置(本地主机)

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "http://localhost:8080",
        "allow_private_instances": true
      }
    }
  }
}

注: allow_private_instances 默认为 true,因此您可以对localhost实例省略它。

经过身份验证的SearXNG实例

⚠️ 安全警告:凭据以明文形式存储在 settings.json 在工艺环境中可见。仅将其用于受信任的自托管实例。

对于受密码保护的实例:

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://your-private-instance.com",
        "auth_username": "your-username",
        "auth_password": "your-password"
      }
    }
  }
}

严格的SSRF保护(共享环境)

如果在需要严格SSRF保护的不受信任的环境中运行:

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://public-searxng-instance.com",
        "allow_private_instances": false
      }
    }
  }
}

注: 这会阻止本地主机和私有IP地址。大多数用户应该 不 使用此设置。

⚠️ 安全说明:凭据存储在本地Zed设置文件中。使用特定于环境的凭据,而不是个人密码。

公司代理配置

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://searx.be",
        "http_proxy": "http://proxy.company.com:8080",
        "https_proxy": "http://proxy.company.com:8080",
        "no_proxy": "localhost,127.0.0.1,.company.com"
      }
    }
  }
}

自定义用户代理

{
  "context_servers": {
    "mcp-server-searxng": {
      "settings": {
        "searxng_url": "https://searx.be",
        "user_agent": "MyCustomBot/1.0"
      }
    }
  }
}

可用设置

设置 类型 必填 说明
searxng_url string ✅ 是 您的SearXNG实例的URL
auth_username string 否 HTTP基本身份验证用户名
auth_password string 否 HTTP基本身份验证密码
user_agent string 否 自定义用户代理标头
http_proxy string 否 HTTP代理URL
https_proxy string 否 HTTPS代理URL
no_proxy string 否 绕过代理的逗号分隔主机

使用示例

配置后,您的AI助手可以自动使用搜索工具:

查询示例:

  • “搜索Rust异步最佳实践”
  • “Zed编辑器的最新功能是什么?”
  • “查找zed_extension_api的文档”
  • “阅读此URL并总结:https://docs.searxng.org/"

助手将自动调用适当的工具,并将搜索结果纳入其响应中。

安全特性

此扩展实现了多种安全控制:

  • ✅ URL验证:全面的验证可防止URL注入、SSRF和路径遍历攻击
  • ✅ 输入消毒:所有用户输入(用户代理、代理URL等)都使用严格的字符白名单进行验证
  • ✅ 版本固定:固定npm包版本(0.8.0)以防止供应链攻击
  • ✅ 架构约束:所有字符串字段的最大长度限制,以防止DoS
  • ✅ 可配置的SSRF保护:可选阻止localhost/RFC1918私有IP(默认情况下禁用自托管使用)
  • ✅ 无不安全代码:扩展使用内存安全的Rust,没有不安全块

故障排除

错误:“SEARXNG_URL环境变量未设置”

原因:Zed设置中缺少配置或配置不正确。

解决方案:

  1. 检查你的 settings.json 有 context_servers.mcp-server-searxng.settings.searxng_url 钥匙
  2. 验证URL格式: https://domain.com (无尾随斜线)
  3. 更改后重新启动Zed

错误:“找不到命令'npx'”

原因:Node.js或npx未安装或不在PATH中。

解决方案:

  1. 安装Node.js 20+:https://nodejs.org/
  2. 验证安装: node --version 和 npx --version
  3. 安装Node.js后重新启动Zed

错误:“无法连接到SearXNG实例”

原因:SearXNG实例已关闭、URL不正确或网络问题。

解决方案:

  1. 在浏览器中测试URL: https://your-instance.com
  2. 验证JSON格式是否已启用(请访问 /search?q=test&format=json)
  3. 检查防火墙/代理设置
  4. 尝试其他公共实例 searx.space

错误:“请求超时”

原因:SearXNG实例运行缓慢或无响应。

解决方案:

  1. 尝试具有更好正常运行时间的不同SearXNG实例
  2. 自主机,具有更好的可靠性和性能
  3. 检查您的网络连接

错误:“401未经授权”

原因:身份验证凭据不正确。

解决方案:

  1. 验证 auth_username 和 auth_password 是正确的
  2. 确保您的SearXNG实例需要基本身份验证(并非所有都需要)
  3. 使用curl测试凭据:
    curl -u username:password https://your-instance.com/search?q=test&format=json
    

搜索结果为空或不相关

原因:SearXNG实例配置或选定的搜索引擎。

解决方案:

  1. 验证您的SearXNG实例是否启用了搜索引擎
  2. 访问实例的设置并配置首选引擎
  3. 自主机完全控制搜索配置

扩展未出现在AI助手中

原因:未加载扩展或Zed版本不兼容。

解决方案:

  1. 检查Zed版本:必须为0.205.x或更高版本
  2. 完全重新启动Zed
  3. 检查Zed日志: zed: open log 在命令面板中
  4. 重新安装扩展程序

隐私和安全

数据流

You → Zed → This Extension → mcp-searxng (npm) → Your SearXNG Instance → Search Engines

此扩展功能是什么:

  • ✅ 包裹 mcp-searxng npm包
  • ✅ 将您的设置作为环境变量传递
  • ✅ 所有数据都通过您配置的SearXNG实例流动

这个扩展没有做什么:

  • ❌ 将数据发送到任何第三方服务器(SearXNG实例除外)
  • ❌ 记录或存储您的搜索查询
  • ❌ 包括遥测或分析

您的责任:

  • 选择受信任的SearXNG实例或自主机
  • 查看您使用的任何公共实例的隐私政策
  • 确保您的SearXNG实例凭据安全

发展

从源头构建

# Install Rust and add WASM target
rustup target add wasm32-wasip2

# Build
cargo build --target wasm32-wasip2 --release

# Check for issues
cargo clippy --target wasm32-wasip2 -- -D warnings

# Format code
cargo fmt

测试

看 测试.md 用于全面的测试程序,包括:

  • 包含17个测试用例的手动测试指南
  • URL格式和配置的验证测试
  • 身份验证和代理场景的集成测试
  • 性能和回归测试程序
  • 测试报告模板

本地测试

# Install as dev extension in Zed
# zed: install dev extension (Cmd+Shift+P)

# View logs
# zed: open log (Cmd+Shift+P)

# Run validation tests
# See TESTING.md for detailed test cases

建筑

此扩展遵循 Zed MCP扩展包装模式:

  1. 最小锈蚀/WASM包装 -实现Zed扩展API
  2. 委托给npm包 -经过验证的用途 mcp-searxng 实施
  3. 配置桥 -将Zed设置映射到环境变量

这种方法:

  • ✅ 利用经过实战测试的MCP服务器代码
  • ✅ 最大限度地减少维护负担
  • ✅ 保持WASM二进制文件较小(147KB)
  • ✅ 遵循官方Zed模式

贡献

欢迎投稿!拜托:

  1. 阅读行为准则
  2. 复刻仓库
  3. 创建要素分支
  4. 通过测试进行更改
  5. 跑 cargo clippy 和 cargo fmt
  6. 提交拉取请求

贡献新的搜索功能

此扩展被设计为模块化和可扩展的。如果你想添加对其他搜索引擎的支持,以下是如何保持与现有架构的一致性:

架构概述

扩展遵循a 包装模式:

  1. Rust WASM扩展 (src/mcp_server_searxng.rs)-处理设置、验证和npm包管理
  2. npm MCP服务器 (mcp-searxng 包)-实现实际的搜索逻辑和MCP协议
  3. 设置架构 -Zed配置UI的JSON模式

添加新的搜索引擎

要在保持架构一致性的同时添加新的搜索引擎,请执行以下操作:

  1. 分叉npm包 (sokoliuk/mcp searxng)
  2. 实施搜索提供程序 在TypeScript中遵循现有模式:
    • 创建新的提供者模块(例如。, src/providers/duckduckgo.ts)
    • 实现与现有提供者相同的接口(搜索查询→ JSON结果)
    • 将配置选项添加到MCP服务器设置中
  3. 更新Rust包装器:
    • 将新设置字段添加到 SearxngContextServerSettings 结构体
    • 为新的特定于提供程序的设置添加验证
    • 使用更新JSON架构 #[schemars] 属性
  4. 更新文档:
    • 在README中添加配置示例
    • 在中记录新设置 default_settings.jsonc
    • 更新 installation_instructions.md

设计原则

  • 隐私第一:所有搜索提供商都应尊重用户隐私
  • 验证:所有用户输入都必须在Rust包装器中进行验证
  • 模式驱动的:使用JSON模式进行类型安全配置
  • 错误处理:提供清晰、可操作的错误消息
  • 测试:包括示例和测试用例

拉取请求指南

欢迎投稿!拜托:

  • 遵循现有的代码样式和模式
  • 包括新功能的测试
  • 更新文档
  • 确保 cargo clippy 无警告通过
  • 提交前使用真实的Zed安装进行测试

许可证

此扩展根据 MIT许可证.

链接

  • 扩展存储库: https://github.com/swannysec/mcp-server-searxng
  • Zed编辑: https://zed.dev/
  • SearXNG文件: https://docs.searxng.org/
  • MCP规范: https://modelcontextprotocol.io/
  • npm mcp searxng包: https://www.npmjs.com/package/mcp-searxng
  • 公共SearXNG实例: https://searx.space/

支持

致谢


由...制作❤️ 面向注重隐私的开发人员