Skip to main content
Glama
oliverhubtech-source

MCP Database Server

MCP Database Server

Pilar: Protocolos, Interoperabilidade и API
Статус: Месяц 1 — базовый

MCP-сервер на Python для предоставления LLM-клиентам доступа к схемам, безопасным запросам и хранимым процедурам.

Проблема

LLM нужно обращаться к корпоративным базам данных без предоставления широких учётных данных и возможности выполнять деструктивные SQL-запросы.

Related MCP server: DB Insights MCP Server

MVP

  • MCP-сервер на FastMCP

  • Список разрешённых схем

  • Только чтение

  • Allowlist хранимых процедур

  • Аудирование вызовов

Архитектура

  • MCP-сервер (mcp.server.MCPServer, инструменты зарегистрированы через @mcp.tool())

  • Schema registry (allowlist таблиц/колонок, db.py)

  • Authorizer только для чтения (sqlite3.Connection.set_authorizer, security.py)

  • Аудит-логгер (журнал аудита каждого вызова инструмента в памяти, audit.py)

Диаграмма

flowchart LR
    A0[MCP client] --> A1[MCP server: list_tables / describe_table / run_readonly_query]
    A1 --> A2[SQLite authorizer: allowlist + read-only]
    A2 --> A3[SQLite: invoices]
    A1 --> A4[Audit log]

Стек

  • Python

  • mcp (официальный SDK Model Context Protocol)

  • SQLite (sqlite3 из стандартной библиотеки, с set_authorizer для контроля доступа)

  • unittest

  • Docker Compose

Как запустить

Реальная реализация с официальным MCP SDK. Контроль доступа не использует регулярные выражения по SQL (их легко обойти) — используется set_authorizer самого SQLite, который разрешает или запрещает каждую таблицу/колонку и каждый тип statement до выполнения любого кода. Чтобы запустить MCP-сервер:

python3.12 -m venv .venv && source .venv/bin/activate
pip install -e .
python -m mcp_database_server   # sobe o servidor MCP via stdio
python -m unittest discover -s tests

Тесты

  • test_security.py: authorizer блокирует INSERT/UPDATE/DELETE/DROP/ALTER, ATTACH, таблицы вне allowlist (например, sqlite_master) и конкатенированные statement-ы (SELECT 1; DROP TABLE ...).

  • test_server.py: логика каждого инструмента вызывается напрямую (без протокола), включая проверку, что каждый вызов создаёт событие аудита.

  • test_integration.py: запускает python -m mcp_database_server как реальный подпроцесс и общается с ним через mcp.client.stdio + ClientSession — доказывает, что сервер реально работает по MCP, а не только что Python-функции работают.

Риски и решения

  • SQL-инъекции и чрезмерные права: решено через set_authorizer на уровне драйвера, а не регулярными выражениями.

  • Одно SQLite-подключение не потокобезопасно; MCP-сервер обрабатывает каждый вызов инструмента в рабочем потоке, поэтому ServerState.lock сериализует доступ (реальный баг, найденный и исправленный при реализации; покрыт тестом test_integration.py).

  • MCP-инструменты возвращают ValueError с понятным сообщением для LLM-клиента вместо утечки stack trace.

Следующие шаги

  • Заменить SQLite на PostgreSQL через SQLAlchemy, как только появятся настоящие данные.

  • Добавить аутентификацию/allowlist для клиентов (сейчас любой подключённый MCP-клиент имеет доступ к инструментам).

  • Хранить лог аудита вне процесса (сейчас он только в памяти).

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides secure, read-only access to Microsoft SQL Server with multi-layer protection, enabling safe query execution, schema discovery, and SQL script analysis through natural language.
    2
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query SQL databases safely with read-only access, allowing schema discovery and SELECT queries while blocking writes and DDL operations.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLM clients to query SQL databases via natural language with read-only, AST-validated, and capped queries, ensuring safety guarantees.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.
    60 npm
    3
    MIT