mcpField
O
Open Websearch

Open Websearch

本地服务
github.com/Aas-ee搜索与检索1.9k3 周前更新

关于 Open Websearch

Open Websearch 是一个 MCP 服务、命令行工具和本地守护进程,可在无需 API 密钥的情况下聚合多个搜索引擎结果,并抓取网页或文章内容。适合需要实时联网检索的 AI Agent 和开发者。

主要功能

  1. 01多搜索引擎聚合,无需 API 密钥
  2. 02支持 Bing、Baidu、DuckDuckGo、Brave 等引擎
  3. 03返回包含标题、URL 和摘要的结构化结果
  4. 04抓取单篇文章与通用网页的 Markdown 内容
  5. 05可配置 HTTP 代理与默认搜索引擎

适用场景

  1. 01为 MCP 客户端提供实时网页搜索能力
  2. 02在命令行或脚本中执行一次性搜索
  3. 03通过本地守护进程为多次调用提供 HTTP 接口

MCP 相关

以 MCP 服务形式运行,向 MCP 客户端暴露搜索与内容抓取工具,工具名称可通过环境变量自定义或禁用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"open-webSearch": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ENABLE_CORS",
"-e",
"CORS_ORIGIN",
"ghcr.io/aas-ee/open-web-search:latest"
],
"env": {
"ENABLE_CORS": "<ENABLE_CORS>",
"CORS_ORIGIN": "<CORS_ORIGIN>"
}
}
}
}
启动命令docker run -i --rm -e ENABLE_CORS -e CORS_ORIGIN ghcr.io/aas-ee/open-web-search:latest
需要配置的环境变量
ENABLE_CORS
CORS_ORIGIN

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/aas-ee/open-web-search:latest

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Open-WebSearch

ModelScope smithery badge Version License Issues

🇨🇳 中文 | 🇺🇸 English

open-websearch 提供 MCP 服务、CLI 和本地守护进程,也可搭配技能引导的 Agent 工作流,无需 API 密钥即可实时搜索网页和检索内容。

赞助商

Swiftproxy 提供高质量的静态住宅代理,IP 稳定,适用于多账号管理、自动化、网页抓取和安全的在线操作。使用纯净 IP 和可靠的代理基础设施保护您的账号。静态代理流量有效期为 30 天,使用量不限。使用优惠码 PROXY90 可享 10% 折扣。

功能

  • 使用多引擎结果进行网页搜索
    • bing
    • baidu
    • linux.do 暂不支持
    • csdn
    • duckduckgo
    • exa
    • brave
    • juejin
    • startpage
    • sogou
    • hackernews
  • 支持配置 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
    • 最适合作为面向 Agent 的配置和使用指南层。技能不能替代 MCP、CLI 或本地守护进程;它通常与 CLI 和/或本地守护进程配合使用,帮助 Agent 找到、启用并使用最精简可行的方案。

与 Skill 配合使用

请先为 Agent 安装 open-websearch Skill:

npx skills add https://github.com/Aas-ee/open-webSearch --skill open-websearch

首次使用时,Skill 通常会先检测是否已有可用的 open-websearch 路径;如果没有,则引导完成设置和启用,验证功能已激活后,再通过最精简的可行路径继续搜索或抓取。

如果当前环境无法自动完成设置或激活,可以明确让 Agent 先启动本地守护进程:

open-websearch serve
open-websearch status

请将安装代理设置与运行时代理设置分开:

  • 安装代理 / 镜像
    • 在 Skill 或 Agent 安装 open-websearch、playwright 或其他 npm 包时使用。
    • 在受限网络中,相较于通用 Shell 代理变量,npm 专用标志或 npm 配置通常效果更好,例如:
npm --proxy http://127.0.0.1:7890 --https-proxy http://127.0.0.1:7890 install -g open-websearch
  • 运行时代理
    • 在守护进程已安装、即将执行实时 search / fetch 操作时使用。
    • 这会影响 serve 启动后 open-websearch 的网络流量,例如:
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 open-websearch serve

如果 Agent 只能通过 npm 代理设置完成软件包安装,但启动后实时搜索 / 抓取也需要代理,那么这是两个独立的配置步骤,应分别处理。

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 服务的入口点,并非推荐用于 Agent 自动化的守护进程启动命令。
  • 如需提取内容,建议先搜索,再抓取更具体的结果页面。部分主页和依赖大量 JS 的落地页可能无法通过 fetch-web 提取可读的文章文本。

本地守护进程 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 服务,请继续阅读下方的 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_CORSfalsetrue、false启用 CORS
CORS_ORIGIN*任意有效来源CORS 来源配置
DEFAULT_SEARCH_ENGINEbingbing、duckduckgo、exa、brave、baidu、csdn、linuxdo、juejin、startpage、sogou、hackernews默认搜索引擎
USE_PROXYfalsetrue、false启用 HTTP 代理
PROXY_URLhttp://127.0.0.1:7890任意有效 URL代理服务 URL
FAKE_IP_CIDRSempty以逗号分隔的 CIDR 列表将这些 CIDR 中的 DNS 应答视为合成的 fake-IP 结果,不会将其作为私有网络 DNS 应答拦截。字面量形式的私有/本地目标以及其他私有网络 DNS 应答仍会被拦截
FETCH_WEB_INSECURE_TLSfalsetrue、false仅对 fetchWebContent 的请求链路禁用 TLS 验证;不会影响 Playwright 浏览器导航。仅在证书链损坏时使用
MODEbothboth、http、stdio服务模式:HTTP+STDIO、仅 HTTP 或仅 STDIO
PORT30001-65535服务端口
ALLOWED_SEARCH_ENGINESempty (all available)以逗号分隔的引擎名称限制可用的搜索引擎;如果默认引擎不在此列表中,则第一个允许的引擎会成为默认引擎
SEARCH_MODEautorequest、auto、playwright搜索策略。目前仅影响 Bing:强制使用 HTTP 请求模式(request)、强制使用 Playwright 模式(playwright),或由 Agent 选择(auto,默认值)。强制模式不会向 Agent 暴露 searchMode 覆盖选项。在 auto 模式下,服务会检查 Playwright 是否确实可用(客户端模块能否实际加载;对于本地启动,还会检查是否存在真实浏览器二进制文件:显式指定的 PLAYWRIGHT_EXECUTABLE_PATH、随附的浏览器或系统 Chrome/Edge);如果可用,搜索工具会暴露 searchMode 参数,并指示 Agent 保持默认的 auto,仅在请求结果失败、为空或看起来遭到拦截时重试 playwright;否则其行为与强制请求模式相同。如果强制使用 playwright 但不可用,搜索会失败并返回 browser_unavailable 错误
PLAYWRIGHT_PACKAGEautoauto、playwright、playwright-core启用浏览器模式时要解析的 Playwright 客户端包
PLAYWRIGHT_MODULE_PATHempty绝对路径或相对于项目的路径复用此项目之外已有的 Playwright 客户端包
PLAYWRIGHT_EXECUTABLE_PATHempty任意有效的浏览器二进制文件路径启动已有的 Chromium/Chrome 可执行文件,无需安装随附的浏览器
PLAYWRIGHT_WS_ENDPOINTempty有效的 Playwright ws:// / wss:// 端点连接到已有的远程 Playwright 浏览器服务
PLAYWRIGHT_CDP_ENDPOINTempty有效的 Chromium CDP 端点通过 CDP 连接到已有的 Chromium 实例
PLAYWRIGHT_HEADLESStruetrue、falsePlaywright Chromium 是否以无头模式运行
PLAYWRIGHT_NAVIGATION_TIMEOUT_MS20000正整数Playwright 导航和 Bing 结果等待的超时时间
OPEN_WEBSEARCH_PROFILE_DIR<tmpdir>/open-websearch-browser-profiles任意可写目录持久化本地浏览器配置文件的基础目录(参见下方的浏览器状态说明)
MCP_TOOL_SEARCH_NAMEsearch有效的 MCP 工具名称自定义搜索工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
MCP_TOOL_FETCH_LINUXDO_NAMEfetchLinuxDoArticle有效的 MCP 工具名称自定义 Linux.do 文章抓取工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
MCP_TOOL_FETCH_CSDN_NAMEfetchCsdnArticle有效的 MCP 工具名称自定义 CSDN 文章抓取工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
MCP_TOOL_FETCH_GITHUB_NAMEfetchGithubReadme有效的 MCP 工具名称自定义 GitHub README 抓取工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
MCP_TOOL_FETCH_JUEJIN_NAMEfetchJuejinArticle有效的 MCP 工具名称自定义掘金文章抓取工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
MCP_TOOL_FETCH_WEB_NAMEfetchWebContent有效的 MCP 工具名称自定义通用网页/Markdown 抓取工具的名称;设置为 <disabled>(在 bash/zsh 中用 '<disabled>' 引用,在 Windows cmd 中用 "<disabled>" 引用)可禁用该工具。名称无效时会回退到默认值并显示警告
常见配置:
# 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

# Rename search tool to webSearch
MCP_TOOL_SEARCH_NAME=webSearch npx open-websearch@latest

# Disable search tool
MCP_TOOL_SEARCH_NAME='<disabled>' 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

注意: <disabled> 哨兵值包含 shell 特殊字符。在 bash/zsh 中,请将其写成 '<disabled>';在 Windows cmd 中,请使用双引号 "<disabled>"。

浏览器增强型 Bing 回退为可选功能。发布的软件包不再捆绑 Playwright。请通过以下任一配置手动启用:

  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

# 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 抓取;搜索工具不公开 searchMode 参数,也不提供模式指导
  • playwright:强制使用 Playwright;搜索工具不公开 searchMode 参数,也不提供模式指导。启动时会检查 Playwright 是否可用;如果配置无效,则会记录警告。之后搜索会失败,并返回清晰的 browser_unavailable 错误
  • auto:检查 Playwright 是否确实可用(客户端模块能否实际加载;对于本地启动,必须存在真实的浏览器二进制文件)。如果可用,搜索工具会公开 searchMode 参数(request / auto / playwright),并指导 Agent 保持使用默认的 auto,仅在 request 结果失败、为空或看起来遭到拦截时,才改用 playwright 重试;否则,服务的行为与 request 模式相同

注意:

  • PLAYWRIGHT_MODULE_PATH 优先于 PLAYWRIGHT_PACKAGE
  • PLAYWRIGHT_WS_ENDPOINT 优先于 PLAYWRIGHT_CDP_ENDPOINT
  • 远程端点会忽略 PLAYWRIGHT_EXECUTABLE_PATH 和本地代理启动标志
  • Playwright 可用时,遭到拦截的 CSDN/Zhihu 文章抓取和通用网页抓取也可以使用浏览器获取的 Cookie 重试
  • 没有 Playwright 时,fetchWebContent 会继续使用仅基于请求的路径。公共页面仍可能正常访问,但需要浏览器 Cookie 或由浏览器渲染的 HTML 的页面可能会失败。

浏览器状态注意事项(本地共享配置文件):

  • 本地浏览器模式会在多次抓取之间以及进程重启后复用持久化上下文/页面。因此,同一源的 Cookie、存储、缓存和 Service Worker 状态会在浏览器模式的抓取之间持续保留。
  • 这是有意设计的,适用于单用户、有状态的抓取(可保持反机器人状态,并避免反复启动浏览器)。如果要在相互不信任的调用方之间共享守护进程,请将这些调用方连接到隔离的浏览器,并使用 PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINT,而不要依赖本地共享配置文件;也可以为每个调用方指定各自的 OPEN_WEBSEARCH_PROFILE_DIR。
  • 此共享状态属于服务级别,仅用于匿名访问公共网页:服务本身不会登录网站,因此绝不应携带个人凭据。请勿依赖它存储已登录或个性化会话。远程端点(PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINT)会继承所连接浏览器的状态,因此,如果将其指向个人已登录的浏览器,该浏览器的登录和个性化状态也会与此服务共享。
  • 要清除配置文件状态,请在没有本地浏览器运行时,删除 OPEN_WEBSEARCH_PROFILE_DIR 下的浏览器配置文件目录(默认值:<tmpdir>/open-websearch-browser-profiles)。
本地安装
  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"
    }
  }
}

VSCode(Claude Dev Extension):

{
  "mcpServers": {
    "web-search": {
      "transport": {
        "type": "streamableHttp",
        "url": "http://localhost:3000/mcp"
      }
    },
    "web-search-sse": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:3000/sse"
      }
    }
  }
}

Claude Desktop:

{
  "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 说明:

  • open-websearch 现在会在内部禁用 Axios 对环境代理的自动检测,只使用显式的 USE_PROXY + PROXY_URL 路径。
  • 当 USE_PROXY=true 时,所有基于 Axios 的网络请求都会通过配置的 PROXY_URL 路径,而不会混用直接请求和环境代理行为。
  • 如果 PROXY_URL 指向本地基于规则的代理客户端,该客户端仍可自行决定哪些目标使用 DIRECT,哪些目标走代理。
  • 如果 PROXY_URL 指向固定的上游代理或海外出口,Baidu、CSDN、Juejin、Linux.do 或 GitHub 等对地区敏感的网站的表现可能会与之前不同。
  • 如果你的主机已设置 HTTP_PROXY 或 HTTPS_PROXY,这些变量将不再覆盖服务的内部请求行为。
  • 如果某个网站缺少中间 CA,建议在 Windows 上配置 NODE_EXTRA_CA_CERTS。
  • 仅在万不得已时,才将 FETCH_WEB_INSECURE_TLS=true 用于 fetchWebContent 的请求环节;这会削弱 TLS 验证,但不会影响 Playwright 浏览器导航。

Cherry Studio 的本地 STDIO 配置(Windows):

{
  "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_CORSfalsetrue、false启用 CORS
CORS_ORIGIN*任意有效来源CORS 来源配置
DEFAULT_SEARCH_ENGINEbingbing、duckduckgo、exa、brave、baidu、csdn、linuxdo、juejin、startpage、sogou、hackernews默认搜索引擎
USE_PROXYfalsetrue、false启用 HTTP 代理
PROXY_URLhttp://127.0.0.1:7890任意有效 URL代理服务 URL
FAKE_IP_CIDRS空以逗号分隔的 CIDR 列表将这些 CIDR 中的 DNS 答案视为合成的假 IP 结果,不会将其作为私有网络 DNS 答案拦截。字面形式的私有/本地目标以及其他私有网络 DNS 答案仍会被拦截
PORT30001-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。

search 工具用法
{
  "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,sogou,hackernews) 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", "sogou"] // 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"
  }
]
fetchCsdnArticle 工具用法

用于获取 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:[email protected]: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,          // Public HTTP(S) URL
  "maxChars": number,     // Optional: max returned content length (1000-200000, default 30000)
  "renderMode": string,   // Optional: request, auto (default), or browser
  "readability": boolean, // Optional: use Mozilla Readability for HTML
  "includeLinks": boolean // Optional: preserve links from Readability output
}

request 不会启动浏览器,也不会使用浏览器 Cookie。auto 会保留现有的优先使用请求的行为,仅在需要时借助浏览器。browser 会直接渲染页面;如果 Playwright 或其浏览器目标不可用,则会返回明确的错误。初始 URL 和最终 URL 仍需通过公共网络安全检查。

浏览器请求会在继续处理前重新验证,但此过程不会将 DNS 解析结果固定到 Chromium 最终使用的套接字。因此,远程 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    // 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 全新升级,支持多引擎 + 流式响应..."
  }
]

使用限制

由于此工具通过抓取多个搜索引擎的结果来工作,请注意以下重要限制:

  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 配置代理服务器地址
    • 对于 Clash fake-ip / TUN 设置,可使用 FAKE_IP_CIDRS 配置合成 DNS 范围(例如 198.18.0.0/15)

贡献

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

贡献者指南

如果你想 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*)
    • 手动触发工作流
  2. 构建并推送到:

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

    • ghcr.io/your-username/open-web-search:latest
    • your-acr-address/your-image-name:latest(如果已配置 ACR)
Fork 和发布步骤:
  1. 将仓库 Fork 到你的 GitHub 账户
  2. 配置密钥(如果需要发布到 ACR):
    • 前往你 Fork 的仓库中的 Settings → Secrets and variables → Actions
    • 添加上方列出的 ACR 相关密钥
  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/your-username/open-web-search:latest
    
注意:
  • 如果未配置 ACR 密钥,工作流只会发布到 GitHub Container Registry
  • 请确保你的 GitHub 仓库已启用 Actions
  • 工作流会使用你的 GitHub 用户名(转换为小写)作为 GHCR 镜像名称

Star 历史

如果你觉得这个项目有帮助,请考虑点亮 ⭐ Star!

Star 历史图表

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。