Tác giả: Đội ngũ kỹ thuật HolySheep AI · Cập nhật: 15/01/2026 · Thời gian đọc: ~9 phút

Mở đầu — Khi chatbot của tôi "gục ngã" giữa đêm Singles' Day

23:47 ngày 11/11/2025, dashboard Grafana bật đỏ. Hệ thống chatbot CSKH của shop mỹ phẩm tôi vận hành đang xử lý 3.180 phiên chat/phút — gấp 12 lần ngày thường. Vấn đề không phải ở LLM, mà ở chỗ model liên tục "bịa" chính sách đổi trả, vì nó không có quyền truy cập vào 3.842 tài liệu nội bộ (chính sách bảo hành, bảng size, FAQ kho).

Sau 6 tuần refactor, tôi chuyển từ kiến trúc "copy-paste tài liệu vào prompt" sang MCP Server chạy trong Cursor IDE, kết nối trực tiếp FAISS + PostgreSQL. Kết quả: CSAT tăng từ 71% lên 92%, tỷ lệ phải leo thang sang nhân viên thật giảm 64%, và tổng chi phí token rơi xuống còn $63/tháng. Bài viết này là toàn bộ những gì tôi đã làm — sao chép và chạy được ngay.

MCP Server là gì và vì sao Cursor IDE là nền tảng lý tưởng?

Model Context Protocol (MCP) là chuẩn mở do Anthropic công bố, cho phép LLM "gọi" công cụ bên ngoài thông qua giao thức JSON-RPC. Cursor IDE từ phiên bản 0.42 hỗ trợ MCP native trong panel Agent, nghĩa là bạn có thể để AI tự quyết định khi nào cần tìm trong knowledge base — thay vì dev phải RAG thủ công mỗi prompt.

Chuẩn bị môi trường — 5 phút cho 1 thiết lập sạch

Trước khi bắt đầu, hãy chuẩn bị:

Bước 1 — Khởi tạo tệp mcp.json cho Cursor

Mở ~/.cursor/mcp.json và dán nội dung sau. Đây là tệp Cursor đọc mỗi khi khởi động để "đăng ký" các MCP server khả dụng.

{
  "mcpServers": {
    "knowledge-base": {
      "command": "python",
      "args": ["/Users/dev/projects/mcp_server/kb_server.py"],
      "env": {
        "HOLYSHEEP_API_KEY": "YOUR_HOLYSHEEP_API_KEY",
        "KB_INDEX_PATH": "/Users/dev/projects/mcp_index/product_docs.faiss",
        "DB_DSN": "postgresql://kb_user:secret@localhost:5432/kb_prod"
      }
    }
  }
}

Bước 2 — Viết MCP server kết nối FAISS + PostgreSQL

Đoạn code dưới đây là phiên bản rút gọn từ production của tôi. Nó expose một tool tên search_kb mà Cursor Agent sẽ tự gọi khi cần tra cứu.

# kb_server.py — MCP server kết nối cơ sở tri thức nội bộ
import asyncio, os
from mcp.server import Server
from mcp.types import Tool, TextContent
import faiss, numpy as np, psycopg2
from openai import OpenAI

server = Server("knowledge-base")
client = OpenAI(
    base_url="https://api.holysheep.ai/v1",   # BẮT BUỘC dùng HolySheep gateway
    api_key=os.environ["HOLYSHEEP_API_KEY"]
)

Load 38,420 vector đã embed sẵn (768 dim)

index = faiss.read_index(os.environ["KB_INDEX_PATH"]) @server.list_tools() async def list_tools(): return [Tool( name="search_kb", description="Tìm kiếm ngữ nghĩa trong 3.842 tài liệu nội bộ (chính sách, size, FAQ).", inputSchema={ "type": "object", "properties": { "query": {"type": "string"}, "top_k": {"type": "integer", "default": 5} }, "required": ["query"] } )] @server.call_tool() async def call_tool(name: str, arguments: dict): if name != "search_kb": raise ValueError(f"Tool {name} không tồn tại") # Embed query qua HolySheep (DeepSeek V3.2 — $0.42/MTok) resp = client.embeddings.create( model="text-embedding-3-small", input=arguments["query"] ) q_vec = np.array([resp.data[0].embedding], dtype="float32") # Tìm top-k vector gần nhất scores, ids = index.search(q_vec, arguments.get("top_k", 5)) # Join metadata từ PostgreSQL conn = psycopg2.connect(os.environ["DB_DSN"]) cur = conn.cursor() cur.execute( "SELECT title, content, source_url FROM kb_documents WHERE id = ANY(%s)", ([int(i) for i in ids[0]],) ) rows = cur.fetchall() return [TextContent( type="text", text="\n\n---\n\n".join([f"## {r[0]}\n{r[1]}\nNguồn: {r[2]}" for r in rows]) )] if __name__ == "__main__": asyncio.run(server.run())

Bước 3 — Trỏ Cursor IDE về HolySheep AI làm backend

Mở Cursor → Settings → Models → Custom OpenAI API Base URL và điề