Tích hợp cơ sở dữ liệu MCP

Giới thiệu về Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Vì sao thêm cơ sở dữ liệu cho máy chủ múi giờ?

 

  • Sức mạnh truy vấn: lọc, tìm kiếm, sắp xếp mà không phải tải toàn bộ dữ liệu
  • Mở rộng: tra cứu nhanh với chỉ mục cơ sở dữ liệu

Kết nối cơ sở dữ liệu

Giới thiệu về Model Context Protocol (MCP)

Vì sao thêm cơ sở dữ liệu cho máy chủ múi giờ?

 

  • Sức mạnh truy vấn: lọc, tìm kiếm, sắp xếp mà không tải toàn bộ dữ liệu
  • Mở rộng: tra cứu nhanh với chỉ mục
  • Đồng thời: nhiều lệnh gọi công cụ/khách truy cập DB an toàn
  • Sẵn sàng sản xuất: sao lưu, nhân bản, nguồn sự thật duy nhất

Ưu điểm cơ sở dữ liệu

Giới thiệu về Model Context Protocol (MCP)

Truy cập dữ liệu: Tools vs. Resources

tools_icon.jpg

  • Động, phụ thuộc nhiều vào đầu vào người dùng, có thao tác ghi
  • Ví dụ: Phân tích dữ liệu và vận hành

resources_icon.jpg

  • Chỉ-đọc, dữ liệu tĩnh, thông tin tham chiếu
  • Ví dụ: Hướng dẫn, tài liệu, chính sách
Giới thiệu về Model Context Protocol (MCP)

Vòng đời kết nối

Kết nối cơ sở dữ liệu

Giới thiệu về Model Context Protocol (MCP)

Tài nguyên DB: timezone_server.py

from mcp.server.fastmcp import FastMCP
import sqlite3

mcp = FastMCP("Timezone Converter")

# Create connection at startup; reuse in handlers
conn = sqlite3.connect("timezones.db")
conn.row_factory = sqlite3.Row

@mcp.resource("db://timezones") def get_locations() -> str: try: cursor = conn.execute("SELECT timezone FROM locations") rows = cursor.fetchall() return "\n".join(r["timezone"] for r in rows) except sqlite3.Error as e: return f"Error: {e}"
Giới thiệu về Model Context Protocol (MCP)

Công cụ tra cứu DB: timezone_server.py

@mcp.tool()
def lookup_locations(prefix: str) -> str:
    """Find timezones that contain the given prefix."""
    try:
        cursor = conn.execute(
            "SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50", (f"%{prefix}%",))
        rows = cursor.fetchall()
        return "\n".join(r["timezone"] for r in rows)
    except sqlite3.Error as e: return f"Error: {e}"

if __name__ == "__main__": try: mcp.run(transport="stdio") finally: conn.close()
Giới thiệu về Model Context Protocol (MCP)

An toàn và thói quen triển khai

 

  • Truy vấn tham số (?): không bao giờ định dạng chuỗi đầu vào của người dùng/LLM vào SQL
    • Prompt injection → chèn mã độc qua prompt
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Ưu tiên truy cập cơ sở dữ liệu chỉ-đọc và phạm vi hẹp cho máy chủ MCP
  • Áp dụng giới hạn: số hàng tối đa và timeout
Giới thiệu về Model Context Protocol (MCP)

Ayo berlatih!

Giới thiệu về Model Context Protocol (MCP)

Preparing Video For Download...