网页搜索
一个基于多引擎搜索结果的模型上下文协议(MCP)服务器,支持无需API密钥的免费网络搜索。它支持多个搜索引擎,并提供搜索和获取文章的工具。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"web-search": {
"baseUrl": "http://localhost:3000/mcp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"name": "Web Search MCP",
"type": "streamableHttp"
},
"web-search-sse": {
"transport": {
"description": "Multi-engine web search with article fetching",
"isActive": true,
"name": "Web Search MCP",
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}
服务介绍
Open-WebSearch MCP 服务器
基于多引擎搜索结果的模型上下文协议(MCP)服务器,支持无需 API 密钥的免费网络搜索。
特性
- 使用多引擎结果进行网络搜索
- bing
- baidu
- ~~linux.do~~ 暂不支持
- csdn
- duckduckgo
- exa
- brave
- 支持 HTTP 代理配置以访问受限资源
- 不需要 API 密钥或身份验证
- 返回带有标题、URL 和描述的结构化结果
- 可配置每次搜索的结果数量
- 可自定义默认搜索引擎
- 支持获取单篇文章内容
- csdn
待办事项
- 支持 ~~Bing~~ (已支持), ~~DuckDuckGo~~ (已支持), ~~Exa~~ (已支持), ~~Brave~~ (已支持), Google 和其他搜索引擎
- 支持更多博客、论坛和社交平台
- 优化文章内容提取,增加对更多网站的支持
安装指南
本地安装
-
克隆或下载此仓库
-
安装依赖项:
bash
npm install -
构建服务器:
bash
npm run build -
将服务器添加到您的 MCP 配置中:
Cherry Studio:
json
{
"mcpServers": {
"web-search": {
"name": "Web Search MCP",
"type": "streamableHttp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp"
}
}
}
VSCode (Claude Dev Extension):
json
{
"mcpServers": {
"web-search": {
"transport": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp"
}
},
"web-search-sse": {
"transport": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}
Claude Desktop:
json
{
"mcpServers": {
"web-search": {
"transport": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp"
}
},
"web-search-sse": {
"transport": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}
Docker 部署
使用 Docker Compose 快速部署:
bash
docker-compose up -d
或者直接使用 Docker:
bash
docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/aas-ee/open-web-search:latest
环境变量配置:
bash
启用 CORS (默认: false)
ENABLE_CORS=true
CORS 起源配置 (默认: *)
CORS_ORIGIN=*
默认搜索引擎 (选项: bing, duckduckgo, exa, brave, 默认: bing)
DEFAULT_SEARCH_ENGINE=duckduckgo
启用 HTTP 代理 (默认: false)
USE_PROXY=true
代理服务器 URL (默认: http://127.0.0.1:10809)
PROXY_URL=http://your-proxy-server:port
然后在您的 MCP 客户端中进行配置:
json
{
"mcpServers": {
"web-search": {
"name": "Web Search MCP",
"type": "streamableHttp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp"
},
"web-search-sse": {
"transport": {
"name": "Web Search MCP",
"type": "sse",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"url": "http://localhost:3000/sse"
}
}
}
}
使用指南
服务器提供了三个工具:search、fetchLinuxDoArticle 和 fetchCsdnArticle。
search 工具使用方法
typescript
{
"query": string, // 搜索查询
"limit": number, // 可选:返回的结果数量 (默认: 10)
"engines": string[] // 可选:使用的搜索引擎 (bing,baidu,linuxdo,csdn,duckduckgo,exa,brave) 默认为 bing
}
使用示例:
typescript
use_mcp_tool({
server_name: "web-search",
tool_name: "search",
arguments: {
query: "搜索内容",
limit: 3, // 可选参数
engines: ["bing", "csdn", "duckduckgo", "exa", "brave"] // 可选参数,支持多引擎组合搜索
}
})响应示例:
json
[
{
"title": "示例搜索结果",
"url": "https://example.com",
"description": "搜索结果的描述文本...",
"source": "来源",
"engine": "使用的搜索引擎"
}
]
fetchCsdnArticle 工具使用
用于获取CSDN博客文章的完整内容。
typescript
{
"url": string // 使用搜索工具从CSDN搜索结果中获取的URL
}
使用示例:
typescript
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchCsdnArticle",
arguments: {
url: "https://blog.csdn.net/xxx/article/details/xxx"
}
})
响应示例:
json
[
{
"content": "示例搜索结果"
}
]
fetchLinuxDoArticle 工具使用
用于获取Linux.do论坛文章的完整内容。
typescript
{
"url": string // 使用搜索工具从linuxdo搜索结果中获取的URL
}
使用示例:
typescript
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchLinuxDoArticle",
arguments: {
url: "https://xxxx.json"
}
})
响应示例:
json
[
{
"content": "示例搜索结果"
}
]
使用限制
由于此工具通过抓取多引擎搜索结果来工作,请注意以下重要限制:
-
速率限制:
- 短时间内过多的搜索可能会导致所用引擎暂时阻止请求
- 建议:
- 保持合理的搜索频率
- 慎重使用限制参数
- 必要时在搜索之间添加延迟
-
结果准确性:
- 取决于相应引擎的HTML结构,当引擎更新时可能会失败
- 某些结果可能缺少如描述等元数据
- 复杂的搜索操作符可能无法按预期工作
-
法律条款:
- 此工具仅供个人使用
- 请遵守相应引擎的服务条款
- 根据您的实际使用情况实施适当的速率限制
-
搜索引擎配置:
- 可以通过
DEFAULT_SEARCH_ENGINE环境变量设置默认搜索引擎 - 支持的引擎:bing, duckduckgo, exa, brave
- 在搜索特定网站时使用默认引擎
- 可以通过
-
代理配置:
- 当某些搜索引擎在特定地区不可用时,可以配置HTTP代理
- 通过环境变量
USE_PROXY=true启用代理 - 通过
PROXY_URL配置代理服务器地址
贡献
欢迎提交问题报告和功能改进建议!
贡献者指南
如果您想分叉此仓库并发布自己的Docker镜像,则需要进行以下配置:
GitHub Secrets 配置
为了启用自动Docker镜像构建和发布,请在您的GitHub仓库设置中(Settings → Secrets and variables → Actions)添加以下密钥:
必需的密钥:
GITHUB_TOKEN: 由GitHub自动提供(无需设置)
可选密钥(针对阿里云ACR):
ACR_REGISTRY: 您的阿里云容器注册表URL(例如,registry.cn-hangzhou.aliyuncs.com)ACR_USERNAME: 您的阿里云ACR用户名ACR_PASSWORD: 您的阿里云ACR密码ACR_IMAGE_NAME: 您在ACR中的镜像名称(例如,your-namespace/open-web-search)
CI/CD 工作流
该仓库包含一个GitHub Actions工作流(.github/workflows/docker.yml),它会自动执行以下操作:
-
触发条件:
- 推送到
main分支 - 推送版本标签(
v*) - 手动触发工作流
- 推送到
-
构建并推送到:
- GitHub Container Registry (ghcr.io) - 总是启用
- 阿里云容器注册表 - 仅当配置了ACR密钥时启用
-
镜像标签:
ghcr.io/你的用户名/open-web-search:latest你的ACR地址/你的镜像名称:latest(如果配置了ACR)
分叉并发布步骤:
- 将仓库分叉到您的GitHub账户2. 配置密钥(如果你需要ACR发布):
- 进入设置 → 密钥和变量 → 操作,在你fork的仓库中
- 添加上述列出的与ACR相关的密钥
- 推送更改到
main分支或创建版本标签 - GitHub Actions将自动构建并推送你的Docker镜像
- 使用你的镜像,更新Docker命令:
bash
docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/your-username/open-web-search:latest
注意事项:
- 如果你不配置ACR密钥,工作流将只发布到GitHub Container Registry
- 确保你的GitHub仓库已启用Actions
- 工作流将使用你的GitHub用户名(转换为小写)作为GHCR镜像名称
Star History
如果你觉得这个项目对你有帮助,请考虑给它一个⭐ Star!