Ngừng Copy-Paste: Xây dựng MCP Server để kết nối Claude với dữ liệu thực tế của bạn

AI tutorial - IT technology blog
AI tutorial - IT technology blog

Vấn đề: Claude thông minh nhưng thiếu ngữ cảnh thực tế của bạn

Việc nhờ Claude tư vấn về kiến trúc sẽ rất tuyệt vời cho đến khi nó tự “ảo tưởng” ra một cột trong cơ sở dữ liệu mà bạn đã xóa từ ba tuần trước. Tôi đã từng lãng phí khoảng 15 phút mỗi giờ cho “vòng lặp copy-paste”—xuất file DDL, lọc bỏ các hàng nhạy cảm và dán chúng vào khung chat. Mỗi khi schema thay đổi, chu kỳ đó lại lặp lại.

Các quy trình thủ công như thế này thường lỏng lẻo và nguy hiểm. Nếu bạn quên cập nhật ngữ cảnh, AI sẽ gợi ý các truy vấn cho những bảng không tồn tại. Tệ hơn nữa, việc dán dữ liệu nội bộ vào giao diện web tạo ra một rủi ro bảo mật lớn. Bạn cần một cách an toàn để AI có thể “vươn tới” và quan sát trực tiếp môi trường của bạn. Model Context Protocol (MCP) giải quyết vấn đề này bằng cách tạo ra một cầu nối an toàn giữa LLM và máy cục bộ của bạn.

Model Context Protocol hoạt động như thế nào

MCP là một tiêu chuẩn mở từ Anthropic cho phép các mô hình AI tương tác với các nguồn dữ liệu bên ngoài. Hãy coi nó như một driver phổ quát cho các LLM. Thay vì xây dựng một tích hợp tùy chỉnh cho mỗi công cụ AI mới, bạn chỉ cần xây dựng MCP server một lần. Bất kỳ client tương thích nào, như Claude Desktop hoặc các IDE, đều có thể sử dụng công cụ của bạn ngay lập tức.

Hệ thống dựa trên ba thành phần chính:

  • MCP Host: Giao diện nơi bạn nhập liệu (như Claude Desktop).
  • MCP Client: Công cụ ẩn bên trong host để quản lý kết nối.
  • MCP Server: Một chương trình nhẹ do bạn viết để cung cấp các tài nguyên cụ thể, chẳng hạn như cơ sở dữ liệu PostgreSQL hoặc Jira API.

Hầu hết các server cục bộ giao tiếp thông qua đầu vào/đầu ra tiêu chuẩn (stdio). Làm chủ giao thức này giúp AI vượt xa khỏi một giao diện chat đơn giản. Nó biến mô hình thành một agent chức năng có khả năng điều hướng trong môi trường phát triển thực tế của bạn.

Từng bước: Xây dựng một SQLite MCP Server

Chúng ta sẽ xây dựng một Python server cho phép Claude truy vấn cơ sở dữ liệu SQLite cục bộ. Điều này giúp Claude trả lời các câu hỏi như “Ai là 10 khách hàng hàng đầu theo doanh thu tháng trước?” bằng cách thực thi SQL thực tế thay vì đoán mò dựa trên các đoạn mã cũ.

1. Chuẩn bị môi trường

Đảm bảo bạn đã cài đặt Python 3.10 trở lên. Chúng ta sẽ sử dụng môi trường ảo để giữ cho việc cài đặt sạch sẽ và tránh xung đột phụ thuộc với các dự án khác.

mkdir my-mcp-server
cd my-mcp-server
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install mcp sqlalchemy

2. Tạo logic cho Server

Tạo một file có tên server.py. Chúng sẽ sử dụng SDK FastMCP, công cụ giúp xử lý các giao tiếp JSON-RPC phức tạp cho chúng ta. Công cụ này sẽ cho phép Claude chạy các truy vấn chỉ đọc một cách an toàn.

from mcp.server.fastmcp import FastMCP
import sqlite3

mcp = FastMCP("DataExplorer")
DB_PATH = "production_mirror.db"

@mcp.tool()
def query_database(sql: str) -> str:
    """Chạy truy vấn SELECT chỉ đọc trên cơ sở dữ liệu cục bộ."""
    try:
        with sqlite3.connect(DB_PATH) as conn:
            cursor = conn.cursor()
            # Kiểm tra an toàn: Ngăn chặn các lệnh phá hoại
            if not sql.strip().upper().startswith("SELECT"):
                return "Lỗi: Chỉ cho phép các truy vấn SELECT để đảm bảo bảo mật."
            
            cursor.execute(sql)
            return str(cursor.fetchall())
    except Exception as e:
        return f"Lỗi Cơ sở dữ liệu: {str(e)}"

if __name__ == "__main__":
    mcp.run()

3. Kết nối Claude Desktop với Server của bạn

Claude Desktop cần các hướng dẫn rõ ràng để khởi chạy script của bạn. Bạn phải sửa đổi file cấu hình của nó. Trên macOS, tìm nó tại ~/Library/Application Support/Claude/claude_desktop_config.json. Người dùng Windows nên tìm trong %APPDATA%\Claude\claude_desktop_config.json.

Cập nhật file với đường dẫn tuyệt đối đến trình thực thi Python và script của bạn:

{
  "mcpServers": {
    "my-sqlite-server": {
      "command": "/path/to/my-mcp-server/.venv/bin/python",
      "args": ["/path/to/my-mcp-server/server.py"]
    }
  }
}

Đường dẫn tương đối là nguyên nhân phổ biến nhất gây ra lỗi ở bước này. Claude Desktop chạy trong một môi trường shell riêng biệt, vì vậy nó sẽ không biết thư mục dự án của bạn ở đâu trừ khi bạn chỉ định chính xác.

4. Xác minh kết nối

Khởi động lại Claude Desktop hoàn toàn để cập nhật cấu hình. Tìm biểu tượng chiếc búa nhỏ ở góc dưới bên phải của hộp tin nhắn. Nếu bạn thấy nó, Claude đã đăng ký thành công công cụ của bạn. Hãy thử hỏi: “Hãy xem cơ sở dữ liệu cục bộ của tôi và liệt kê 5 mục nhập gần nhất trong bảng ‘logs’.”

Không chỉ là file cục bộ: Kết nối các API nội bộ

MCP xử lý nhiều thứ hơn là chỉ các cơ sở dữ liệu cục bộ. Bạn có thể đóng gói các API nội bộ của công ty vốn không được công khai trên internet. Ví dụ, gần đây tôi đã xây dựng một server cho một API kho hàng nội bộ. Điều này cho phép Claude tóm tắt mức tồn kho mà tôi không bao giờ phải rời khỏi giao diện chat.

Cấu trúc cho một công cụ API gần như giống hệt với phiên bản cơ sở dữ liệu:

import requests

@mcp.tool()
def check_inventory(sku: str) -> dict:
    """Kiểm tra mức tồn kho cho một SKU cụ thể thông qua API nội bộ."""
    response = requests.get(f"https://api.internal-tools.com/v1/stock/{sku}")
    return response.json()

Những kinh nghiệm thực tế đắt giá

Xây dựng nhiều server này đã dạy tôi rằng việc debug MCP có thể khá rắc rối. Bốn mẹo sau đây sẽ giúp bạn tiết kiệm hàng giờ mệt mỏi:

  • Sử dụng Inspector: Sử dụng công cụ mcp-inspector để kiểm tra server của bạn trước khi thử trong Claude. Nó giúp phát hiện các lỗi định dạng JSON mà Claude Desktop thường bỏ qua.
  • Ghi log ra file: Các câu lệnh print() thông thường sẽ làm hỏng kết nối MCP vì chúng can thiệp vào luồng stdio. Hãy sử dụng thư viện logging của Python để ghi vào file debug.log thay thế.
  • Ép buộc quyền chỉ đọc: Đừng bao giờ cấp cho LLM quyền DROP hoặc DELETE. Hãy sử dụng một user cơ sở dữ liệu có quyền SELECT bị giới hạn để ngăn chặn các sự cố do AI tạo ra.
  • Chú ý thời gian: Claude Desktop sẽ bị timeout nếu một công cụ mất hơn 30 giây để phản hồi. Nếu dữ liệu của bạn quá lớn, hãy sử dụng các mệnh đề LIMIT hoặc triển khai bộ nhớ đệm (caching) cơ bản.

Lời kết

Model Context Protocol vẫn còn mới mẻ, nhưng nó là cách mạnh mẽ nhất để ngừng coi AI như một hộp cát bị cô lập. Bằng cách tự động hóa cách Claude truy cập dữ liệu của bạn, bạn sẽ loại bỏ được sự phiền toái khi phải quản lý ngữ cảnh thủ công. Hãy bắt đầu với một công cụ chỉ đọc đơn giản cho cơ sở dữ liệu bạn hay dùng nhất. Bạn sẽ nhận thấy ngay lập tức tốc độ triển khai code nhanh hơn bao giờ hết khi AI thực sự hiểu môi trường của bạn trông như thế nào.

Share: