Intégrations de bases de données MCP

Introduction au Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Pourquoi ajouter une BD au serveur de fuseaux horaires?

 

  • Puissance des requêtes : filtrer, chercher et trier sans charger tout l'ensemble de données
  • Évolutivité : recherches rapides grâce aux index de la BD

connexion_base_de_données.png

Introduction au Model Context Protocol (MCP)

Pourquoi ajouter une BD au serveur de fuseaux horaires?

 

  • Puissance des requêtes : filtrer, chercher et trier sans charger tout l'ensemble
  • Évolutivité : recherches rapides grâce aux index de la BD
  • Concurrence : appels/outils multiples ou clients accèdent à la BD en sécurité
  • Prête pour la prod : sauvegardes, réplication, source unique de vérité

avantages_bd.png

Introduction au Model Context Protocol (MCP)

Accès aux données : Outils vs Ressources

icône_outils.jpg

  • Dynamique, fortement dépendant des entrées utilisateur·trice, opérations d'écriture
  • Exemples : Analytique et opérations de données

icône_ressources.jpg

  • Lecture seule, données statiques, informations de référence
  • Exemples : Guides, docs, politiques
Introduction au Model Context Protocol (MCP)

Cycle de vie d'une connexion

connexions_base_de_données.png

Introduction au Model Context Protocol (MCP)

Ressource BD : 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}"
Introduction au Model Context Protocol (MCP)

Outil de recherche BD : 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()
Introduction au Model Context Protocol (MCP)

Sécurité et bonnes pratiques de prod

 

  • Requêtes paramétrées (?) : ne jamais insérer des chaînes d'un·e utilisateur·trice ou d'un LLM dans le SQL
    • Injection par invite → injection malveillante de code via des invites
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Préférer un accès BD en lecture seule et très limité pour le serveur MCP
  • Appliquer des limites : nb max de lignes et délais d'expiration
Introduction au Model Context Protocol (MCP)

Passons à la pratique !

Introduction au Model Context Protocol (MCP)

Preparing Video For Download...