Skip to main content
Glama
README.md
# MCP Server

MCP Server là hệ thống phân tích ngữ cảnh tài liệu dự án sử dụng Node.js + Express, tích hợp AI (OpenAI), chạy trong Docker.

## Cấu trúc dự án
```
mcp-server/
├─ Dockerfile
├─ docker-compose.redis.yml   # Dùng Redis Stack
├─ .env.example
├─ package.json
├─ src/
│  ├─ index.js                # entry point (Express)
│  ├─ config.js
│  ├─ routes/
│  │   ├─ upload.js           # API upload file
│  │   ├─ api.js              # API truy vấn AI
│  │   └─ tools.js            # Tooling AI
│  ├─ lib/
│  │   ├─ fileParser.js       # parse file, ingest
│  │   ├─ textSplitter.js     # chia nhỏ text
│  │   ├─ embeddings.js       # tạo embedding
│  │   ├─ vectorStore.redis.js# lưu vector (Redis)
│  │   ├─ retriever.js        # truy xuất context
│  │   └─ promptTemplates.js  # prompt cho tooling
│  └─ scripts/
│      ├─ ingestAll.js        # ingest toàn bộ file
│      └─ init.js             # khởi tạo thư mục/data
└─ data/                      # docker volume mount
   └─ uploads/
```

## Hướng dẫn setup

1. **Clone repo & cài đặt dependencies**
   ```zsh
   git clone <repo-url>
   cd mcp-server
   npm install
   ```

2. **Cấu hình môi trường**
   - Copy file `.env.example` thành `.env` và điền API key OpenAI:
     ```zsh
     cp .env.example .env
     # Sửa OPENAI_API_KEY trong .env
     ```

3. **Khởi tạo thư mục dữ liệu**
   ```zsh
   node src/scripts/init.js
   # hoặc sẽ tự động khi chạy Docker
   ```

4. **Chạy với Redis Stack (production-ready vector store)**
   - Sử dụng file `docker-compose.redis.yml`:
     ```zsh
     docker-compose -f docker-compose.redis.yml up --build
     ```
   - Đảm bảo biến môi trường `REDIS_URL` đã đúng (mặc định: `redis://redis:6379`).

## Sử dụng

### 1. Upload tài liệu
- Gửi file qua API:
  ```http
  POST /upload
  Content-Type: multipart/form-data
  file: <tài liệu dự án>
  ```
  - File sẽ được ingest, index thành vector lưu vào Redis.

### 2. Truy vấn AI
- Gửi câu hỏi qua API:
  ```http
  POST /api/query
  Content-Type: application/json
  {
    "question": "Nội dung bạn muốn hỏi về tài liệu dự án"
  }
  ```
  - AI sẽ trả lời dựa trên ngữ cảnh tài liệu đã ingest.

### 3. Ingest toàn bộ file trong thư mục uploads
  ```zsh
  npm run ingest
  ```

## Tooling AI

Các API hỗ trợ dự án:

- **Sinh test-case tự động**
  ```http
  POST /tools/generate-testcase
  Content-Type: application/json
  {
    "requirements": "Yêu cầu phần mềm..."
  }
  ```
- **Tóm tắt tài liệu**
  ```http
  POST /tools/summarize
  Content-Type: application/json
  {}
  ```
- **Traceability tool**
  ```http
  POST /tools/traceability
  Content-Type: application/json
  {
    "requirements": "Yêu cầu phần mềm..."
  }
  ```

Các API này sử dụng prompt template và AI để sinh kết quả dựa trên ngữ cảnh tài liệu đã ingest.

## Lưu ý
- Đảm bảo đã có API key OpenAI hợp lệ.
- Thư mục `data/uploads` là nơi chứa file upload.
- Vector database chỉ sử dụng Redis, không còn lưu file JSON.
- Có thể mở rộng các loại tài liệu, pipeline, hoặc tích hợp vector DB khác.

---
Mọi thắc mắc vui lòng liên hệ admin dự án.