MCP网络搜索工具
一 主控程序 服务器,为助手提供实时网络搜索、整页阅读和源引用。Stdio传输,可插拔提供程序,无刮刀依赖。
  ](https://nodejs.org)
快速启动 · 工具 · 配置 · 客户 · 安全 · 更新日志
______________________________________________________________________
概述
五种工具: web_search, news_search, image_search, fetch_url, list_providers搜索返回具有稳定ID的排名摘要; fetch_url 读取任何id后面的页面。Brave Search是主要提供商;DuckDuckGo在没有钥匙的情况下运行作为后备。
需求
| Node.js | >= 20.18 (使用本地 fetch) |
| npm | >= 10 |
| 勇敢搜索API密钥 | 可选。没有它,DuckDuckGo可以处理 web_search. news_search 和 image_search 需要钥匙。 |
快速启动
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块。错误返回为 isError: true 包含可操作信息的内容;只有未知的工具调用才会抛出协议错误。
web_search
实时网络搜索。首先使用当前的、有来源支持的答案。
| 参数 | 类型 | 说明 |
|---|---|---|
search_term | 字符串, 必需的 | 查询字符串 |
provider | enum | "brave search" 或 "duckduckgo".设置密钥时默认为Brave,否则默认为DuckDuckGo。 |
count | int(1–20) | 结果数。默认值10。 |
offset | int | 分页偏移量(仅限网页)。 |
cursor | string | 从上一个响应中隐藏光标。 |
freshness | 字符串 | pd (24小时), pw (周), pm (月), py (年份),或 YYYY-MM-DDtoYYYY-MM-DD. |
country | string | ISO国家代码。 |
search_lang | string | 用户界面语言,例如。 en. |
safesearch | enum | off, moderate, strict. |
include_domains | string\[\] | 将结果限制到这些主机。 |
exclude_domains | string\[\] | 从这些主机中删除结果(主机名后缀匹配)。 |
news_search
最近的新闻,包括来源名称和发布日期。只有勇敢。
image_search
带有缩略图的图像结果。只有勇敢。
fetch_url
读取搜索结果或任意 http(s) URL。传递之前搜索的结果id(首选)或完整URL。
| 参数 | 类型 | 说明 |
|---|---|---|
id_or_url | string | 结果id(例如。 r_a1b2c3d4e5f6)或一个完整的 http(s) URL。 |
url | string | 已弃用的别名 id_or_url. |
max_chars | int(200-200 000) | 返回字符的软上限。默认值为8000。 |
cursor | string | 从上一个响应中提取光标以继续读取。 |
返回页面标题、可读文本(脚本、样式、导航、页脚和侧边栏)、前25个出站链接、HTTP状态、内容类型、字节长度和 nextCursor 当被截断时。
拒绝不-http(s) 方案以及解析为私有、环回、链路本地、多播或IPv4映射的IPv6私有地址的任何主机。细节: SECURITY.md.
list_providers
返回已注册的提供程序和当前默认值。如果您不确定是否 news_search 或 image_search 在本次会议中可用。
______________________________________________________________________
配置
所有配置都是环境驱动的。参考: .env.example.
| 变量 | 默认值 | 用途 |
|---|---|---|
BRAVE_API_KEY | 空 | 勇敢搜索API键。未设置时,使用DuckDuckGo。 |
MAX_RESULTS | 10 | 默认结果计数(限1-50)。 |
REQUEST_TIMEOUT | 10000 | 每个请求的超时时间(毫秒)(1000–60000)。 |
DEFAULT_PROVIDER | auto | 强制特定提供者(例如。 duckduckgo). |
ALLOW_KEYLESS | true | 何时 false,服务器拒绝启动 BRAVE_API_KEY. |
CACHE_MAX_ENTRIES / CACHE_TTL_MS | 256 / 300000 | 搜索缓存。 |
FETCH_CACHE_MAX / FETCH_CACHE_TTL_MS | 128 / 600000 | URL获取缓存。 |
FETCH_TIMEOUT_MS / FETCH_MAX_BYTES | 15000 / 2000000 | 根据请求预算 fetch_url. |
______________________________________________________________________
项目布局
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 {
const out = this.emptyResponse(query, 'web');
out.results = mapped; // shape: SearchResult[]
return out;
}
}在中注册 SearchProviderFactory.setupDefaults.调用时会自动生成结果ID mintResultId(url) 在每个条目上。
______________________________________________________________________
发展
npm run dev # tsx watch mode
npm test # vitest (23 tests)
npm run lint
npm run format
npm run buildCI在Node 20、22和24上运行,以及Docker镜像构建。测试涵盖了LRU+TTL缓存、HTML提取器、DuckDuckGo解析器、搜索服务缓存、HTTP重试/回退、SSRF保护、域匹配和结果id解析器。
______________________________________________________________________
示例提示
- _“分析人士对今晚NBA比赛后的MVP争夺战有什么看法?”_
- _“总结以下三个结果
RAG benchmarks 2025并从第一篇论文中提取摘要。"_ - _“找到韦伯望远镜最新深场的图像,然后打开美国国家航空航天局页面并引用标题。”_
- _“柏林现在的天气怎么样?”_
______________________________________________________________________
许可证
开发者
靠近 索鲁什·优素福·普尔
©保留所有权利。
YouTube视频
带Claude的MCP Web搜索工具的简短演示:
中型文章
项目背景及其工作原理:
