Integrasi Basis Data MCP

Pengantar Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Mengapa Menambahkan Basis Data ke Timezone Server?

 

  • Daya kueri: filter, cari, dan urut tanpa memuat seluruh dataset
  • Skala: pencarian cepat dengan indeks basis data

koneksi_database.png

Pengantar Model Context Protocol (MCP)

Mengapa Menambahkan Basis Data ke Timezone Server?

 

  • Daya kueri: filter, cari, dan urut tanpa memuat seluruh dataset
  • Skala: pencarian cepat dengan indeks basis data
  • Konkruensi: beberapa pemanggilan alat atau klien mengakses DB dengan aman
  • Siap produksi: pencadangan, replikasi, dan satu sumber kebenaran

keuntungan_database.png

Pengantar Model Context Protocol (MCP)

Akses Data: Tools vs. Resources

ikon_alat.jpg

  • Dinamis, sangat bergantung input pengguna, operasi tulis
  • Contoh: analitik data dan operasi

ikon_sumberdaya.jpg

  • Hanya-baca, data statis, informasi referensi
  • Contoh: pedoman, dokumentasi, kebijakan
Pengantar Model Context Protocol (MCP)

Siklus Hidup Koneksi

koneksi_database.png

Pengantar Model Context Protocol (MCP)

Sumber Daya Basis Data: 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}"
Pengantar Model Context Protocol (MCP)

Alat Pencarian Basis Data: 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()
Pengantar Model Context Protocol (MCP)

Keamanan dan Kebiasaan Produksi

 

  • Kueri terparameter (?): jangan pernah memasukkan input pengguna atau LLM ke SQL dengan string-format
    • Penyuntikan prompt → penyisipan kode berbahaya via prompt
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Utamakan akses basis data hanya-baca dan ruang lingkup ketat untuk server MCP
  • Terapkan batas: maksimum baris dan batas waktu
Pengantar Model Context Protocol (MCP)

Ayo berlatih!

Pengantar Model Context Protocol (MCP)

Preparing Video For Download...