内容
# 网络搜索MCP 🕸️
[](docs/web-search-mcp.png)
[](https://golang.org)
[](https://modelcontextprotocol.io)
[](LICENSE)
[](https://ollama.com)
[](https://duckduckgo.com)
**智能网络搜索MCP服务器 - 无需API密钥,本地运行AI驱动的语义分析**
---
## 💡 为什么存在这个项目及它的魔力
当AI助手需要从网络上查找信息时,典型的方法是浪费资源的:
[](docs/web-search-mcp-d1.png)
```
❌ 糟糕的方法(没有web-search-mcp):
AI: "为我找到2025年Go的趋势"
→ AI调用搜索引擎
→ AI读取所有页面全文
→ AI加载大量文本到上下文中
→ 浪费大量代币分析所有内容
→ 昂贵、缓慢、低效
```
使用 **web-search-mcp**,分析在本地进行:
```
✅ 好的方法(使用web-search-mcp):
AI: "为我找到2025年Go的趋势"
→ web_search_analyze:
├─ DuckDuckGo → 8个URL(0代币)
├─ chromedp + readability → 清洁文本(0代币)
└─ Ollama embedding → 语义排名(0代币!)
→ AI获得:[{url, title, 相关性:66%, 摘要}, ...]
→ AI选择仅1-2个最佳页面
→ AI读取仅全文(少量代币)
→ 快速、廉价、智能
```
**杀手锏:** 语义分析(比较查询含义与页面含义) - **在本地通过Ollama进行** - 它消耗零AI API代币! AI接收预先排名的列表,可以决定哪些页面需要阅读,而不必浪费数千字节的无用信息。
---
## 🚀 快速开始
### 1. 安装依赖
```bash
# Ollama + 嵌入模型(用于语义分析)
ollama pull embeddinggemma:latest
ollama serve
# Chromium(用于JavaScript渲染页面,可选)
# Arch: sudo pacman -S chromium
# Ubuntu: sudo apt install chromium-browser
# macOS: brew install chromium
```
### 2. 构建和运行
```bash
git clone https://github.com/kirill-scherba/web-search-mcp
cd web-search-mcp
go build -o web-search-mcp .
# 启动 - 服务器监听stdin/stdout的MCP
./web-search-mcp
```
### 3. 连接到Cline
将以下内容添加到您的Cline MCP设置文件中:
```json
{
"mcpServers": {
"web-search-mcp": {
"command": "/path/to/web-search-mcp",
"args": [],
"env": {},
"disabled": false,
"autoApprove": [
"web_search",
"web_search_analyze",
"web_fetch",
"web_semantic_search"
]
}
}
}
```
然后点击 **"重启MCP服务器"** 在Cline面板中或重新加载页面。
---
## 🎮 如何使用 - 示例
只需告诉AI您需要什么。工具会自动调用:
### 🔍 简单的URL搜索
```
用户: "查找关于2025年Go的信息"
AI调用: web_search("Go 2025 趋势", limit=8)
→ 获取: URL列表 + 摘要
→ 显示: 3个链接 + 描述
```
### 🏆 智能搜索与语义排名(节省代币!)
```
用户: "分析人们对Go趋势的看法"
AI调用: web_search_analyze("Go编程趋势 2025", limit=8)
→ 1. DuckDuckGo → 获取8个URL
→ 2. 下载每个页面(并行!)
→ 3. Ollama嵌入每个页面的文本
→ 4. Ollama嵌入查询
→ 5. 余弦相似度 → 按含义排名
→ 6. 将所有内容保存到数据库以供未来搜索
→ 返回: [{url, title, 相关性:66%, 摘要}, ...]
AI: "最相关的结果:
1. Go开发者调查 2025 — 66% 匹配
2. JetBrains Go生态系统 — 57%
3. GeeksForGeeks Go的未来 — 51%
需要我阅读第一篇文章吗?"
```
**魔力:** AI不会浪费代币分析所有页面 - 这项工作由本地Ollama完成。
### 📄 读取全文内容
```
用户: "打开开发者调查文章"
AI调用: web_fetch("https://go.dev/blog/survey2025")
→ 检查缓存(如果已获取 - 从数据库返回)
→ 如果没有: chromedp + readability → 清洁文本
→ 返回: 文章全文(18K字符)
→ AI读取并回答问题
```
### 🔎 索引内容上的语义搜索
```
用户: "关于Go的流行度有哪些内容?"
AI调用: web_semantic_search("Go开发者中的流行度")
→ Ollama嵌入查询
→ 搜索数据库中所有存储的块
→ 返回: 相关文本片段与匹配百分比
AI: "来自2025年Go开发者调查:
Go在开发者满意度中排名前5(相关性:48%)"
```
---
## 🛠️ 工具参考
| 工具 | 功能 | 何时使用 |
| ---------------------- | ------------------------------------------ | ------------------------------------------------ |
| `web_search` | 搜索DuckDuckGo,返回URL + 摘要 | 需要快速的链接列表 |
| `web_search_analyze` 🏆 | 搜索 + 获取 + 语义分析 | **主要工具!** 节省代币 |
| `web_fetch` | 获取页面,渲染JS,提取文本 | 需要特定页面的全文内容 |
| `web_semantic_search` | 索引内容上的语义搜索 | "关于X的内容是什么?" - 不需要重新谷歌搜索 |
---
## 💰 为什么这样可以节省代币
**没有web-search-mcp:**
1. AI → 搜索 → 获取HTML结果列表
2. AI → 读取第一个结果(全文HTML)
3. AI → 如果错误,读取第二个... 以此类推
4. 每个页面 = 数千代币
5. **总计:每次搜索10-50K代币**
**使用web-search-mcp:**
1. AI → `web_search_analyze` → 获取排名列表
2. AI选择 **1-2个最佳** 页面基于相关性
3. AI → `web_fetch` → 读取仅最佳页面
4. **总计:每次搜索3-5K代币** (10倍节省!)
---
## ⚙️ 配置
```bash
./web-search-mcp \
--db ~/.config/web-search-mcp/web_search.db \
--ollama-url http://localhost:11434 \
--embedding-model embeddinggemma:latest \
--chromium-path /usr/bin/chromium
# 或通过环境变量
export OLLAMA_BASE_URL=http://localhost:11434
export CHROME_PATH=/usr/bin/chromium
./web-search-mcp
```
### CLI标志
| 标志 | 默认 | 描述 |
| ------------------- | ---------------------------------------- | --------------------- |
| `--db` | `~/.config/web-search-mcp/web_search.db` | 数据库路径(缓存) |
| `--ollama-url` | `http://localhost:11434` | Ollama端点 |
| `--embedding-model` | `embeddinggemma:latest` | 嵌入模型 |
| `--chromium-path` | 自动检测 | Chromium二进制路径 |
| `-h` | — | 帮助 |
---
## 🏗️ 架构
```
┌─────────────────────┐
│ MCP客户端(AI) │
└──────────┬──────────┘
│ JSON-RPC / stdin-stdout
┌──────────▼──────────┐
│ web-search-mcp │
│ ┌────────────────┐ │
│ │ web_search │─┼──→ DuckDuckGo
│ ├────────────────┤ │
│ │ web_fetch │─┼──→ chromedp + readability
│ ├────────────────┤ │
│ │ search_analyze│─┼──→ 搜索 + 获取 + 嵌入
│ ├────────────────┤ │
│ │ semantic_search│─┼──→ 向量搜索(libSQL)
│ └────────────────┘ │
└──────┬────────┬─────┘
│ │
┌──────▼┐ ┌────▼──────┐
│Ollama │ │ libSQL │
│嵌入 │ │ (缓存) │
└───────┘ └───────────┘
```
**堆栈:** Go + chromedp + go-readability + Ollama + go-libsql + mcp-go
**传输:** stdin/stdout(JSON-RPC 2.0)
**许可证:** MIT
---
## 🎨 Logo提示
将此提示发送给Gemini或任何图像生成AI以创建该项目的徽标:
> **web-search-mcp的简约徽标 - 一个用于智能网络搜索的MCP服务器。**
>
> 一个风格化的蜘蛛网(代表“网络”和“MCP”)在中心有一个放大镜。蜘蛛网用细致、干净的青色/蓝色线条在暗色背景上绘制。 在中心,放大镜与蜘蛛网交叉点重叠 - 镜头包含一个微妙的光泽效果,象征着“智能”和“AI”。 样式是扁平的矢量,现代,赛博朋克风格。 不需要文本。 简单的图标,适合128x128的应用图标。
>
> 样式: 扁平矢量,暗色主题,青色/蓝色强调色调(#00ADD8代表Go,#3B82F6)。 线条最少,科技美学。
---
## 🧪 快速测试
```bash
# 直接测试(无需MCP)
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' | timeout 3 ./web-search-mcp 2>/dev/null
# 如果您看到4个工具 - 一切正常!
```
---
## 许可证
MIT © Kirill Scherba
---
*使用Go + chromedp + go-readability + Ollama + go-libsql + mcp-go构建。*