Skip to main content
Glama
Simonsms

TiDB RAG MCP Server

by Simonsms
README.md
# TiDB RAG MCP Server

一个用于读取 TiDB 数据库中 RAG 知识库的 MCP (Model Context Protocol) 服务器。

## 功能特性

- 📚 **知识库浏览** - 列出和查看知识条目
- 🔍 **关键词搜索** - 在知识库中搜索内容
- 🎯 **向量搜索** - 支持 TiDB 向量相似度搜索(开发中)
- 🔄 **双模式支持** - Mock 数据模式和 TiDB 数据库模式

## 快速开始

### 1. 安装依赖

```bash
npm install
```

### 2. 配置环境变量

```bash
cp .env.example .env
```

编辑 `.env` 文件:

```env
# Mock 模式 (无需数据库)
USE_MOCK=true

# TiDB 数据库配置 (USE_MOCK=false 时需要)
TIDB_HOST=localhost
TIDB_PORT=4000
TIDB_USER=root
TIDB_PASSWORD=your_password
TIDB_DATABASE=knowledge_db
```

### 3. 构建和运行

```bash
# 构建
npm run build

# 运行
npm start
```

## MCP 工具

### tidb_list_knowledge

列出知识库条目,支持分页和分类过滤。

**参数:**
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|--------|------|
| limit | number | 否 | 20 | 返回数量 (1-100) |
| offset | number | 否 | 0 | 跳过数量 |
| category | string | 否 | - | 按分类过滤 |
| response_format | string | 否 | markdown | 输出格式: markdown/json |

**示例:**

```json
{ "limit": 10, "category": "技术文档" }
```

### tidb_get_knowledge

获取单条知识详情。

**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | string | 是 | 知识条目 ID |
| response_format | string | 否 | 输出格式: markdown/json |

**示例:**

```json
{ "id": "kb-001" }
```

### tidb_search_knowledge

在知识库中搜索。

**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| query | string | 是 | 搜索关键词 |
| limit | number | 否 | 返回数量 |
| offset | number | 否 | 跳过数量 |
| category | string | 否 | 按分类过滤 |
| response_format | string | 否 | 输出格式 |

**示例:**

```json
{ "query": "MCP 协议" }
```

### tidb_vector_search

向量相似度搜索(开发中)。

**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| embedding | number[] | 是 | 查询向量 |
| top_k | number | 否 | 返回数量 |
| threshold | number | 否 | 相似度阈值 |

## Claude Desktop 配置

在 Claude Desktop 配置文件中添加:

**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "tidb-rag": {
      "command": "node",
      "args": ["E:\\code\\mcp_test\\readKnowledgeMcp\\dist\\index.js"],
      "env": {
        "USE_MOCK": "true"
      }
    }
  }
}
```

### 使用 TiDB 数据库

```json
{
  "mcpServers": {
    "tidb-rag": {
      "command": "node",
      "args": ["E:\\code\\mcp_test\\readKnowledgeMcp\\dist\\index.js"],
      "env": {
        "USE_MOCK": "false",
        "TIDB_HOST": "your-tidb-host",
        "TIDB_PORT": "4000",
        "TIDB_USER": "root",
        "TIDB_PASSWORD": "your-password",
        "TIDB_DATABASE": "knowledge_db"
      }
    }
  }
}
```

## 数据库表结构

当使用 TiDB 数据库时,需要以下表结构:

```sql
CREATE TABLE knowledge_base (
  id VARCHAR(36) PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  category VARCHAR(100),
  embedding VECTOR(1536),  -- 向量嵌入 (可选)
  metadata JSON,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 向量索引 (可选,用于向量搜索)
CREATE VECTOR INDEX idx_embedding ON knowledge_base(embedding);
```

## Mock 数据

Mock 模式包含以下示例知识:

1. MCP 协议简介
2. TiDB 向量搜索指南
3. RAG 最佳实践
4. TypeScript 类型系统进阶
5. 知识库系统架构设计

## 开发

```bash
# 开发模式 (热重载)
npm run dev

# 构建
npm run build

# 清理构建
npm run clean
```

## 使用 MCP Inspector 测试

```bash
npx @modelcontextprotocol/inspector node dist/index.js
```

## 项目结构

```
tidb-rag-mcp-server/
├── src/
│   ├── index.ts           # MCP Server 入口
│   ├── types.ts           # 类型定义
│   ├── constants.ts       # 常量配置
│   ├── schemas/           # Zod 验证 schemas
│   │   └── index.ts
│   ├── services/          # 数据库和 Mock 服务
│   │   ├── database.ts
│   │   └── mock-data.ts
│   ├── tools/             # MCP 工具实现
│   │   ├── index.ts
│   │   ├── knowledge.ts
│   │   └── search.ts
│   └── utils/             # 工具函数
│       └── format.ts
├── dist/                  # 编译输出
├── package.json
├── tsconfig.json
└── .env.example
```

## 文档

- [TiDB 知识库接入指南](./docs/TIDB_INTEGRATION_GUIDE.md) - 从 Mock 模式切换到真实 TiDB 数据库的完整指南

## License

MIT

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation5/5

The four tools have clear, non-overlapping purposes: paginated listing, single-item retrieval by ID, keyword search, and vector similarity search. Even though list and search both return multiple entries, one is for browsing and the other requires a query, so an agent can reliably distinguish them.

Naming Consistency4/5

Three tools follow a consistent tidb_verb_noun pattern: tidb_list_knowledge, tidb_get_knowledge, and tidb_search_knowledge. tidb_vector_search breaks the verb-first convention somewhat, but the shared prefix and parallel structure keep the naming readable.

Tool Count5/5

Four tools is a well-scoped size for a read-focused knowledge base server. Each tool earns its place by covering a distinct retrieval need without unnecessary redundancy.

Completeness2/5

List, get, and keyword search form a functional read path, but the only semantic retrieval tool is explicitly a placeholder that always returns a not-implemented message. For a server claiming RAG capabilities, the missing working vector search and the lack of knowledge-entry management operations are significant gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues