Thử ngay: Kết nối SQLite trong 5 phút
Cách nhanh nhất để hiểu MCP là bắt tay vào làm thực tế. Nếu đã cài Claude Desktop, bạn có thể kết nối nó với một file SQLite bất kỳ mà không cần viết dòng code nào. Chỉ cần chạy lệnh này trong terminal:
npx @modelcontextprotocol/server-sqlite --db-path ~/my_data.db
Tiếp theo, hãy mở file cấu hình của Claude Desktop. Trên macOS, nó nằm tại ~/Library/Application Support/Claude/claude_desktop_config.json. Với Windows, bạn tìm tại %APPDATA%\Claude\claude_desktop_config.json. Thêm đoạn cấu hình sau vào:
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/đường/dẫn/đến/file/database.db"]
}
}
}
Sau khi khởi động lại Claude, biểu tượng hình tia sét (MCP) sẽ xuất hiện. Bạn có thể yêu cầu: “Liệt kê các bảng trong database của tôi”. Claude sẽ tự động thực thi SQL và trả về kết quả ngay lập tức.
MCP Server thực chất là gì?
Anthropic tung ra Model Context Protocol (MCP) như một chuẩn mở để phá vỡ giới hạn của AI. Hãy tưởng tượng Claude 3.5 Sonnet là một bộ não thiên tài nhưng đang bị nhốt trong phòng kín. MCP chính là các “cổng USB” giúp bộ não đó kết nối trực tiếp với Database, Google Drive hay Slack.
Trước đây, mình thường phải export dữ liệu ra CSV rồi upload thủ công lên chat. Cách này vừa tốn 10-15 phút mỗi lần, vừa dễ rò rỉ dữ liệu nhạy cảm. MCP thay đổi hoàn toàn cuộc chơi. Nó cho phép AI mượn quyền của máy tính để truy vấn dữ liệu theo thời gian thực một cách an toàn.
Hệ sinh thái MCP gồm 3 phần chính:
- MCP Client: Nơi bạn chat với AI (như Claude Desktop hoặc các IDE).
- MCP Server: Chương trình trung gian cung cấp các công cụ (tools) và dữ liệu.
- Local/Remote Data: Nơi lưu trữ thực tế như PostgreSQL, MySQL hay API nội bộ.
Xây dựng MCP Server riêng bằng Python
Các server có sẵn thường chỉ xử lý được các tác vụ cơ bản. Trong thực tế, bạn sẽ cần tự viết MCP Server để xử lý các logic nghiệp vụ riêng biệt. Dưới đây là cách mình dùng thư viện mcp của Python để tạo công cụ tra cứu đơn hàng.
Bước 1: Chuẩn bị môi trường
Cài đặt thư viện MCP và SQLAlchemy để thao tác với database dễ dàng hơn:
pip install mcp sqlalchemy
Bước 2: Viết code cho Server
Tạo file db_server.py. Mình định nghĩa hàm query_orders để Claude có thể tự tìm thông tin khách hàng khi cần.
import sqlite3
from mcp.server.fastmcp import FastMCP
# Khởi tạo server với tên định danh
mcp = FastMCP("OrderManager")
DB_PATH = "shop_data.db"
@mcp.tool()
def query_orders(customer_name: str) -> str:
"""Tìm danh sách đơn hàng dựa theo tên khách hàng."""
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# Sử dụng Parameterized Query để bảo mật
query = "SELECT id, product, amount FROM orders WHERE customer_name LIKE ?"
cursor.execute(query, (f"%{customer_name}%",))
results = cursor.fetchall()
conn.close()
if not results:
return "Không tìm thấy đơn hàng nào cho khách này."
return "\n".join([f"ID: {r[0]}, SP: {r[1]}, Tiền: {r[2]}" for r in results])
if __name__ == "__main__":
mcp.run()
Bước 3: Tích hợp vào Claude
Cập nhật file claude_desktop_config.json để trỏ đến file Python vừa tạo:
{
"mcpServers": {
"my-custom-db": {
"command": "python",
"args": ["/đường/dẫn/tuyệt/đối/tới/db_server.py"]
}
}
}
3 nguyên tắc bảo mật khi kết nối AI với Database
Để tránh việc AI vô tình xóa sạch dữ liệu (như lệnh DROP TABLE) trong 0.5 giây, mình luôn áp dụng 3 quy tắc sau:
1. Quyền Read-Only là bắt buộc
Tuyệt đối không dùng tài khoản root. Hãy tạo một user riêng chỉ có quyền SELECT. Điều này đảm bảo dù AI có hiểu lầm ý định của bạn, nó cũng không thể sửa đổi dữ liệu gốc.
2. Chặn đứng SQL Injection
Đừng bao giờ cộng chuỗi trực tiếp để tạo câu lệnh SQL. Luôn dùng dấu hỏi chấm ? (parameterized queries) như ví dụ trên. Input từ người dùng qua AI vẫn có thể chứa mã độc.
3. Kiểm soát lượng dữ liệu trả về
Claude có giới hạn về số lượng từ (token) có thể xử lý một lúc. Nếu database có 1 triệu dòng, việc trả về toàn bộ sẽ làm treo AI. Hãy luôn thêm LIMIT 20 vào các câu lệnh để tối ưu hiệu suất.
Kinh nghiệm thực tế khi triển khai
- Lưu ý khi Debug: MCP Server chạy ngầm nên
print()sẽ không hiển thị. Bạn nên dùng thư việnloggingđể ghi lỗi ra file hoặc dùngmcp-inspector. - Đầu tư vào Docstring: Claude quyết định chọn hàm dựa vào phần mô tả (ví dụ:
"""Tìm danh sách đơn hàng..."""). Hãy viết mô tả thật chi tiết để AI không gọi nhầm tool. - Kết hợp đa nguồn: Bạn có thể chạy cùng lúc nhiều server. Claude có thể vừa lấy giá từ Database, vừa tra cứu tỷ giá trên Google để tính toán cho bạn.
Làm chủ MCP Server giúp bạn biến AI từ một chatbot thông thường thành một trợ lý có khả năng hành động. Cảm giác nhìn Claude tự tay truy vấn hàng nghìn dòng dữ liệu để tìm ra insight trong vài giây thực sự rất ấn tượng.

