Integrace databází MCP

Introduction to Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Proč přidat databázi do serveru časových pásem?

 

  • Síla dotazů: filtrování, vyhledávání a řazení bez načtení celé datové sady
  • Škálovatelnost: rychlé vyhledávání pomocí databázových indexů

Připojení k databázi

Introduction to Model Context Protocol (MCP)

Proč přidat databázi do serveru časových pásem?

 

  • Síla dotazů: filtrování, vyhledávání a řazení bez načtení celé datové sady
  • Škálovatelnost: rychlé vyhledávání pomocí databázových indexů
  • Souběžnost: více volání nástrojů nebo klientů přistupuje k DB bezpečně
  • Připraveno pro produkci: zálohy, replikace a jediný zdroj pravdy

Výhody databáze

Introduction to Model Context Protocol (MCP)

Přístup k datům: nástroje vs. resources

Ikona nástrojů

  • Dynamické operace závislé na vstupu uživatele, včetně zápisu
  • Příklady: Datová analytika a operace

Ikona resources

  • Data jen pro čtení, statická data, referenční informace
  • Příklady: Pokyny, dokumentace, zásady
Introduction to Model Context Protocol (MCP)

Životní cyklus připojení

Připojení k databázi

Introduction to Model Context Protocol (MCP)

Databázový resource: 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 to Model Context Protocol (MCP)

Nástroj pro vyhledávání v 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()
Introduction to Model Context Protocol (MCP)

Bezpečnost a osvědčené postupy

 

  • Parametrizované dotazy (?): nikdy nevkládejte vstup uživatele ani LLM přímo do SQL
    • Prompt injection → podvržení škodlivého kódu přes prompt
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Preferujte přístup k databázi jen pro čtení s omezeným rozsahem pro MCP server
  • Nastavte limity: maximální počet řádků a časové limity
Introduction to Model Context Protocol (MCP)

Pojďme si procvičit!

Introduction to Model Context Protocol (MCP)

Preparing Video For Download...