打开WebSearch
  ](https://smithery.ai/server/@Aas-ee/open-websearch)
🇨🇳 中文 | 🇺🇸 英语
open-websearch 提供了MCP服务器、CLI和本地守护进程,还可以与技能指导的代理工作流配对,用于在没有API密钥的情况下进行实时web搜索和内容检索。
特性
- 使用多引擎结果进行网络搜索
- 必应 - 百度 - ~~linux.do~~暂时不支持 - CSDN - DuckDuckGo - exa - 勇敢 - 朱金 - 起始页
- HTTP代理配置支持访问受限资源
- 无需API密钥或身份验证
- 返回带有标题、URL和描述的结构化结果
- 每次搜索可配置的结果数量
- 可自定义的默认搜索引擎
- 支持获取单个文章内容
- CSDN - github(README文件) - 通用HTTP(S)页面/Markdown内容
选择正确的道路
MCP
- 当你想连接时最好 open-websearch 连接到Claude Desktop、Cherry Studio、Cursor或其他MCP客户端。
CLI
- 最适合一次性本地命令、shell脚本和直接终端使用。
Local daemon
- 最好是当你想要一个可重用的长期本地HTTP服务公开时 status, GET /health,以及 POST /search / POST /fetch-*.以明确的方式开始 open-websearch serve 并与进行核对 open-websearch status.
Skill
- 最好作为面向代理的设置和使用指导层。技能不会取代MCP、CLI或本地守护进程;它通常与CLI和/或本地守护进程协同工作,以帮助代理发现、激活和使用最小的工作路径。
使用技巧
安装 open-websearch 首先为您的代理人提供技能:
npx skills add https://github.com/Aas-ee/open-webSearch --skill open-websearch首次使用时,该技能通常遵循以下路径:检测是否可用 open-websearch 路径已存在,如果不存在,则指导设置/启用,验证功能是否处于活动状态,然后才继续通过最小的工作路径进行搜索或获取。
如果当前环境无法自动完成设置或激活,您可以显式地让代理首先启动本地守护进程:
open-websearch serve
open-websearch status将安装代理设置与运行时代理设置分开:
- 安装代理/镜像
- 在技能或代理安装时使用此选项 open-websearch, playwright,或其他npm包。 - 在受限网络中,npm特定的标志或npm配置通常比通用的shell代理变量更好,例如:
npm --proxy http://127.0.0.1:7890 --https-proxy http://127.0.0.1:7890 install -g open-websearch- 运行时代理
- 当守护进程已安装并即将实时执行时,请使用此选项 search / fetch 工作。 - 这会影响 open-websearch 网络流量之后 serve 开始,例如:
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 open-websearch serve如果代理只能通过npm代理设置完成包安装步骤,但live search/fetch在启动后也需要一个代理,那么这是两个单独的配置步骤,应该分开处理。
CLI和本地守护程序
CLI用于一次性执行。本地守护进程是一个长期存在的本地HTTP服务,用于重复调用,启动摩擦较小。使用 open-websearch serve 作为显式守护进程启动命令,以及 open-websearch status 作为显式守护进程状态命令。
动作命令,如 search 和 fetch-web 当默认的本地守护进程可用时,请先尝试使用它。如果你通过 --daemon-url,该守护进程路径变为显式,并且禁用了直接执行的静默回退。
先构建:
npm run build启动本地守护进程:
npm run serve
# globally installed: open-websearch serve检查状态:
npm run status -- --json
# globally installed: open-websearch status --json运行一次本地CLI搜索:
npm run search:cli -- "open web search" --json笔记:
- 裸露的
open-websearch是MCP服务器兼容性入口点,而不是代理自动化的建议守护进程启动命令。 - 对于内容提取,最好先搜索,然后获取更具体的结果页面。一些主页和JS重着陆页可能无法通过以下方式公开可读的文章文本
fetch-web.
对于本地后台程序HTTP API(serve, status, GET /health, POST /search, POST /fetch-*),请参阅 docs/http-api.md.
待办事项
- 支持~~ Bing ~~(已支持)、~~ DuckDuckGo~~(已受支持)、~~Exa~~(已被支持)、%~~Brave~~(已受到支持)、谷歌和其他搜索引擎
- 支持更多博客、论坛和社交平台
- 优化文章内容提取,增加对更多网站的支持
- ~~支持GitHub README获取~~(已支持)
安装指南
如果你正在使用 open-websearch 作为MCP服务器,请继续下面面向MCP的设置。
NPX快速入门(推荐)
最快的入门方法:
# Basic usage
npx open-websearch@latest
# With environment variables (Linux/macOS)
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true npx open-websearch@latest
# Windows PowerShell
$env:DEFAULT_SEARCH_ENGINE="duckduckgo"; $env:ENABLE_CORS="true"; npx open-websearch@latest
# Windows CMD
set MODE=stdio && set DEFAULT_SEARCH_ENGINE=duckduckgo && npx open-websearch@latest
# Cross-platform (requires cross-env, Used for local development)
npm install -g open-websearch
npx cross-env DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true open-websearch环境变量:
| 变量 | 默认值 | 选项 | 描述 |
|---|---|---|---|
ENABLE_CORS | false | true, false | 启用CORS |
CORS_ORIGIN | * | 任何有效的源 | CORS源配置 |
DEFAULT_SEARCH_ENGINE | bing | bing, duckduckgo, exa, brave, baidu, csdn, juejin, startpage | 默认搜索引擎 |
USE_PROXY | false | true, false | 启用HTTP代理 |
PROXY_URL | http://127.0.0.1:7890 | 任何有效的URL | 代理服务器URL |
FETCH_WEB_INSECURE_TLS | false | true, false | 禁用TLS证书验证 fetchWebContent 只有。仅当目标站点的证书链断开时使用 |
MODE | both | both, http, stdio | 服务器模式:HTTP+STDIO、仅HTTP或仅STDIO |
PORT | 3000 | 1-65535 | 服务器端口 |
ALLOWED_SEARCH_ENGINES | 空(所有可用) | 逗号分隔的引擎名称 | 限制可以使用的搜索引擎;如果默认引擎不在此列表中,则第一个允许的引擎将成为默认引擎 |
SEARCH_MODE | auto | request, auto, playwright | 搜索策略。目前仅影响Bing:仅请求,请求后Playwright回退,或强制Playwright |
PLAYWRIGHT_PACKAGE | auto | auto, playwright, playwright-core | 启用浏览器模式时要解析哪个Playwright客户端包 |
PLAYWRIGHT_MODULE_PATH | 空 | 绝对路径或项目相对路径 | 在此项目外重用现有的Playwright客户端包 |
PLAYWRIGHT_EXECUTABLE_PATH | 空 | 任何有效的浏览器二进制路径 | 在不安装捆绑浏览器的情况下启动现有的Chromium/Chrome可执行文件 |
PLAYWRIGHT_WS_ENDPOINT | 空 | 有效剧作家 ws:// / wss:// endpoint | 连接到现有的远程Playwright浏览器服务器 |
PLAYWRIGHT_CDP_ENDPOINT | 空 | 有效Chromium CDP端点 | 通过CDP连接到现有Chromium实例 |
PLAYWRIGHT_HEADLESS | true | true, false | Playwright Chromium是否在无头模式下运行 |
PLAYWRIGHT_NAVIGATION_TIMEOUT_MS | 20000 | 正整数 | Playwright导航和Bing结果等待超时 |
MCP_TOOL_SEARCH_NAME | search | 有效的MCP工具名称 | 搜索工具的自定义名称 |
MCP_TOOL_FETCH_LINUXDO_NAME | fetchLinuxDoArticle | 有效的MCP工具名称 | Linux.do文章获取工具的自定义名称 |
MCP_TOOL_FETCH_CSDN_NAME | fetchCsdnArticle | 有效的MCP工具名称 | CSDN文章获取工具的自定义名称 |
MCP_TOOL_FETCH_GITHUB_NAME | fetchGithubReadme | 有效的MCP工具名称 | GitHub README获取工具的自定义名称 |
MCP_TOOL_FETCH_JUEJIN_NAME | fetchJuejinArticle | 有效的MCP工具名称 | 爵金物品提取工具的自定义名称 |
MCP_TOOL_FETCH_WEB_NAME | fetchWebContent | 有效的MCP工具名称 | 通用web/Markdown获取工具的自定义名称 |
常见配置:
# Enable proxy for restricted regions
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 npx open-websearch@latest
# Only if a target website has a broken certificate chain
FETCH_WEB_INSECURE_TLS=true npx open-websearch@latest
# Request first, then fallback to Playwright if available
SEARCH_MODE=auto npx open-websearch@latest
# Force request-only Bing search
SEARCH_MODE=request npx open-websearch@latest
# Full configuration
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 PORT=8080 npx open-websearch@latest浏览器增强的Bing回退是可选的。已发布的软件包不再捆绑Playwright。使用以下设置之一手动启用它:
- 完整的本地Playwright安装:
npm install playwright
npx playwright install chromium
SEARCH_MODE=auto npx open-websearch@latest- 使用瘦客户端重用现有的浏览器二进制文件:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_EXECUTABLE_PATH=/path/to/chromium SEARCH_MODE=auto npx open-websearch@latest- 重复使用机器上其他地方已经存在的Playwright包:
PLAYWRIGHT_MODULE_PATH=/absolute/path/to/node_modules/playwright SEARCH_MODE=playwright npx open-websearch@latest- 连接到现有的远程浏览器:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_WS_ENDPOINT=ws://127.0.0.1:3000/ SEARCH_MODE=auto npx open-websearch@latest- 通过CDP重用本地Chrome/Chromium会话:
npm install playwright-core
# Start Chrome/Chromium with a debugging port first
chrome --remote-debugging-port=9222 --user-data-dir=/tmp/open-websearch-chrome
# Then connect through CDP
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_CDP_ENDPOINT=http://127.0.0.1:9222 SEARCH_MODE=auto npx open-websearch@latest当您想重用自己登录或以前验证的浏览器会话时,这是最实用的设置。
Windows PowerShell示例:
npm install playwright-core
& "$env:LOCALAPPDATA\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9222 `
--user-data-dir="$env:TEMP\open-websearch-chrome"
$env:PLAYWRIGHT_PACKAGE="playwright-core"
$env:PLAYWRIGHT_CDP_ENDPOINT="http://127.0.0.1:9222"
$env:SEARCH_MODE="auto"
npx open-websearch@latest模式行为:
request:仅使用基于请求的Bing抓取auto:首先尝试请求,只有在请求失败并且有可手动访问的Playwright客户端+浏览器可用时才回退到Playwrightplaywright:如果配置的Playwright客户端或浏览器目标不可用,则强制执行Playwright和错误
笔记:
PLAYWRIGHT_MODULE_PATH优先于PLAYWRIGHT_PACKAGEPLAYWRIGHT_WS_ENDPOINT优先于PLAYWRIGHT_CDP_ENDPOINT- 远程端点忽略
PLAYWRIGHT_EXECUTABLE_PATH以及本地代理启动标志 - 当Playwright可用时,被阻止的CSDN/知乎文章获取和通用网络获取也可以使用浏览器获取的Cookie重试
- 没有剧作家,
fetchWebContent停留在仅请求路径上。公共页面仍然可以工作,但需要浏览器Cookie或浏览器渲染HTML的页面可能会失败。
本地安装
- 克隆或下载此存储库
- 安装依赖项:
npm install这仅安装核心MCP服务器。浏览器回退仍然是可选的,直到您自己安装或连接Playwright客户端。 3.构建服务器:
npm run build- 将服务器添加到MCP配置中:
樱桃工作室:
{
"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(克劳德开发扩展):
{
"mcpServers": {
"web-search": {
"transport": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp"
}
},
"web-search-sse": {
"transport": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}克劳德桌面:
{
"mcpServers": {
"web-search": {
"type": "http",
"url": "http://localhost:3000/mcp"
},
"web-search-sse": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}NPX命令行配置:
{
"mcpServers": {
"web-search": {
"args": [
"open-websearch@latest"
],
"command": "npx",
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"ALLOWED_SEARCH_ENGINES": "duckduckgo,bing,exa"
}
}
}
}Windows NPX配置:
{
"mcpServers": {
"web-search": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"open-websearch@latest"
],
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"SYSTEMROOT": "C:/Windows"
}
}
}
}代理和TLS注意事项:
- openwebsearch现在在内部禁用Axios环境代理自动检测,只使用显式
USE_PROXY+PROXY_URL路径。 - 当
USE_PROXY=true,所有基于Axios的网络请求都遵循配置PROXY_URL路径,而不是将直接请求与环境代理行为混合。 - 如果
PROXY_URL指向本地基于规则的代理客户端,该客户端仍然可以决定去哪些目的地DIRECT以及哪些被代理。 - 如果
PROXY_URL指向固定的上游代理或海外出口,百度、CSDN、爵金、Linux.do或GitHub等区域敏感网站的行为可能与以前不同。 - 如果您的主机已经设置
HTTP_PROXY或HTTPS_PROXY,它们将不再覆盖服务器的内部请求行为。 - 更喜欢配置
NODE_EXTRA_CA_CERTS在Windows上,当站点缺少中间CA时。 - 使用
FETCH_WEB_INSECURE_TLS=true仅作为最后的手段fetchWebContent,因为它削弱了TLS验证。
Cherry Studio(Windows)的本地STDIO配置:
{
"mcpServers": {
"open-websearch-local": {
"command": "node",
"args": ["C:/path/to/your/project/build/index.js"],
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"ALLOWED_SEARCH_ENGINES": "duckduckgo,bing,exa"
}
}
}
}Docker部署
使用Docker Compose快速部署:
docker-compose up -d或者直接使用Docker:
docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/aas-ee/open-web-search:latest环境变量配置:
| 变量 | 默认值 | 选项 | 描述 |
|---|---|---|---|
ENABLE_CORS | false | true, false | 启用CORS |
CORS_ORIGIN | * | 任何有效的源 | CORS源配置 |
DEFAULT_SEARCH_ENGINE | bing | bing, duckduckgo, exa, brave | 默认搜索引擎 |
USE_PROXY | false | true, false | 启用HTTP代理 |
PROXY_URL | http://127.0.0.1:7890 | 任何有效的URL | 代理服务器URL |
PORT | 3000 | 1-65535 | 服务器端口 |
然后在MCP客户端中配置:
{
"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, fetchGithubReadme, fetchJuejinArticle,以及 fetchWebContent.
对于本地后台程序HTTP API(serve, status, GET /health, POST /search, POST /fetch-*),请参阅 docs/http-api.md.
搜索工具使用
{
"query": string, // Search query
"limit": number, // Optional: Number of results to return (default: 10)
"engines": string[], // Optional: Engines to use (bing,baidu,linuxdo,csdn,duckduckgo,exa,brave,juejin,startpage) default runtime-configured engine
"searchMode": string // Optional: request, auto, or playwright (currently only affects Bing)
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "search",
arguments: {
query: "search content",
limit: 3, // Optional parameter
engines: ["bing", "csdn", "duckduckgo", "exa", "brave", "juejin"] // Optional parameter, supports multi-engine combined search
}
})响应示例:
[
{
"title": "Example Search Result",
"url": "https://example.com",
"description": "Description text of the search result...",
"source": "Source",
"engine": "Engine used"
}
]fetchCstn文章工具用法
用于获取CSDN博客文章的完整内容。
{
"url": string // URL from CSDN search results using the search tool
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchCsdnArticle",
arguments: {
url: "https://blog.csdn.net/xxx/article/details/xxx"
}
})响应示例:
[
{
"content": "Example search result"
}
]fetchLinuxDoArticle工具用法
用于获取Linux.do论坛文章的完整内容。
{
"url": string // URL from linuxdo search results using the search tool
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchLinuxDoArticle",
arguments: {
url: "https://xxxx.json"
}
})响应示例:
[
{
"content": "Example search result"
}
]fetchGithubReadme工具用法
用于从GitHub存储库获取README内容。
{
"url": string // GitHub repository URL (supports HTTPS, SSH formats)
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchGithubReadme",
arguments: {
url: "https://github.com/Aas-ee/open-webSearch"
}
})支持的URL格式:
- HTTPS:
https://github.com/owner/repo - 带.git的HTTPS:
https://github.com/owner/repo.git - SSH:
git@github.com:owner/repo.git - 带参数的URL:
https://github.com/owner/repo?tab=readme
响应示例:
[
{
"content": "
\n\n# Open-WebSearch MCP Server..."
}
]fetchWebContent工具用法
直接从公共HTTP(S)链接获取内容,包括Markdown文件(.md)以及普通网页。
{
"url": string, // Public HTTP(S) URL
"maxChars": number // Optional: max returned content length (1000-200000, default 30000)
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchWebContent",
arguments: {
url: "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
maxChars: 12000
}
})响应示例:
{
"url": "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
"finalUrl": "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
"contentType": "text/plain; charset=utf-8",
"title": "",
"truncated": false,
"content": "# Open-WebSearch MCP Server ..."
}fetchjuejin文章工具使用
用于获取绝金文章的完整内容。
{
"url": string // Juejin article URL from search results
}使用示例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchJuejinArticle",
arguments: {
url: "https://juejin.cn/post/7520959840199360563"
}
})支持的URL格式:
https://juejin.cn/post/{article_id}
响应示例:
[
{
"content": "🚀 开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应..."
}
]使用限制
由于此工具通过抓取多引擎搜索结果来工作,请注意以下重要限制:
- 速率限制:
- 短时间内搜索过多可能会导致使用的引擎暂时阻止请求 - 建议: - 保持合理的搜索频率 - 明智地使用限制参数 - 必要时增加搜索之间的延迟
- 结果准确性:
- 取决于相应引擎的HTML结构,在引擎更新时可能会失败 - 某些结果可能缺少元数据(如描述) - 复杂的搜索运算符可能无法按预期工作
- 法律术语:
- 此工具仅供个人使用 - 请遵守相应发动机的服务条款 - 根据您的实际用例实施适当的速率限制
- 搜索引擎配置:
- 默认搜索引擎可以通过设置 DEFAULT_SEARCH_ENGINE 环境变量 - 支持的引擎:bing、duckduckgo、exa、dare - 搜索特定网站时使用默认引擎
- 代理配置:
- 当特定地区的某些搜索引擎不可用时,可以配置HTTP代理 - 使用环境变量启用代理 USE_PROXY=true - 使用配置代理服务器地址 PROXY_URL
贡献
欢迎提交问题报告和功能改进建议!
贡献者指南
如果你想分叉这个仓库并发布自己的Docker镜像,你需要进行以下配置:
GitHub机密配置
要启用自动Docker镜像构建和发布,请在GitHub存储库设置中添加以下机密(设置→ 秘密和变量→ 行动):
所需的秘密:
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容器注册表(ghcr.io)-始终启用 - 阿里云容器注册表-仅在配置ACR机密时启用
- 图像标记:
- ghcr.io/your-username/open-web-search:latest - your-acr-address/your-image-name:latest (如果配置了ACR)
分叉和发布步骤:
- 分叉存储库 转到您的GitHub帐户
- 配置机密 (如果您需要ACR发布):
- 前往设置→ 秘密和变量→ 分叉存储库中的操作 - 添加上面列出的ACR相关机密
- 推送更改 到
main分支或创建版本标记 - GitHub Actions将自动构建和推送 你的Docker镜像
- 使用您的图像,更新Docker命令:
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容器注册表
- 确保您的GitHub存储库已启用Actions
- 工作流将使用您的GitHub用户名(转换为小写)作为GHCR映像名称
明星历史
如果你觉得这个项目有帮助,请考虑给它一个⭐ 明星

