mcpField
M
MCP Web Search Tool

MCP Web Search Tool

本地服务
medium.com搜索与检索162 周前更新

关于 MCP Web Search Tool

MCP Web Search Tool 是一款 MCP 服务,为 AI 助手提供实时网页和新闻搜索、图片搜索及可读网页提取。它采用可插拔的搜索提供方,配置 Brave Search 时优先使用,否则可用 DuckDuckGo 搜索网页。

主要功能

  1. 01带筛选条件的实时网页搜索
  2. 02近期新闻与图片搜索
  3. 03从 URL 提取可读文本
  4. 04可插拔的搜索提供方
  5. 05DuckDuckGo 网页搜索备用方案
  6. 06含稳定 ID 的结构化结果

适用场景

  1. 01为助手回答查找最新信息
  2. 02搜索近期新闻并查看来源
  3. 03查找图片并阅读来源网页
  4. 04获取 URL 中的可读内容

MCP 相关

该 MCP 服务通过 stdio 向 MCP 客户端提供五种工具:web_search、news_search、image_search、fetch_url 和 list_providers。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"web-search-tool": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

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

安装包
ocibuild

工具

还没有获取到工具列表

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

详细介绍

MCP Web Search Tool

一个 MCP 服务,为助手提供实时网页搜索、整页阅读和来源引用。使用 Stdio 传输、支持可插拔的提供商,且不依赖抓取器。

Claude Desktop 示例

CI 许可证:MIT Node

快速开始 · 工具 · 配置 · 客户端 · 安全 · 更新日志


概述

提供五种工具:web_search、news_search、image_search、fetch_url、list_providers。搜索会返回带有稳定 ID 的排序摘要;fetch_url 可读取任意 ID 对应的页面。Brave Search 是主要提供商;DuckDuckGo 无需密钥即可作为备用选项运行。

要求

Node.js>= 20.18(使用原生 fetch)
npm>= 10
Brave Search API 密钥可选。未提供密钥时,DuckDuckGo 会处理 web_search。news_search 和 image_search 需要密钥。

快速开始

通过 npm:

npx -y mcp-web-search-tool

将 MCP 客户端指向带有参数 ["-y", "mcp-web-search-tool"] 的 npx,并通过客户端的 env 块传入 BRAVE_API_KEY。

从源代码运行:

git clone https://github.com/gabrimatic/mcp-web-search-tool.git
cd mcp-web-search-tool
npm install
cp .env.example .env   # edit BRAVE_API_KEY if you have one
npm run build
npm start

使用 Docker 运行:

docker build -t mcp-web-search .
docker run --rm -i -e BRAVE_API_KEY mcp-web-search

有关 Claude Desktop、Claude Code、Codex、VS Code、Cursor 或 Windsurf 的集成,请参阅 MCP_CLIENTS.md。


工具

搜索工具会返回不可信内容横幅、供模型使用的 Markdown 呈现内容,以及包含结构化数据的围栏 JSON 代码块;fetch_url 会返回易读的页面文本和链接块。发生错误时,会返回包含可执行提示的 isError: true 内容;只有调用未知工具时才会抛出协议错误。

web_search

实时网页搜索。优先用于获取当前信息且有来源支持的答案。

参数类型描述
search_termstring,必填查询字符串。
providerenum"brave search" 或 "duckduckgo"。设置了密钥时默认为 Brave,否则默认为 DuckDuckGo。
countint(1–20)结果数量。默认值为 10。
offsetint分页偏移量(仅限网页搜索)。
cursorstring来自先前响应的不透明游标。
freshnessstringpd(24 小时)、pw(一周)、pm(一个月)、py(一年)或 YYYY-MM-DDtoYYYY-MM-DD。
countrystringISO 国家代码。
search_langstringUI 语言,例如 en。
safesearchenumoff、moderate、strict。
include_domainsstring[]将结果限制为这些主机。
exclude_domainsstring[]排除来自这些主机的结果(按主机名后缀匹配)。
news_search

近期新闻,包含来源名称和发布日期。仅限 Brave。

image_search

包含缩略图的图片结果。仅限 Brave。

fetch_url

读取搜索结果或任意 http(s) URL。传入先前搜索返回的结果 ID(首选)或完整 URL。

参数类型描述
id_or_urlstring结果 ID(例如 r_a1b2c3d4e5f6)或完整的 http(s) URL。
urlstringid_or_url 的已弃用别名。
max_charsint(200–200 000)返回字符数的软上限。默认值为 8000。
cursorstring来自先前响应的游标,用于继续阅读。

返回页面标题、易读文本(移除脚本、样式、导航、页脚和侧边栏)、前 25 个外链、HTTP 状态、内容类型、字节长度,以及内容被截断时的 nextCursor。

拒绝非 http(s) 协议,以及解析为私有、环回、链路本地、多播或 IPv4 映射 IPv6 私有地址的任何主机。详情:SECURITY.md。

list_providers

返回已注册的提供方和当前默认提供方。如果不确定本次会话是否可用 news_search 或 image_search,请调用一次。


配置

所有配置均由环境变量控制。参考: .env.example。

变量默认值用途
BRAVE_API_KEY空Brave Search API 密钥。未设置时使用 DuckDuckGo。
MAX_RESULTS10默认结果数量(限制在 1–50 之间)。
REQUEST_TIMEOUT10000每个请求的超时时间,单位为 ms(1 000–60 000)。
DEFAULT_PROVIDERauto强制使用指定的提供方(例如 duckduckgo)。
ALLOW_KEYLESStrue设为 false 时,如果未设置 BRAVE_API_KEY,服务将拒绝启动。
CACHE_MAX_ENTRIES / CACHE_TTL_MS256 / 300000搜索缓存。
FETCH_CACHE_MAX / FETCH_CACHE_TTL_MS128 / 600000URL 抓取缓存。
FETCH_TIMEOUT_MS / FETCH_MAX_BYTES15000 / 2000000fetch_url 每个请求的预算。
RESULT_ID_CACHE_MAX / RESULT_ID_TTL_MS2000 / 3600000fetch_url 可解析的结果 ID 数量及其有效时长。

项目结构

src/
├── index.ts                    MCP server: tool registry, dispatch, rendering
├── config.ts                   env loader, validation, defaults
├── providers/
│   ├── SearchProvider.ts       abstract contract and shared types
│   ├── SearchProviderFactory   registry and default selection
│   ├── BraveSearchProvider     web/news/images via Brave API
│   └── DuckDuckGoProvider      keyless HTML-lite fallback
├── services/
│   ├── SearchService.ts        provider dispatch, LRU+TTL cache
│   └── FetchService.ts         safe URL fetch, readable extraction
└── utils/
    ├── http.ts                 native fetch, retry/backoff/timeout
    ├── html.ts                 zero-dep HTML to text + links
    ├── cache.ts                LRU+TTL cache
    └── ids.ts                  stable result-id minting and resolution
tests/                          vitest suite
添加提供方
import { SearchProvider, SearchResponse, SearchOptions } from './SearchProvider.js';

export class MyProvider extends SearchProvider {
  getName() { return 'My Provider'; }
  override requiresApiKey() { return true; }
  async search(query: string, _opts: SearchOptions = {}): Promise<SearchResponse> {
    const out = this.emptyResponse(query, 'web');
    out.results = mapped; // shape: SearchResult[]
    return out;
  }
}

在 SearchProviderFactory.setupDefaults 中注册。调用每个条目的 mintResultId(url) 时,会自动生成结果 ID。


开发

npm run dev          # tsx watch mode
npm test             # vitest suite
npm run lint         # eslint + prettier
npm run typecheck    # tsc --noEmit
npm run format
npm run build

CI 会在 Node 22 和 24 上运行 lint、格式检查、类型检查、构建和测试;当镜像输入发生变化时,会构建 Docker 镜像。测试涵盖 LRU+TTL 缓存、HTML 提取器、DuckDuckGo 解析器、搜索服务缓存、HTTP 重试/退避、SSRF 防护、域名匹配和结果 ID 解析器。


提示词示例

  • “今晚的 NBA 比赛结束后,分析师们对 MVP 之争有何看法?”
  • “总结 RAG benchmarks 2025 的前三条结果,并提取第一篇论文的摘要。”
  • “查找 Webb telescope 最新深空场的图片,然后打开 NASA 页面并引用图片说明。”
  • “柏林现在的天气怎么样?”

许可证

MIT 许可证

开发者

作者:Soroush Yousefpour

© 保留所有权利。

YouTube 视频

Claude 使用 MCP Web Search Tool 的简短演示:

Claude + MCP Web Search – 现场演示

Medium 文章

项目背景及其工作原理:

MCP Web Search Tool 深入解析

支持

请我喝杯咖啡

评论

支持 Markdown

第一次接触 MCP?

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

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