🇨🇳 中文 | 🇺🇸 English
open-websearch 现已同时提供 MCP server、CLI 和本地 daemon,也可以配合 skill 引导的 agent 工作流一起使用,用于联网搜索与内容抓取,无需 API 密钥。
点击展开查看简单示例效果(deepseek-v3)
使用websearch工具查询 《Open-WebSearch MCP》,用csdn引擎,查20条记录,告诉我工具返回的engine,以及相关信息,再通过url查询作者是Aasee的文章内容(如果有多篇顺序查询,不要同时查询)。规范输出
我将使用MCP_search工具查询《Open-WebSearch MCP》并使用CSDN引擎获取20条记录。
搜索结果显示有2篇作者是"Aasee."的文章:
文章标题: "开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应!" URL: https://blog.csdn.net/weixin_45801664/article/details/149000138?ops_request_misc=%257B%2522request%255Fid%2522%253A%252203ceec270907178223ab139631d9a81f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=03ceec270907178223ab139631d9a81f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-149000138-null-null.142^v102^pc_search_result_base6&utm_term=Open-WebSearch%20MCP 简介: 该项目为AI插件开发提供免费、可控的联网搜索能力,支持Bing、百度、CSDN多引擎组合搜索...
文章标题: "Web Seach 搜索 MCP 启动!" URL: https://blog.csdn.net/weixin_45801664/article/details/148813614?ops_request_misc=%257B%2522request%255Fid%2522%253A%252203ceec270907178223ab139631d9a81f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=03ceec270907178223ab139631d9a81f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-148813614-null-null.142^v102^pc_search_result_base6&utm_term=Open-WebSearch%20MCP 简介: 开源Web搜索MCP服务器Open-WebSearch上线,解决AI模型无法获取最新网络信息的问题...
我将先查询第一篇文章的全文内容:
使用了CSDN搜索引擎进行查询,返回了20条相关记录。
🚀 开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应!
💡「让你的 AI 插件真正能联网」—— 不需要 API Key,搜索结果可控、开箱即用!
项目亮点一览:
✅ 多引擎实时搜索:支持 Bing、百度、CSDN、DuckDuckGo、Exa、Brave
✅ 流式响应(MCP协议):兼容 Claude 插件(MCP)协议
✅ 文章正文抓取:支持提取 CSDN 博客文章全文
✅ 完全免费 & 无需 API Key
✅ Docker 一键部署
安装方法:
- Git克隆项目: git clone https://github.com/Aas-ee/open-webSearch
- 或使用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
MCP工具支持:
🔍 search:多引擎搜索工具
📄 fetchCsdnArticle:提取 CSDN 文章全文
🧪 fetchLinuxDoArticle:抓取 Linux.do 文章(开发中)
项目地址:
🧩 GitHub: https://github.com/Aas-ee/open-webSearch
📦 Docker: ghcr.io/aas-ee/open-web-search:latest
开源Web搜索MCP服务器Open-WebSearch上线,解决AI模型无法获取最新网络信息的问题。
该项目免费提供百度搜索结果API,支持结构化JSON返回格式,兼容Claude等AI工具的MCP协议。
用户仅需简单安装即可使用,无需API密钥...
需要查询其他Aasee作者的文章内容吗?我可以继续为您检索。
MCPCLI本地 daemonstatus、GET /health、POST /search 和 POST /fetch-*。显式启动命令是 open-websearch serve,状态检查命令是 open-websearch status。skill先给 agent 安装 open-websearch skill:
npx skills add https://github.com/Aas-ee/open-webSearch --skill open-websearch
首次使用时,skill 通常会先检测当前环境里是否已经有可用的 open-websearch path;如果没有,则先引导安装、启用和验证,确认 capability active 之后,再通过最小可行路径执行搜索或抓取。
如果当前环境里 agent 不能自动完成 setup 或 activation,你也可以明确让它先启动本地 daemon:
open-websearch serve
open-websearch status
请把安装代理和运行时代理分开理解:
open-websearch、playwright 等 npm 包时。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 代理,而 daemon 启动后联网 search/fetch 也需要代理,那么这两步要分别处理,不要混成同一种代理设置。
CLI 用于一次性执行。本地 daemon 是常驻的本地 HTTP 服务,适合重复调用并减少冷启动摩擦。请用 open-websearch serve 显式启动 daemon,用 open-websearch status 显式检查状态。
search、fetch-web 这类 action commands 会在默认本地 daemon 可用时优先尝试走 daemon;如果显式传入 --daemon-url,则会固定走该 daemon 路径,并关闭静默回退到 direct execution 的行为。
先构建:
npm run build
启动本地 daemon:
npm run serve
# 全局安装后:open-websearch serve
查看状态:
npm run status -- --json
# 全局安装后:open-websearch status --json
执行一次性本地 CLI 搜索:
npm run search:cli -- "open web search" --json
说明:
- 裸命令 open-websearch 走的是 MCP server 兼容入口,不是 agent 自动化里推荐的 daemon 启动方式。
- 做正文提取时,优先先搜索,再对更具体的结果页调用 fetch-web。部分首页或重 JS 页面本身就不一定能提取出可读正文。
本地 daemon HTTP API(serve、status、GET /health、POST /search、POST /fetch-*)请参考 docs/http-api.md。
如果你是把 open-websearch 当作 MCP server 使用,请继续看下面的 MCP 安装方式。
最快的使用方式:
# 基本使用
npx open-websearch@latest
# 带环境变量(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-env,用于本地开发)
# 全局安装
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, sogou |
默认搜索引擎 |
USE_PROXY |
false |
true, false |
启用HTTP代理 |
PROXY_URL |
http://127.0.0.1:7890 |
任何有效URL | 代理服务器URL |
FETCH_WEB_INSECURE_TLS |
false |
true, false |
仅对 fetchWebContent 关闭 TLS 证书校验。只建议在目标站点证书链异常时临时使用 |
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 |
空 | 有效的 Playwright ws:// / wss:// 地址 |
连接现有远端 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工具名称 | 通用网页/Markdown抓取工具的自定义名称 |
常用配置示例:
# 启用代理(适用于网络受限地区)
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 npx open-websearch@latest
# 仅当目标网站证书链异常时使用
FETCH_WEB_INSECURE_TLS=true npx open-websearch@latest
# 先走请求,失败后再回退到 Playwright(如果已安装)
SEARCH_MODE=auto npx open-websearch@latest
# 强制仅使用请求模式
SEARCH_MODE=request npx open-websearch@latest
# 完整配置
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 兜底现在是显式启用,不随发行包默认安装。你可以按下面几种方式手动启用:
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_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
npm install playwright-core
# 先启动带调试端口的 Chrome/Chromium
chrome --remote-debugging-port=9222 --user-data-dir=/tmp/open-websearch-chrome
# 再通过 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 客户端和浏览器可用时才回退到 Playwright
- playwright:强制使用 Playwright;如果配置的 Playwright 客户端或浏览器目标不可用,会直接报错
补充说明:
- PLAYWRIGHT_MODULE_PATH 优先级高于 PLAYWRIGHT_PACKAGE
- PLAYWRIGHT_WS_ENDPOINT 优先级高于 PLAYWRIGHT_CDP_ENDPOINT
- 使用远端端点时,会忽略 PLAYWRIGHT_EXECUTABLE_PATH 和本地启动代理参数
- 当 Playwright 可用时,CSDN/知乎文章抓取以及通用网页抓取在遇到拦截页时也会尝试复用浏览器拿到的 cookie 进行重试
- 没有 Playwright 时,fetchWebContent 会停留在纯请求路径。公开页面通常仍可抓取,但依赖浏览器 cookie 或浏览器渲染 HTML 的页面可能失败。
Windows 用户注意事项:
- 在 PowerShell 中使用 $env:VAR="value"; 语法
- 本地开发推荐使用 npx cross-env 实现跨平台兼容
npm install
这里只会安装核心 MCP 服务依赖,浏览器兜底能力仍然需要你手动安装或连接 Playwright 客户端。 3. 构建服务器:
npm run build
Cherry Studio:
{
"mcpServers": {
"web-search": {
"name": "Web Search MCP",
"type": "streamableHttp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp"
}
}
}
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 说明:
- open-websearch 现在会在内部显式关闭 Axios 对环境变量代理的自动读取,只走 USE_PROXY + PROXY_URL 这条显式代理路径。
- 当 USE_PROXY=true 时,所有基于 Axios 的网络请求都会统一走配置的 PROXY_URL 路径,不再出现一部分请求直连、一部分请求读取环境变量代理的混合行为。
- 如果 PROXY_URL 指向的是本地规则代理客户端,该客户端仍然可以自行决定哪些目标走 DIRECT、哪些目标走代理。
- 如果 PROXY_URL 指向固定上游代理或固定出口,百度、CSDN、掘金、Linux.do、GitHub 这类对地区较敏感的站点表现可能会和之前不同。
- 如果系统里已经设置了 HTTP_PROXY 或 HTTPS_PROXY,它们不再覆盖服务器内部请求行为。
- Windows 上如果站点缺少中间证书,优先建议配置 NODE_EXTRA_CA_CERTS。
- FETCH_WEB_INSECURE_TLS=true 只建议作为 fetchWebContent 的兜底方案使用,因为它会降低 TLS 校验强度。
VSCode版(Claude开发扩展):
{
"mcpServers": {
"web-search": {
"transport": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp"
}
},
"web-search-sse": {
"transport": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}
Claude桌面版:
{
"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"
}
}
}
}
Cherry Studio 本地 STDIO 配置 (Windows): ```json { "mcpServers": { "open-websearch-local": { "command": "node", "args": ["C:/你的项目路径/build/index.js"], "env": { "MODE": "stdio", "DEFAULT_SEARCH_ENGINE": "duckduckgo", "ALLOWED_SEARCH_ENGINES": "duckduckgo,bi
$ claude mcp add open-webSearch \
-- python -m otcore.mcp_server <graph>