Integrazioni database MCP

Introduzione al Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Perché aggiungere un database al Timezone Server?

 

  • Potenza delle query: filtra, cerca e ordina senza caricare tutto il dataset
  • Scalabilità: ricerche rapide con indici del database

connessione_database.png

Introduzione al Model Context Protocol (MCP)

Perché aggiungere un database al Timezone Server?

 

  • Potenza delle query: filtra, cerca e ordina senza caricare tutto il dataset
  • Scalabilità: ricerche rapide con indici del database
  • Concorrenza: più chiamate tool o client accedono al DB in sicurezza
  • Pronto per la produzione: backup, replica, e fonte unica di verità

vantaggi_database.png

Introduzione al Model Context Protocol (MCP)

Accesso ai dati: Tool vs. Risorse

icona_strumenti.jpg

  • Operazioni dinamiche, fortemente dipendenti dall'input utente, con scritture
  • Esempi: analytics e operations

icona_risorse.jpg

  • Sola lettura, dati statici, informazioni di riferimento
  • Esempi: linee guida, documentazione, policy
Introduzione al Model Context Protocol (MCP)

Ciclo di vita della connessione

connessioni_database.png

Introduzione al Model Context Protocol (MCP)

Risorsa database: 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}"
Introduzione al Model Context Protocol (MCP)

Tool di ricerca nel 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()
Introduzione al Model Context Protocol (MCP)

Sicurezza e buone pratiche

 

  • Query parametrizzate (?): non formattare mai input utente o LLM dentro SQL
    • Prompt injection → inserimento malevolo di codice via prompt
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Preferisci accesso al DB in sola lettura e a scopo ristretto per il server MCP
  • Applica limiti: righe max e timeout
Introduzione al Model Context Protocol (MCP)

Ayo berlatih!

Introduzione al Model Context Protocol (MCP)

Preparing Video For Download...