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-клиент имеет доступ к инструментам).
Хранить лог аудита вне процесса (сейчас он только в памяти).
This server cannot be deployed
Maintenance
Related MCP Connectors
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Read-only finance and operations controls for AI agents with evidence and safe next actions.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides 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-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to query SQL databases safely with read-only access, allowing schema discovery and SELECT queries while blocking writes and DDL operations.-
- AlicenseNot gradedqualityDmaintenanceEnables LLM clients to query SQL databases via natural language with read-only, AST-validated, and capped queries, ensuring safety guarantees.2MIT
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.60 npm3MIT