การผสานฐานข้อมูลกับ MCP

Model Context Protocol (MCP) เบื้องต้น

James Chapman

AI Curriculum Manager, DataCamp

เหตุใดจึงเพิ่มฐานข้อมูลใน Timezone Server?

 

  • ประสิทธิภาพคิวรี: กรอง ค้นหา และเรียงลำดับโดยไม่ต้องโหลดข้อมูลทั้งหมด
  • ขนาดข้อมูล: ค้นหาเร็วด้วย index ของฐานข้อมูล

การเชื่อมต่อฐานข้อมูล

Model Context Protocol (MCP) เบื้องต้น

เหตุใดจึงเพิ่มฐานข้อมูลใน Timezone Server?

 

  • ประสิทธิภาพคิวรี: กรอง ค้นหา และเรียงลำดับโดยไม่ต้องโหลดข้อมูลทั้งหมด
  • ขนาดข้อมูล: ค้นหาเร็วด้วย index ของฐานข้อมูล
  • Concurrency: การเรียก tool หรือ client หลายรายการเข้าถึง DB ได้อย่างปลอดภัย
  • พร้อมใช้งาน Production: สำรองข้อมูล replication และแหล่งข้อมูลเดียว

ข้อดีของฐานข้อมูล

Model Context Protocol (MCP) เบื้องต้น

การเข้าถึงข้อมูล: Tools กับ Resources

ไอคอน Tools

  • ข้อมูลแบบไดนามิก ขึ้นกับ input ผู้ใช้ รองรับการเขียน
  • ตัวอย่าง: การวิเคราะห์และดำเนินการข้อมูล

ไอคอน Resources

  • อ่านอย่างเดียว ข้อมูลคงที่ ข้อมูลอ้างอิง
  • ตัวอย่าง: แนวทาง เอกสาร นโยบาย
Model Context Protocol (MCP) เบื้องต้น

วงจรชีวิตของการเชื่อมต่อ

วงจรชีวิตของการเชื่อมต่อ

Model Context Protocol (MCP) เบื้องต้น

ทรัพยากรฐานข้อมูล: 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}"
Model Context Protocol (MCP) เบื้องต้น

เครื่องมือค้นหาฐานข้อมูล: 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()
Model Context Protocol (MCP) เบื้องต้น

แนวปฏิบัติด้านความปลอดภัยและ Production

 

  • คิวรีแบบพารามิเตอร์ (?): ห้ามนำ input จากผู้ใช้หรือ LLM ไปต่อสตริงใน SQL
    • Prompt injection → การฝังโค้ดอันตรายผ่าน prompt
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • ควรใช้ การเข้าถึงฐานข้อมูลแบบอ่านอย่างเดียว และ จำกัดขอบเขต สำหรับ MCP server
  • กำหนดขีดจำกัด: จำนวนแถวสูงสุดและ timeout
Model Context Protocol (MCP) เบื้องต้น

ฝึกปฏิบัติกันเลย!

Model Context Protocol (MCP) เบื้องต้น

Preparing Video For Download...