Інтеграції БД з MCP

Вступ до Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Навіщо додавати БД до сервера часового поясу?

 

  • Сила запитів: фільтруйте, шукайте й сортуйте без завантаження всього набору даних
  • Масштаб: швидкі пошуки завдяки індексам БД

підключення_до_бази_даних.png

Вступ до Model Context Protocol (MCP)

Навіщо додавати БД до сервера часового поясу?

 

  • Сила запитів: фільтруйте, шукайте й сортуйте без завантаження всього набору даних
  • Масштаб: швидкі пошуки завдяки індексам БД
  • Паралельність: кілька викликів інструментів або клієнтів безпечно звертаються до БД
  • Готовність до продакшну: резервні копії, реплікація та єдине джерело правди

переваги_бази_даних.png

Вступ до Model Context Protocol (MCP)

Доступ до даних: інструменти vs ресурси

іконка_інструментів.jpg

  • Динамічні операції, залежать від введення користувача, запис
  • Приклади: Аналітика даних і операції

іконка_ресурсів.jpg

  • Лише читання, статичні дані, довідкова інформація
  • Приклади: Настанови, довідки, політики
Вступ до Model Context Protocol (MCP)

Життєвий цикл з'єднання

з'єднання_з_базою_даних.png

Вступ до Model Context Protocol (MCP)

Ресурс БД: 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}"
Вступ до Model Context Protocol (MCP)

Інструмент пошуку в БД: 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()
Вступ до Model Context Protocol (MCP)

Безпека та продакшн-практики

 

  • Параметризовані запити (?): ніколи не підставляйте рядком введення користувача або LLM у SQL
    • Prompt injection → зловмисне впровадження коду через підказки
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Надавайте перевагу лише для читання та вузько обмеженому доступу до БД для MCP-сервера
  • Обмежуйте: макс. кількість рядків і тайм-аути
Вступ до Model Context Protocol (MCP)

Ayo berlatih!

Вступ до Model Context Protocol (MCP)

Preparing Video For Download...