Milvus MCP Server
by hcheng666
README.md
# Milvus MCP Server
本程序是一个为大语言模型设计、遵循 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 协议的 Milvus 向量数据库接入服务。它可以作为大语言模型(如 Antigravity)的外部向量数据库交互工具。
支持 **Milvus 2.6** 向量数据库,内置 **OpenAI 兼容的 Embedding 服务**(如通义千问 text-embedding-v4),让大模型可以直接用自然语言进行语义搜索。
---
## 💡 功能亮点
1. **向量搜索**:支持文本输入的语义搜索(自动 Embedding)和原始向量搜索。
2. **内置 Embedding**:集成 OpenAI 兼容端点,大模型传入文本即自动转换为向量,无需外部 Embedding 服务。
3. **Collection 全生命周期管理**:创建、查看、删除 Collection,创建时自动建索引并加载。
4. **数据读写**:支持向量数据插入和按条件删除。
5. **多连接管理**:通过 JSON 配置文件定义多个命名连接,一个 MCP Server 实例即可服务多个 Milvus 实例。
6. **安全设计**:`drop_collection` 和 `delete_entities` 作为独立工具可在 MCP 客户端单独开关;`drop_collection` 额外需要 `confirmDrop=true` 参数做双重保险。
7. **混合搜索**:支持向量相似度搜索 + 标量过滤的组合查询。
---
## ⚙️ 运行环境要求
1. **Node.js 环境**:要求 Node.js 版本为 **v18 或更高版本**。
2. **Milvus 实例**:需要可访问的 Milvus 2.6 服务实例。
3. **Embedding API**:需要一个 OpenAI 兼容的 Embedding 服务端点(如通义千问百炼平台)。
4. **依赖包**:在运行机器上需要执行 `npm install --omit=dev` 安装依赖。
---
## 🛠 安装与构建
### 1. 源码构建
```bash
npm install
npm run build
```
编译产物会存放在 `./dist` 目录中。
### 2. 全局本地安装
```bash
npm link
```
执行完毕后,可以在系统任意处使用全局命令 `milvus-mcp-server` 快速唤起该服务。
---
## 📝 配置文件
使用 JSON 文件配置 Milvus 连接和 Embedding 服务。
### 配置文件示例
```json
{
"connections": [
{
"name": "my-milvus",
"address": "localhost:19530",
"username": "root",
"password": "Milvus",
"database": "default",
"description": "本地开发 Milvus 实例,存储文档和图片的向量索引"
}
],
"embedding": {
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"apiKey": "sk-your-api-key",
"model": "text-embedding-v4",
"dimensions": 1024
}
}
```
### 连接字段说明
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `name` | string | ✅ | 连接的唯一标识名称 |
| `address` | string | ✅ | Milvus 服务地址,格式 `host:port` |
| `username` | string | ✅ | 用户名 |
| `password` | string | ✅ | 密码 |
| `database` | string | ❌ | 数据库名,默认 `"default"` |
| `description` | string | ❌ | 连接的业务描述 |
### Embedding 字段说明
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `baseUrl` | string | ✅ | OpenAI 兼容 API 端点 |
| `apiKey` | string | ✅ | API Key |
| `model` | string | ✅ | 模型名称,如 `"text-embedding-v4"` |
| `dimensions` | number | ✅ | 输出向量维度。text-embedding-v4 支持:2048, 1536, 1024, 768, 512, 256, 128, 64 |
---
## 🚀 启动与使用
```bash
milvus-mcp-server --config <path-to-config.json>
```
**参数列表:**
- `-c, --config <path>`:配置文件路径(必填)。
---
## 🧠 MCP 客户端配置示例
以常规 MCP Client(如 Antigravity)的配置为例:
```json
{
"mcpServers": {
"MilvusMCP": {
"command": "node",
"args": [
"绝对路径/milvus_mcp_server/dist/index.js",
"--config", "绝对路径/milvus-config.json"
]
}
}
}
```
---
## 🧰 模型所能调用的工具 (Tools)
### 1. `list_milvus_connections`
- **说明**:列出所有配置的 Milvus 连接信息(脱敏,不含密码)。
- **参数**:无。
### 2. `list_collections`
- **说明**:列出指定连接下所有的 Collection。
- **参数**:
- `connectionName` (String): 目标连接名称。
### 3. `describe_collection`
- **说明**:获取 Collection 的详细 schema 信息,包含字段定义、索引、行数统计。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): Collection 名称。
### 4. `create_collection`
- **说明**:创建新 Collection。自动为向量字段创建 AUTOINDEX 索引并加载 Collection,使其立即可搜索。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 新 Collection 名称。
- `description` (String, 可选): Collection 描述。
- `fields` (Array): 字段定义数组,每项包含 `name`, `dataType`, `isPrimaryKey?`, `autoId?`, `dimension?`, `maxLength?`, `description?`。
### 5. `drop_collection`
- **说明**:永久删除一个 Collection 及其所有数据。不可逆操作。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 要删除的 Collection 名称。
- `confirmDrop` (Boolean): **必须设为 `true`** 才能执行删除。安全双重确认机制。
- **开关控制**:该工具可在 MCP 客户端中单独启用或禁用。
### 6. `insert_vectors`
- **说明**:向 Collection 插入数据。每条数据为一个 JSON 对象,包含各字段值(包括向量字段)。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 目标 Collection 名称。
- `data` (Array): 数据数组。
### 7. `delete_entities`
- **说明**:按过滤表达式删除实体。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 目标 Collection 名称。
- `filter` (String): Milvus 过滤表达式,如 `'id in [1, 2, 3]'`。
- **开关控制**:该工具可在 MCP 客户端中单独启用或禁用。
### 8. `vector_search`
- **说明**:向量相似度搜索。支持传入文本(自动调用 Embedding 服务转为向量)或原始向量。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 目标 Collection 名称。
- `text` (String, 可选): 搜索文本,与 `vector` 二选一。
- `vector` (Number[], 可选): 原始搜索向量,与 `text` 二选一。
- `topK` (Number, 可选): 返回条数,默认 10。
- `filter` (String, 可选): 标量过滤表达式。
- `outputFields` (String[], 可选): 要返回的字段列表。
### 9. `query_entities`
- **说明**:按标量条件查询实体,不涉及向量搜索。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 目标 Collection 名称。
- `filter` (String): Milvus 过滤表达式。
- `outputFields` (String[], 可选): 要返回的字段列表。
- `limit` (Number, 可选): 最大返回条数,默认 100。
### 10. `hybrid_search`
- **说明**:向量搜索 + 标量过滤的组合查询。与 `vector_search` 的区别在于 `filter` 为必填参数。
- **参数**:
- `connectionName` (String): 目标连接名称。
- `collectionName` (String): 目标 Collection 名称。
- `text` (String, 可选): 搜索文本,与 `vector` 二选一。
- `vector` (Number[], 可选): 原始搜索向量,与 `text` 二选一。
- `filter` (String): **必填**,标量过滤表达式。
- `topK` (Number, 可选): 返回条数,默认 10。
- `outputFields` (String[], 可选): 要返回的字段列表。
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues