使用说明
SearXNG搜索MCP服务器
通过SearXNG实例对Zed AI助手进行以隐私为中心的网络搜索。在不损害隐私的情况下搜索网络并阅读网址。
概述
此Zed扩展提供 模型上下文协议(MCP) 服务器集成 SearXNG,使您的AI助手能够搜索网络并获取网页内容,同时尊重您的隐私。
主要特点:
- 🔍 网页搜索:通过您的SearXNG实例在多个搜索引擎中搜索
- 📄 URL读取:获取网页并将其转换为markdown以进行AI分析
- 🔒 隐私第一:所有搜索都通过您配置的SearXNG实例进行
- ⚡ 快速轻便:133KB WASM二进制文件,开销最小
- 🛠️ 灵活的配置:支持身份验证、代理和自定义标头
⚠️ 安全与隐私
重要安全注意事项:
凭据存储
- 明文存储:身份验证凭据(
auth_username,auth_password)已存储 未加密 在你的Zedsettings.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-searxngnpm安全包 - 更新需要手动版本更改和安全审查
- 该扩展验证所有配置输入,以防止注入攻击
需求
- Zed编辑:版本0.205.x或更高
- Node.js:版本20或更高(适用于npx)
- SearXNG实例:自托管或公共实例访问
披露
这种扩展主要由人工智能代理编码,作为一种谨慎和有意的学习练习,包括用于质量和安全的半自动代码审查。使用风险自负。
安装
1.安装扩展
选项A:来自Zed扩展(推荐)
- 打开Zed
- 按
Cmd+Shift+P(macOS)或Ctrl+Shift+P(Linux/Windows) - 搜索“zed:扩展”
- 搜索“MCP服务器:SearXNG”
- 点击“安装”
选项B:As Dev扩展(用于开发)
- 克隆此存储库
- 打开Zed
- 按
Cmd+Shift+P并搜索“zed:安装开发扩展” - 选择扩展目录
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.验证安装
- 在Zed中打开AI助手面板
- 开始新的对话
- 助理现在应该可以访问
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设置中缺少配置或配置不正确。
解决方案:
- 检查你的
settings.json有context_servers.mcp-server-searxng.settings.searxng_url钥匙 - 验证URL格式:
https://domain.com(无尾随斜线) - 更改后重新启动Zed
错误:“找不到命令'npx'”
原因:Node.js或npx未安装或不在PATH中。
解决方案:
- 安装Node.js 20+:https://nodejs.org/
- 验证安装:
node --version和npx --version - 安装Node.js后重新启动Zed
错误:“无法连接到SearXNG实例”
原因:SearXNG实例已关闭、URL不正确或网络问题。
解决方案:
- 在浏览器中测试URL:
https://your-instance.com - 验证JSON格式是否已启用(请访问
/search?q=test&format=json) - 检查防火墙/代理设置
- 尝试其他公共实例 searx.space
错误:“请求超时”
原因:SearXNG实例运行缓慢或无响应。
解决方案:
- 尝试具有更好正常运行时间的不同SearXNG实例
- 自主机,具有更好的可靠性和性能
- 检查您的网络连接
错误:“401未经授权”
原因:身份验证凭据不正确。
解决方案:
- 验证
auth_username和auth_password是正确的 - 确保您的SearXNG实例需要基本身份验证(并非所有都需要)
- 使用curl测试凭据:
curl -u username:password https://your-instance.com/search?q=test&format=json
搜索结果为空或不相关
原因:SearXNG实例配置或选定的搜索引擎。
解决方案:
- 验证您的SearXNG实例是否启用了搜索引擎
- 访问实例的设置并配置首选引擎
- 自主机完全控制搜索配置
扩展未出现在AI助手中
原因:未加载扩展或Zed版本不兼容。
解决方案:
- 检查Zed版本:必须为0.205.x或更高版本
- 完全重新启动Zed
- 检查Zed日志:
zed: open log在命令面板中 - 重新安装扩展程序
隐私和安全
数据流
You → Zed → This Extension → mcp-searxng (npm) → Your SearXNG Instance → Search Engines
此扩展功能是什么:
- ✅ 包裹
mcp-searxngnpm包 - ✅ 将您的设置作为环境变量传递
- ✅ 所有数据都通过您配置的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扩展包装模式:
- 最小锈蚀/WASM包装 -实现Zed扩展API
- 委托给npm包 -经过验证的用途
mcp-searxng实施 - 配置桥 -将Zed设置映射到环境变量
这种方法:
- ✅ 利用经过实战测试的MCP服务器代码
- ✅ 最大限度地减少维护负担
- ✅ 保持WASM二进制文件较小(147KB)
- ✅ 遵循官方Zed模式
贡献
欢迎投稿!拜托:
- 阅读行为准则
- 复刻仓库
- 创建要素分支
- 通过测试进行更改
- 跑
cargo clippy和cargo fmt - 提交拉取请求
贡献新的搜索功能
此扩展被设计为模块化和可扩展的。如果你想添加对其他搜索引擎的支持,以下是如何保持与现有架构的一致性:
架构概述
扩展遵循a 包装模式:
- Rust WASM扩展 (
src/mcp_server_searxng.rs)-处理设置、验证和npm包管理 - npm MCP服务器 (
mcp-searxng包)-实现实际的搜索逻辑和MCP协议 - 设置架构 -Zed配置UI的JSON模式
添加新的搜索引擎
要在保持架构一致性的同时添加新的搜索引擎,请执行以下操作:
- 分叉npm包 (sokoliuk/mcp searxng)
- 实施搜索提供程序 在TypeScript中遵循现有模式:
- 创建新的提供者模块(例如。,
src/providers/duckduckgo.ts) - 实现与现有提供者相同的接口(搜索查询→ JSON结果)
- 将配置选项添加到MCP服务器设置中
- 创建新的提供者模块(例如。,
- 更新Rust包装器:
- 将新设置字段添加到
SearxngContextServerSettings结构体 - 为新的特定于提供程序的设置添加验证
- 使用更新JSON架构
#[schemars]属性
- 将新设置字段添加到
- 更新文档:
- 在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/
支持
致谢
- SearXNG项目 -尊重隐私的元搜索引擎
- mcp searxng -Ihor Sokoliuk的MCP服务器实现
- mcp服务器勇敢搜索 -Zed MCP扩展的参考实现
- Zed工业 -高性能代码编辑器
- Anthropic -模型上下文协议规范
由...制作❤️ 面向注重隐私的开发人员