Skip to main content
Glama
WaynePluto

web-search-agent

by WaynePluto
README.md
[中文](./README.md) | [English](./README.en.md)

# Local Web Search Agent

为 Claude Code 和 OpenCode 提供网络搜索能力的 MCP Server,并附带 Claude Code 子代理模板。

## 简介

本项目通过 MCP (Model Context Protocol) 为 Claude Code 和 OpenCode 提供网络搜索能力。当 AI 编程代理需要查询实时信息或获取网络内容时,可以通过本项目进行搜索并返回准确答案。

### 架构概览

```
用户 → Claude Code(可选子代理)/ OpenCode → MCP Server → Bing 搜索
                                                    ↓
                                Chrome for Testing(页面渲染)
```

## 运行环境配置

本项目通过 Chrome for Testing 执行搜索和网页渲染。默认可执行文件路径为 `D:/app/chrome-win64/chrome.exe`;如果 Chrome 安装在其他位置,请在运行 MCP Server 前设置 `CHROME_PATH`:

```powershell
# Windows PowerShell(写入当前用户环境变量)
[Environment]::SetEnvironmentVariable("CHROME_PATH", "C:\path\to\chrome.exe", "User")
```

设置后请重新启动终端以及 Claude Code 或 OpenCode,使新环境变量生效。

```bash
# macOS / Linux
export CHROME_PATH="/path/to/chrome"
```

---

## 在 Claude Code 或 OpenCode 中使用

可以将本项目作为 MCP Server 接入 Claude Code 或 OpenCode;Claude Code 用户还可以使用配套的子代理模板。

### 方式一:作为 MCP Server 使用(Claude Code / OpenCode)

这种方式适用于你想在自己的项目中直接使用搜索工具。

1. **安装依赖**

   ```bash
   cd /path/to/local-web-search-agent
   npm install
   npm run build
   ```

2. **配置 MCP 客户端**

   **Claude Code**

在项目目录下创建或编辑 `.claude/settings.json`:

```json
{
  "mcpServers": {
    "local-web-search": {
      "command": "node",
      "args": ["/absolute/path/to/local-web-search-agent/build/index.js"]
    }
  }
}
```

**OpenCode**

在项目根目录创建或编辑 `opencode.json`。如需对所有项目生效,也可以使用全局配置文件 `~/.config/opencode/opencode.json`:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "local-web-search": {
      "type": "local",
      "command": ["node", "/absolute/path/to/local-web-search-agent/build/index.js"],
      "enabled": true
    }
  }
}
```

配置后可以检查 MCP Server 状态:

```bash
opencode mcp list
```

3. **使用工具**

   配置完成后,你可以在 Claude Code 或 OpenCode 中调用以下工具:
   - `web_search_bing`: 执行网络搜索
   - `read_webpage`: 读取网页内容
   - `get_current_time`: 获取当前时间信息

### 方式二:作为 Claude Code 子代理使用(推荐)

这种方式会让所有项目都能使用网络搜索能力,更方便。

1. **复制子代理模板**

   将 `src/agents/local-web-search-agent.md` 复制到全局 agents 目录:

   ```bash
   mkdir -p ~/.claude/agents
   cp src/agents/local-web-search-agent.md ~/.claude/agents/
   ```

2. **在你的项目中配置 MCP Server**

   在你的项目目录下创建或编辑 `.claude/settings.json`:

   ```json
   {
     "mcpServers": {
       "local-web-search": {
         "command": "node",
         "args": ["/absolute/path/to/local-web-search-agent/build/index.js"]
       }
     }
   }
   ```

3. **使用子代理**

   在 Claude Code 中,当需要网络搜索时:
   - 直接提问,让主代理自动判断并调用子代理
   - 或使用 `/agent local-web-search-agent` 命令明确指定

---

## 功能特性

- **Bing 搜索**: 支持国内版和国际版 Bing 搜索
- **网页内容提取**: 自动清洗网页内容,返回干净的 Markdown 格式
- **智能子代理**: 自动完成"搜索-阅读-总结"闭环
- **结果缓存**: 避免重复抓取同一页面
- **智能搜索技能**: 结构化搜索流程,提供多源验证的可靠结果

## 智能搜索技能 (Smart Search)

本项目提供了一个名为 `smart-search` 的技能,适用于需要高可靠性和结构化结果的搜索场景。

### 技能特点

- **多源验证**: 自动从多个官方渠道交叉验证信息
- **结构化输出**: 提供核心答案、来源链接和可信度评估
- **智能搜索策略**: 根据搜索类型自动优化关键词
- **时效性检查**: 自动验证信息的发布时间

### 使用方法

1. **复制技能模板**

   将 `src/skills/smart-search/SKILL.md` 复制到全局 skills 目录:

   ```bash
   mkdir -p ~/.claude/skills/smart-search
   cp src/skills/smart-search/SKILL.md ~/.claude/skills/smart-search/
   ```

   **注意**: Skill 的正确目录结构为 `~/.claude/skills/<skill-name>/SKILL.md`

2. **在 Claude Code 中使用**

   当需要进行可靠的信息搜索时:
   - 直接提问,让 Claude 自动判断
   - 或使用 `/smart-search` 命令明确指定

### 适用场景

| 场景         | 示例                            |
| ------------ | ------------------------------- |
| 查询软件版本 | "LayaAir 最新版本是多少?"      |
| 查找技术文档 | "React 19 的新特性有哪些?"     |
| 问题解决方案 | "Python pip 安装错误怎么解决?" |
| 最新动态     | "Claude 4 发布时间"             |

### 输出格式

智能搜索技能会返回结构化的结果,包括:

- **核心信息**: 直接回答你的问题
- **信息来源**: 多个可信来源的链接和关键信息
- **可信度评估**: 官方渠道确认、多源验证、时效性说明

## 工具说明

### web_search_bing

使用 Bing 搜索引擎执行网络搜索。

**参数**:

- `query` (string, 必需): 搜索关键词
- `num` (number, 可选): 返回结果数量,默认 10,最大 50
- `useInternational` (boolean, 可选): 是否使用 Bing 国际版,默认 false

**返回**:

```json
[
  {
    "title": "搜索结果标题",
    "url": "https://example.com",
    "snippet": "搜索结果摘要..."
  }
]
```

### read_webpage

访问指定 URL,提取并清洗页面正文内容。

**参数**:

- `url` (string, 必需): 要读取的网页 URL

**返回**:

```json
{
  "title": "网页标题",
  "markdown_content": "# 清洗后的 Markdown 内容"
}
```

### get_current_time

获取当前时间信息,包括当前年份、去年年份、前年年份等。用于搜索最新动态时动态获取年份信息。

**参数**: 无

**返回**:

```json
{
  "currentDateTime": "2026/2/26 10:30:00",
  "currentYear": 2026,
  "currentMonth": 2,
  "currentDay": 26,
  "lastYear": 2025,
  "yearBeforeLast": 2024,
  "isoDate": "2026-02-26T02:30:00.000Z"
}
```

## 子代理工作流程

local-web-search-agent 子代理会自动执行以下步骤:

1. 分析用户问题,提取核心关键词
2. 使用 `web_search_bing` 进行搜索
3. 判断最相关的搜索结果
4. 使用 `read_webpage` 阅读相关页面
5. 整合信息,生成简洁答案
6. 在回答末尾列出引用来源

## 使用示例

### 示例 1:查询实时信息

```
你:Python 最新版本是多少?
→ [主代理自动调用 local-web-search-agent]
→ Python 的最新稳定版本是 3.13.0,发布于 2024 年 10 月。
   来源:https://www.python.org/downloads/
```

### 示例 2:复杂查询

```
你:对比一下最近的两款热门轻薄本,给出选购建议。
→ [子代理进行多轮搜索和阅读]
→ [返回对比表格和购买建议]
```

## 项目结构

```
local-web-search-agent/
├── src/
│   ├── index.ts           # MCP Server 入口
│   ├── agents/
│   │   └── local-web-search-agent.md  # 子代理模板
│   ├── skills/
│   │   └── smart-search/
│   │       └── SKILL.md         # 智能搜索技能
│   └── tools/
│       ├── webSearchBing.ts     # Bing 搜索工具
│       ├── readWebpage.ts       # 网页读取工具
│       ├── currentTime.ts       # 当前时间工具
│       └── cache.ts             # 缓存工具
├── build/                  # 编译输出目录
├── package.json
└── tsconfig.json
```

## 开发

```bash
# 安装依赖
npm install

# 开发模式
npm run dev

# 编译
npm run build

# 监听模式编译
npm run watch
```

## 性能优化

### 缓存机制

- **搜索结果缓存**:5 分钟,避免重复搜索
- **网页内容缓存**:10 分钟,避免重复抓取
- **自动清理**:每分钟自动清理过期缓存

### 超时控制

- **搜索超时**:15 秒,防止搜索卡死
- **页面加载超时**:20 秒,防止页面加载过慢
- **页面评估超时**:5 秒,防止内容提取卡死

### 子代理限制

- 最多搜索 10 次
- 最多阅读 30 个页面
- 避免陷入死循环

## 技术栈

- **MCP SDK**: Model Context Protocol
- **Playwright**: 浏览器自动化
- **DOMPurify**: HTML 清洗
- **Turndown**: HTML 转 Markdown
- **TypeScript**: 类型安全

## 社区扩展 / Forks

本项目主线仅提供本地 Playwright + Bing 搜索路径,强调“本地浏览器 + 人工点击,避免登录外部账号”。  
如果你需要基于远程 API 的搜索方案(例如 Tavily),可以使用下面的社区 Fork:

- [Tavily-FDE/autopr--fork-web-search-agent](https://github.com/Tavily-FDE/autopr--fork-web-search-agent)  
  在本地 Bing 搜索基础上新增 `web_search_tavily` 工具,使用 Tavily API 进行搜索,需要配置 `TAVILY_API_KEY` 环境变量。适合需要更快速、稳定的 API 搜索且愿意注册 Tavily 账号的用户。

## 许可证

MIT

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: fetching current time, reading a webpage, and performing a web search. There is no functional overlap.

Naming Consistency4/5

All tools use snake_case and a verb_noun pattern. However, 'web_search_bing' includes the search engine name, which deviates slightly from the simpler 'get_' and 'read_' patterns.

Tool Count4/5

Three tools is on the lower end but appropriate for a focused web search agent. The core functionalities of search and page reading are covered, with an extra time utility.

Completeness3/5

The tool set covers basic web search and content retrieval, but lacks options like filtering by date, searching multiple engines, or managing search history. The time tool is a niche addition.

Maintenance

ActivitySlowing
ResponsivenessNo issues