Интеграция баз данных с MCP

Введение в Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Зачем добавлять базу данных в сервер часовых поясов?

 

  • Мощные запросы: фильтрация, поиск и сортировка без загрузки всего набора данных
  • Масштабируемость: быстрый поиск с помощью индексов базы данных

Подключение к базе данных

Введение в Model Context Protocol (MCP)

Зачем добавлять базу данных в сервер часовых поясов?

 

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

Преимущества баз данных

Введение в Model Context Protocol (MCP)

Доступ к данным: инструменты vs. ресурсы

Значок инструментов

  • Динамические операции, зависящие от пользовательского ввода, включая запись
  • Примеры: аналитика и операции с данными

Значок ресурсов

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

Жизненный цикл подключения

Подключения к базам данных

Введение в 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)

Давайте попрактикуемся!

Введение в Model Context Protocol (MCP)

Preparing Video For Download...