内容
# 搜索 MCP 服务器
> 为 AI 代理提供统一的 MCP 搜索工具 — 在几个简单的工具后面抽象出提供者、缓存、重新排序和速率限制。
## 工具列表
| 工具 | 用途 |
|------|---------|
| `search` | 具有缓存、重新排序和 6 个提供者故障转移的通用网络搜索 |
| `github_search` | 搜索 GitHub 仓库、代码、问题和用户 |
| `gitlab_search` | 搜索 GitLab 项目、问题、合并请求和代码块 |
| `status` | 服务器诊断、提供者健康、预算状态 |
## 快速入门
```bash
git clone <仓库网址> search-mcp
cd search-mcp
npm install
cp .env.example .env
npm run build
npm start
```
## 配置
复制 `.env.example` 到 `.env` 并设置您的 API 密钥。无需密钥 — DuckDuckGo 和 Bing 可以直接使用。
| 提供者 | 密钥要求 | 等级 | 速率限制 |
|----------|-------------|------|------------|
| DuckDuckGo | 否 | 1 | 10 请求/分钟 |
| Bing | 否 | 1 | — |
| Brave | `BRAVE_API_KEY` | 2 | 2000/月 |
| Tavily | `TAVILY_API_KEY` | 2 | 1000/月 |
| Exa | `EXA_API_KEY` | 3 | 试用 |
| Firecrawl | `FIRECRAWL_API_KEY` | 3 | 试用 |
## 查询格式
| 工具 | 模式 | 示例 |
|------|---------|---------|
| `search` | 通用网络搜索 | `typescript 教程`, `如何安装 docker` |
| `search` | GitHub 导向 | `repo:vercel/next.js`, `stars:>1000 language:rust` |
| `search` | 文档导向 | `express api 参考`, `docker compose 指南` |
| `search` | 新闻导向 | `react 19 发布说明`, `最新 AI 新闻` |
| `github_search` | 原生 GitHub 搜索语法 | `repo:org/name`, `user:vercel`, `language:typescript` |
| `gitlab_search` | 原生 GitLab 搜索语法 | `project:org/name`, 通过 `type` 参数进行范围过滤 |
## 工具参考
### `search`
```typescript
search({
query: string,
include_content?: boolean // 以 Markdown 格式获取页面内容
})
```
返回来自前 2 个健康提供者的合并结果(并行),去重并按相关性重新排序。
意图分类自动运行(无 `intent` 参数)。服务器通过 NLI 零镜头(DeBERTa-v3-xsmall)检测查询意图(GitHub / 文档 / 新闻 / 网络)。
### NLI 重新排序
每个搜索结果都使用相同的 NLI 模型针对查询进行评分:
- **模型**:`Xenova/nli-deberta-v3-xsmall`(1.77 亿参数,ONNX 优化)
- **推理**:CPU 上每结果约 10–15 毫秒,20 个结果约 300 毫秒(并行)
- **分数**:`0.9 * NLI(query, snippet) + 0.04 * domain + 0.03 * freshness + 0.03 * position`
- **配置**:通过 `.env` 中的 `INTENT_CLASSIFIER_MODEL` 进行覆盖
NLI 模型在首次请求时惰性加载,并在意图分类和重新排序之间共享。
### `github_search`
```typescript
github_search({
query: string,
type?: "repositories" | "code" | "issues" | "users",
language?: string,
stars?: string, // 例如 ">1000", "500..5000"
page?: number
})
```
速率限制:无令牌时 60 请求/小时,有 `GITHUB_TOKEN` 时 5000 请求/小时。
### `gitlab_search`
```typescript
gitlab_search({
query: string,
scope?: "projects" | "issues" | "merge_requests" | "blobs",
page?: number
})
```
需要具有 `read_api` 作用域的 `GITLAB_TOKEN`。
### `status`
```typescript
status()
```
返回提供者健康状况、缓存统计、预算状态、正常运行时间。
## 架构
[流程图](docs/diagrams/search-pipeline-flow.md)
核心流程:`预算检查 → 规范化 → 分类(意图 + 新鲜度)→ 缓存 → 路由器(并行 2)→ 重新排序 → 缓存 → 响应`
完整文档:
- [架构](docs/architecture.md)
- [提供者与故障转移](docs/providers.md)
- [缓存](docs/caching.md)
- [重新排序](docs/reranking.md)
- [获取层](docs/fetch-layer.md)
- [预算系统](docs/budget.md)
- [配置](docs/configuration.md)
- [路线图](docs/roadmap.md)
## 许可证
MIT