MySQL MCP
[npm]
[CI]
[License: MIT]
MySQL MCP подключает AI-приложение к одной базе MySQL или MariaDB: посмотреть структуру, задать вопрос данным на естественном языке, разобраться в медленном запросе — и, если вы сами это разрешили, изменить данные.
Сервер привязан к одной базе: она задана конфигурацией, и ни один инструмент не может уйти в другую. По умолчанию доступно только чтение.
- 6 инструментов. Подключение и права, список таблиц, структура таблицы, читающий запрос, план запроса, изменяющий запрос.
- Тип запроса определяет сервер. SQL разбирается до подключения:
DELETE в читающем инструменте будет отклонён, даже если права на запись включены.
- Чтение не может писать. Читающие запросы идут внутри
START TRANSACTION READ ONLY — запись отклонит сама MySQL, даже если разбор SQL кто-то обманет.
- Ответ не переполнит контекст. Строки читаются потоком и обрываются на лимите, а не выкачиваются целиком; в ответе честный признак
truncated.
- Права только снаружи. INSERT, UPDATE и DELETE включаются переменными окружения и требуют перезапуска — из диалога их получить нельзя. DDL недоступен всегда.
Начните с запроса, который только читает данные:
Покажи структуру базы и посчитай, сколько записей появилось за последнюю неделю.
Быстрый старт
Claude Code:
Или в .mcp.json / claude_desktop_config.json:
Один сервер — одна база. Нужно несколько баз: добавьте несколько записей со своими учётными данными; так права остаются изолированными, и сервер, подключённый к тестовой базе, физически не видит боевую.
Что можно поручить
Что может измениться
По умолчанию — ничего: сервер стартует в режиме только чтения. Запись включается по одной операции:
Что при этом остаётся невозможным:
- DDL —
CREATE, ALTER, DROP, TRUNCATE, RENAME — ни при каких настройках.
- Смена базы,
SET, CALL, PREPARE, LOAD DATA, блокировки, GRANT и прочее, что меняет смысл следующего запроса или выполняет непроверенный текст.
SELECT ... INTO OUTFILE — запись файла на сервер базы.
UPDATE и DELETE без WHERE — требуют явного подтверждения allow_full_table=true в вызове.
- Несколько инструкций в одном вызове — выполняется ровно одна.
Права MySQL — отдельное ограничение поверх этого. Разрешение ALLOW_UPDATE_OPERATION ничего не добавляет пользователю, у которого нет GRANT UPDATE. Рабочая практика: отдельный пользователь с минимальными правами, а не root.
Переменные окружения
Пароль в конфигурации MCP-клиента лежит открытым текстом. MYSQL_PASS_FILE позволяет держать его в файле с нужными правами.
Переход с @benborla29/mcp-server-mysql
Имена переменных совпадают, поэтому достаточно заменить пакет в команде запуска:
Что изменится в поведении:
MYSQL_DB обязателен — сервер всегда привязан к одной базе;
- ответы ограничены
MYSQL_MAX_ROWS и помечаются truncated;
- DDL недоступен даже при включённых правах на запись;
UPDATE/DELETE без WHERE требуют подтверждения в вызове;
- набор инструментов другой:
query, execute, explain, list_tables, describe_table, server_info.
Диагностика
Первым делом — server_info: он покажет, к чему подключён сервер, какие права у пользователя MySQL и какие ограничения включены.
Техническая документация
Лицензия
MIT