MCP-databasintegrationer

Introduktion till Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Varför lägga till en databas i tidszonservern?

 

  • Frågekraft: filtrera, sök och sortera utan att läsa in hela datasetet
  • Skalbarhet: snabba uppslag med databas-index

Databasanslutning

Introduktion till Model Context Protocol (MCP)

Varför lägga till en databas i tidszonservern?

 

  • Frågekraft: filtrera, sök och sortera utan att läsa in hela datasetet
  • Skalbarhet: snabba uppslag med databas-index
  • Samtidighet: flera verktygsanrop eller klienter når databasen säkert
  • Produktionsredo: säkerhetskopiering, replikering och en enda källa till sanning

Fördelar med databas

Introduktion till Model Context Protocol (MCP)

Dataåtkomst: Verktyg vs. resurser

Verktygsikon

  • Dynamiska operationer med stort beroende av användarindata, inklusive skrivoperationer
  • Exempel: Dataanalys och dataoperationer

Resursikon

  • Skrivskyddad data, statisk data, referensinformation
  • Exempel: Riktlinjer, dokumentation, policyer
Introduktion till Model Context Protocol (MCP)

Anslutningens livscykel

Anslutningslivscykel

Introduktion till Model Context Protocol (MCP)

Databasresurs: 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}"
Introduktion till Model Context Protocol (MCP)

Databasuppslagsverktyg: 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()
Introduktion till Model Context Protocol (MCP)

Säkerhet och produktionsrutiner

 

  • Parameteriserade (?) frågor: formatera aldrig användar- eller LLM-indata direkt i SQL
    • Promptinjektion → skadlig injektion av kod via promptar
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Föredra skrivskyddad och snävt avgränsad databasåtkomst för MCP-servern
  • Tillämpa begränsningar: max antal rader och tidsgränser
Introduktion till Model Context Protocol (MCP)

Låt oss öva!

Introduktion till Model Context Protocol (MCP)

Preparing Video For Download...