Files
Jacob Whitaker Abrams 06cc75e349 Add ability to disable tools
Use "<disabled>" as the tool name to disable it.
2026-08-27 21:09:42 -07:00

34 KiB
Raw Permalink Blame History

Open-WebSearch

ModelScope smithery badge Version License Issues

🇨🇳 中文 | 🇺🇸 English

open-websearch 现已同时提供 MCP server、CLI 和本地 daemon,也可以配合 skill 引导的 agent 工作流一起使用,用于联网搜索与内容抓取,无需 API 密钥。

赞助商

Swiftproxy 提供高质量静态住宅代理,支持稳定 IP、多账号管理、防关联运营和数据采集,帮助用户打造更安全可靠的自动化环境。静态代理流量有效期 30 天内不限使用,使用优惠码 PROXY90 可享 9 折优惠。

点击展开查看简单示例效果(deepseek-v3)

🧩 示例开始

prompt:

使用websearch工具查询 《Open-WebSearch MCP》,用csdn引擎,查20条记录,告诉我工具返回的engine,以及相关信息,再通过url查询作者是Aasee的文章内容(如果有多篇顺序查询,不要同时查询)。规范输出


assistant:

我将使用MCP_search工具查询《Open-WebSearch MCP》并使用CSDN引擎获取20条记录。

查询结果分析

  1. 使用的搜索引擎: CSDN
  2. 总记录数: 20条

作者Aasee的文章列表

搜索结果显示有2篇作者是"Aasee."的文章:

  1. 文章标题: "开源 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-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-149000138-null-null.142^v102^pc_search_result_base6&utm_term=Open-WebSearch%20MCP 简介: 该项目为AI插件开发提供免费、可控的联网搜索能力,支持Bing、百度、CSDN多引擎组合搜索...

  2. 文章标题: "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-2allfirst_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条相关记录。

作者Aasee的相关文章内容

文章1: "开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应!"

🚀 开源 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

文章2: "Web Seach 搜索 MCP 启动!"

开源Web搜索MCP服务器Open-WebSearch上线,解决AI模型无法获取最新网络信息的问题。
该项目免费提供百度搜索结果API,支持结构化JSON返回格式,兼容Claude等AI工具的MCP协议。
用户仅需简单安装即可使用,无需API密钥...

需要查询其他Aasee作者的文章内容吗?我可以继续为您检索。

✅ 示例结束


功能特性

  • 使用多引擎搜索结果进行网络检索
    • bing
    • baidu
    • linux.do 暂不支持
    • csdn
    • duckduckgo
    • exa
    • brave
    • juejin
    • startpage
    • sogou
    • hackernews
  • 支持HTTP代理配置,轻松解决网络访问限制
  • 无需API密钥或身份验证
  • 返回带标题、URL和描述的结构化结果
  • 可配置每次搜索返回的结果数量
  • 可自定义默认搜索引擎
  • 支持获取单篇文章内容
    • csdn
    • github(README文件)
    • 通用 HTTP(S) 网页 / Markdown 内容

选择合适的入口

  • MCP
    • 适合接入 Claude Desktop、Cherry Studio、Cursor 或其他 MCP 客户端。
  • CLI
    • 适合一次性本地命令、shell 脚本和终端直用。
  • 本地 daemon
    • 适合需要复用的常驻本地 HTTP 服务,提供 status、GET /health、POST /search 和 POST /fetch-*。显式启动命令是 open-websearch serve,状态检查命令是 open-websearch status。
  • skill
    • 适合作为 agent 的引导层,帮助 agent 发现、启用并使用最小可行路径;skill 不替代 MCP、CLI 或本地 daemon,通常推荐与 CLI 和/或本地 daemon 搭配使用。

配合 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

请把安装代理和运行时代理分开理解:

  • 安装阶段代理 / 镜像
    • 用于 skill 或 agent 安装 open-websearch、playwright 等 npm 包时。
    • 在受限网络里,npm 自己的代理参数或 npm config 往往比通用 shell 代理变量更稳,例如:
npm --proxy http://127.0.0.1:7890 --https-proxy http://127.0.0.1:7890 install -g open-websearch
  • 运行时代理
    • 用于 daemon 已安装并准备执行联网 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

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。

TODO

  • 支持Bing(已支持),DuckDuckGo(已支持),Exa(已支持),Brave(已支持),Sogou(已支持),Hacker News(已支持),Google等搜索引擎
  • 支持更多博客论坛、社交软件
  • 优化文章内容提取功能,增加更多站点支持
  • 支持GitHub README获取(已支持)

安装指南

如果你是把 open-websearch 当作 MCP server 使用,请继续看下面的 MCP 安装方式。

NPX 快速启动(推荐)

最快的使用方式:

# 基本使用
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, linuxdo, juejin, startpage, sogou, hackernews 默认搜索引擎
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 校验,不影响 Playwright 浏览器导航。只建议在证书链异常时临时使用
MODE both both, http, stdio 服务器模式:同时支持HTTP+STDIO、仅HTTP或仅STDIO
PORT 3000 1-65535 服务器端口
ALLOWED_SEARCH_ENGINES 空(全部可用) 逗号分隔的引擎名称 限制可使用的搜索引擎,如默认搜索引擎不在范围,则默认第一个为默认搜索引擎
SEARCH_MODE auto request, auto, playwright 搜索策略,当前仅对 Bing 生效:强制 HTTP 请求模式(request)、强制 Playwright 模式(playwright)、或允许 Agent 选择模式(auto,默认)。强制模式不向 Agent 暴露 searchMode 参数。auto 模式下服务端会检查 Playwright 是否真实可用(客户端模块可真实加载,本地启动时还需浏览器二进制真实存在:显式 PLAYWRIGHT_EXECUTABLE_PATH、捆绑浏览器或系统 Chrome/Edge);可用时搜索工具暴露 searchMode 参数,并引导 Agent 保持默认 auto、仅在 request 结果失败或异常时再重试 playwright,不可用时按强制请求模式处理。强制 playwright 但不可用时,搜索返回 browser_unavailable 错误
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 结果等待超时时间
OPEN_WEBSEARCH_PROFILE_DIR <tmpdir>/open-websearch-browser-profiles 任意可写目录 本地浏览器持久化 profile 的根目录(见下方“浏览器状态说明”)
MCP_TOOL_SEARCH_NAME search 有效的MCP工具名称 搜索工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告
MCP_TOOL_FETCH_LINUXDO_NAME fetchLinuxDoArticle 有效的MCP工具名称 Linux.do文章获取工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告
MCP_TOOL_FETCH_CSDN_NAME fetchCsdnArticle 有效的MCP工具名称 CSDN文章获取工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告
MCP_TOOL_FETCH_GITHUB_NAME fetchGithubReadme 有效的MCP工具名称 GitHub README获取工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告
MCP_TOOL_FETCH_JUEJIN_NAME fetchJuejinArticle 有效的MCP工具名称 掘金文章获取工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告
MCP_TOOL_FETCH_WEB_NAME fetchWebContent 有效的MCP工具名称 通用网页/Markdown抓取工具的自定义名称;设为 <disabled>(bash/zsh 中需引号 '<disabled>',Windows cmd 中需双引号 "<disabled>")可禁用该工具。无效名称会回退到默认值并给出警告

常用配置示例:

# 启用代理(适用于网络受限地区)
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

# 将搜索工具重命名为 webSearch
MCP_TOOL_SEARCH_NAME=webSearch npx open-websearch@latest

# 禁用搜索工具
MCP_TOOL_SEARCH_NAME='<disabled>' 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

注意: <disabled> 包含 shell 特殊字符。bash/zsh 中需用单引号 '<disabled>',Windows cmd 中需用双引号 "<disabled>"。

浏览器增强 Bing 兜底现在是显式启用,不随发行包默认安装。你可以按下面几种方式手动启用:

  1. 本地完整安装 Playwright:
npm install playwright
npx playwright install chromium
SEARCH_MODE=auto npx open-websearch@latest
  1. 只安装精简客户端并复用现有浏览器:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_EXECUTABLE_PATH=/path/to/chromium SEARCH_MODE=auto npx open-websearch@latest
  1. 复用机器上其他位置已经安装好的 Playwright 包:
PLAYWRIGHT_MODULE_PATH=/absolute/path/to/node_modules/playwright SEARCH_MODE=playwright npx open-websearch@latest
  1. 连接现有远端浏览器:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_WS_ENDPOINT=ws://127.0.0.1:3000/ SEARCH_MODE=auto npx open-websearch@latest
  1. 通过 CDP 复用本地 Chrome/Chromium 会话:
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;搜索工具不暴露 searchMode 参数、不生成模式提示语
  • playwright:强制使用 Playwright;搜索工具不暴露 searchMode 参数、不生成模式提示语。启动时检查 Playwright 可用性并在配置无效时告警;搜索时返回清晰的 browser_unavailable 错误
  • auto:检查 Playwright 是否真实可用(客户端模块可真实加载;本地启动还需浏览器二进制真实存在)。可用时搜索工具暴露 searchMode 参数(request / auto / playwright),并引导 Agent 保持默认 auto,仅在 request 结果失败、为空或明显被拦截时再用 playwright 重试;不可用时按请求模式处理

补充说明:

  • PLAYWRIGHT_MODULE_PATH 优先级高于 PLAYWRIGHT_PACKAGE
  • PLAYWRIGHT_WS_ENDPOINT 优先级高于 PLAYWRIGHT_CDP_ENDPOINT
  • 使用远端端点时,会忽略 PLAYWRIGHT_EXECUTABLE_PATH 和本地启动代理参数
  • 当 Playwright 可用时,CSDN/知乎文章抓取以及通用网页抓取在遇到拦截页时也会尝试复用浏览器拿到的 cookie 进行重试
  • 没有 Playwright 时,fetchWebContent 会停留在纯请求路径。公开页面通常仍可抓取,但依赖浏览器 cookie 或浏览器渲染 HTML 的页面可能失败。

浏览器状态说明(本地共享 profile):

  • 本地浏览器模式会跨 fetch、跨进程重启复用持久化 context/页面。同一 origin 的 cookies、storage、cache 和 Service Worker 状态因此会在多次浏览器路径抓取之间保留。
  • 这对单用户、有状态抓取是有意为之的取舍(保持反爬状态、避免反复启动浏览器)。如果 daemon 会被多个互不信任的调用方共享,请改用 PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINT 连接各自隔离的浏览器,或为每个调用方指定独立的 OPEN_WEBSEARCH_PROFILE_DIR。
  • 此共享状态是服务级的,仅用于匿名访问公共网页:服务本身不会登录任何站点,因此不应承载个人账号密码与登录态,请勿依赖它存放已登录或个性化会话。远程端点(PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINT)会继承所连浏览器的状态,若将其指向个人已登录浏览器,该浏览器的登录态与个性化状态也会一并被本服务共享。
  • 如需清理 profile 状态:在本地浏览器未运行时,删除 OPEN_WEBSEARCH_PROFILE_DIR(默认为 <tmpdir>/open-websearch-browser-profiles)下的浏览器 profile 目录即可。

Windows 用户注意事项:

  • 在 PowerShell 中使用 $env:VAR="value"; 语法
  • 本地开发推荐使用 npx cross-env 实现跨平台兼容

本地安装

  1. 克隆或下载本仓库
  2. 安装依赖项:
npm install

这里只会安装核心 MCP 服务依赖,浏览器兜底能力仍然需要你手动安装或连接 Playwright 客户端。 3. 构建服务器:

npm run build
  1. 将服务器添加到您的MCP配置中:

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 校验强度,且不影响 Playwright 浏览器导航。

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):

{
  "mcpServers": {
    "open-websearch-local": {
      "command": "node",
      "args": ["C:/你的项目路径/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, baidu, csdn, linuxdo, juejin, startpage, sogou, hackernews 默认搜索引擎
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。

本地 daemon HTTP API(serve、status、GET /health、POST /search、POST /fetch-*)请参考 docs/http-api.md。

search工具使用说明

{
  "query": string,        // 搜索查询词
  "limit": number,        // 可选:返回结果数量(默认:10)
  "engines": string[],    // 可选:使用的引擎 (bing,baidu,linuxdo,csdn,duckduckgo,exa,brave,juejin,startpage,sogou,hackernews) 默认使用当前运行配置
  "searchMode": string    // 可选:request、auto 或 playwright(当前仅对 Bing 生效)
}

使用示例:

use_mcp_tool({
  server_name: "web-search",
  tool_name: "search",
  arguments: {
    query: "搜索内容",
    limit: 3,  // 可选参数
    engines: ["bing", "csdn", "duckduckgo", "exa", "brave", "juejin", "sogou"] // 可选参数,支持多引擎组合搜索
  }
})

返回示例:

[
  {
    "title": "示例搜索结果",
    "url": "https://example.com",
    "description": "搜索结果的描述文本...",
    "source": "来源",
    "engine": "使用的引擎"
  }
]

fetchCsdnArticle工具使用说明

用于获取CSDN博客文章的完整内容。

{
  "url": string    // search 工具使用csdn查询出的url
}

使用示例:

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchCsdnArticle",
  arguments: {
    url: "https://blog.csdn.net/xxx/article/details/xxx"
  }
})

返回示例:

[
  {
    "content": "示例搜索结果"
  }
]

fetchLinuxDoArticle工具使用说明

用于获取Linux.do论坛文章的完整内容。

{
  "url": string    // search 工具使用linuxdo查询出的url
}

使用示例:

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchLinuxDoArticle",
  arguments: {
    url: "https://xxxx.json"
  }
})

返回示例:

[
  {
    "content": "示例搜索结果"
  }
]

fetchGithubReadme工具使用说明

用于获取GitHub仓库的README文件内容。

{
  "url": string    // GitHub仓库URL(支持HTTPS、SSH格式)
}

使用示例:

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
  • HTTPS with .git: https://github.com/owner/repo.git
  • SSH: git@github.com:owner/repo.git
  • 带参数的URL: https://github.com/owner/repo?tab=readme

返回示例:

[
  {
    "content": "<div align=\"center\">\n\n# Open-WebSearch MCP Server..."
  }
]

fetchWebContent工具使用说明

用于直接抓取公开可访问的 HTTP(S) 链接内容,支持 Markdown 文件(.md)、普通网页,以及配置 Playwright 后的 JavaScript 渲染页面。

{
  "url": string,          // 公开可访问的 HTTP(S) URL
  "maxChars": number,     // 可选:最大返回字符数(1000-200000,默认30000)
  "renderMode": string,   // 可选:request、auto(默认)或 browser
  "readability": boolean, // 可选:对 HTML 使用 Mozilla Readability
  "includeLinks": boolean // 可选:保留 Readability 输出中的链接
}

request 不会启动浏览器或使用浏览器 Cookie;auto 保持现有的请求优先行为,仅在必要时使用浏览器辅助;browser 直接渲染页面,当 Playwright 或浏览器目标不可用时返回明确错误。初始 URL 和最终 URL 仍会经过公网安全校验。

浏览器请求会在继续前重新校验,但该进程不会把 DNS 结果绑定到 Chromium 最终建立的 Socket。远程 Playwright/CDP 端点仍必须使用可信的 DNS 与出站网络策略。

使用示例:

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,
    renderMode: "auto"
  }
})

返回示例:

{
  "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": "",
  "retrievalMethod": "request",
  "truncated": false,
  "content": "# Open-WebSearch MCP Server ..."
}

fetchJuejinArticle工具使用说明

用于获取掘金文章的完整内容。

{
  "url": string    // 掘金文章URL
}

使用示例:

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchJuejinArticle",
  arguments: {
    url: "https://juejin.cn/post/7520959840199360563"
  }
})

支持的URL格式:

  • https://juejin.cn/post/{文章ID}

返回示例:

[
  {
    "content": "🚀 开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应..."
  }
]

使用限制

由于本工具通过爬取多引擎搜索结果实现,请注意以下重要限制:

  1. 频率限制:

    • 短时间内搜索次数过多可能导致使用的引擎暂时屏蔽请求
    • 建议:
      • 保持合理的搜索频率
      • 审慎使用limit参数
      • 必要时可在搜索间设置延迟
  2. 结果准确性:

    • 依赖对应引擎的HTML结构,可能随引擎改版失效
    • 部分结果可能缺失描述等元数据
    • 复杂搜索运算符可能无法按预期工作
  3. 法律条款:

    • 本工具仅限个人使用
    • 请遵守对应引擎的服务条款
    • 建议根据实际使用场景实施适当的频率限制
  4. 搜索引擎配置:

    • 可通过环境变量DEFAULT_SEARCH_ENGINE设置默认搜索引擎
    • 支持的引擎有:bing, duckduckgo, exa, brave, baidu, csdn, linuxdo, juejin, startpage, sogou, hackernews
    • 当搜索特定网站内容时,会自动使用默认搜索引擎
  5. 代理服务配置:

    • 当某些搜索引擎在特定地区不可用时,可配置HTTP代理
    • 通过环境变量USE_PROXY=true启用代理
    • 使用PROXY_URL配置代理服务器地址

贡献指南

欢迎提交问题报告和功能改进建议!

贡献者指南

如果您想要fork本仓库并发布自己的Docker镜像,需要进行以下配置:

GitHub Secrets配置

要启用自动Docker镜像构建和发布功能,请在您的GitHub仓库设置中添加以下secrets(Settings → Secrets and variables → Actions):

必需的Secrets:

  • GITHUB_TOKEN: GitHub自动提供(无需设置)

可选的Secrets(用于阿里云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),会自动:

  1. 触发条件:

    • 推送到main分支
    • 推送版本标签(v*)
    • 手动触发workflow
  2. 构建并推送到:

    • GitHub Container Registry (ghcr.io) - 始终启用
    • 阿里云容器镜像服务 - 仅在配置ACR secrets时启用
  3. 镜像标签:

    • ghcr.io/您的用户名/open-web-search:latest
    • 您的ACR地址/您的镜像名:latest(如果配置了ACR)

Fork和发布步骤:

  1. Fork仓库到您的GitHub账户
  2. 配置secrets(如果需要ACR发布):
    • 进入您fork的仓库的Settings → Secrets and variables → Actions
    • 添加上面列出的ACR相关secrets
  3. 推送更改到main分支或创建版本标签
  4. GitHub Actions将自动构建并推送您的Docker镜像
  5. 使用您的镜像,更新Docker命令:
    docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/您的用户名/open-web-search:latest
    

注意事项:

  • 如果您不配置ACR secrets,工作流程将只发布到GitHub Container Registry
  • 确保您的GitHub仓库已启用Actions功能
  • 工作流程会使用您的GitHub用户名(转换为小写)作为GHCR镜像名称

Star History

如果项目对你有帮助,请考虑给个⭐ Star!

Star History Chart