MySQL MCP

io.github.gistrec由 GitHub 帳號 gistrec 發布v1.1.1更新於 Nov 5, 2026

MCP server for one MySQL database: schema, read-only queries and guarded writes.

已驗證STDIO僅桌面資料庫資料與分析

概覽

AI 產生的概覽

本機 MCP 伺服器,綁定單一 MySQL 或 MariaDB 資料庫,讓助理檢視結構、執行唯讀查詢與執行計畫,並可選擇性執行受控寫入。

可以做什麼
  • 檢視連線資訊、使用者、MySQL 授權與伺服器自身限制
  • 列出資料表與檢視表,含引擎、大小與列數估算
  • 檢視資料表結構:欄位、索引及雙向外鍵
  • 執行單一唯讀查詢,支援參數綁定與列數上限
  • 檢視讀取查詢的執行計畫,可選擇顯示實際耗時
  • 在開啟寫入時執行一筆 INSERT、UPDATE、DELETE 或 REPLACE
適用情境
適合讓助理探索某個特定的 MySQL 或 MariaDB 資料庫、以自然語言回答資料問題或排查慢查詢,預設為唯讀。若願意以最小權限帳號連接單一資料庫,就值得加入。
執行需求
透過 npx 在本機執行(需要 Node.js)。需要 MYSQL_USER 與 MYSQL_DB,以及主機、連接埠或 socket 與憑證;密碼用 MYSQL_PASS 或 MYSQL_PASS_FILE。需要能連線到資料庫伺服器的網路;TLS 用 MYSQL_SSL 或 MYSQL_SSL_CA。寫入需設定 ALLOW_INSERT_OPERATION、ALLOW_UPDATE_OPERATION 或 ALLOW_DELETE_OPERATION 並重新啟動。
安裝前請注意
除非使用 MYSQL_PASS_FILE,密碼會以明文存放在用戶端設定中。寫入由環境變數開啟,執行後立即生效且不在交易中,無法從此處回復;沒有 WHERE 的 UPDATE 與 DELETE 需明確確認。DDL 一律不可用。MySQL 本身的授權仍會疊加生效。README 提到會傳送工具名稱與結果的匿名統計,可用 ASKADS_TELEMETRY=0 關閉。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 MySQL MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

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:

bash
claude mcp add mysql-myapp \  -e MYSQL_HOST=db.example.com \  -e MYSQL_USER=myapp_ro \  -e MYSQL_PASS='пароль' \  -e MYSQL_DB=myapp \  -e MYSQL_SSL=true \  -- npx -y mcp-mysql-client

Или в .mcp.json / claude_desktop_config.json:

json
{  "mcpServers": {    "mysql-myapp": {      "command": "npx",      "args": ["-y", "mcp-mysql-client"],      "env": {        "MYSQL_HOST": "db.example.com",        "MYSQL_PORT": "3306",        "MYSQL_USER": "myapp_ro",        "MYSQL_PASS": "пароль",        "MYSQL_DB": "myapp",        "MYSQL_SSL": "true"      }    }  }}

Один сервер — одна база. Нужно несколько баз: добавьте несколько записей со своими учётными данными; так права остаются изолированными, и сервер, подключённый к тестовой базе, физически не видит боевую.

Что можно поручить

ЗапросЧто делает сервер
«Что вообще есть в этой базе?»list_tables — таблицы, размеры, оценки числа строк
«Как устроена таблица orders?»describe_table — столбцы, индексы, внешние ключи в обе стороны
«Сколько заказов за июль и на какую сумму?»query — SELECT с агрегацией
«Почему этот запрос медленный?»explain — план, индексы, оценка строк
«Под кем я подключён и что мне можно?»server_info — база, пользователь, GRANT, лимиты сервера
«Проставь статус отменённым заказам»execute — только при ALLOW_UPDATE_OPERATION=true

Что может измениться

По умолчанию — ничего: сервер стартует в режиме только чтения. Запись включается по одной операции:

json
"ALLOW_INSERT_OPERATION": "true","ALLOW_UPDATE_OPERATION": "true","ALLOW_DELETE_OPERATION": "false"

Что при этом остаётся невозможным:

  • 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.

Переменные окружения

ПеременнаяПо умолчаниюНазначение
MYSQL_HOST127.0.0.1Хост сервера
MYSQL_PORT3306Порт
MYSQL_SOCKET_PATH—Unix-сокет вместо host/port
MYSQL_USER—Пользователь (обязательно)
MYSQL_PASS—Пароль (синоним MYSQL_PASSWORD)
MYSQL_PASS_FILE—Прочитать пароль из файла вместо переменной
MYSQL_DB—База данных (обязательно, синоним MYSQL_DATABASE)
MYSQL_SSLfalseТребовать TLS
MYSQL_SSL_CA—Путь к корневому сертификату; сам по себе включает TLS
MYSQL_SSL_REJECT_UNAUTHORIZEDtrueПроверять сертификат сервера
ALLOW_INSERT_OPERATIONfalseРазрешить INSERT
ALLOW_UPDATE_OPERATIONfalseРазрешить UPDATE
ALLOW_DELETE_OPERATIONfalseРазрешить DELETE
MYSQL_MAX_ROWS1000Потолок строк в одном ответе
MYSQL_TIMEOUT_MS30000Таймаут запроса
MYSQL_CONNECT_TIMEOUT_MS10000Таймаут подключения
MYSQL_POOL_SIZE3Соединений в пуле
MYSQL_MAX_RETRIES2Повторы при обрыве связи и взаимных блокировках
MYSQL_READ_ONLY_TXtrueВыполнять чтение в read-only транзакции
ASKADS_TELEMETRY—0 отключает анонимную статистику запусков и вызовов инструментов (имя инструмента и исход: успех или категория ошибки с кодом ошибки MySQL, без текста ошибки)

Пароль в конфигурации MCP-клиента лежит открытым текстом. MYSQL_PASS_FILE позволяет держать его в файле с нужными правами.

Переход с @benborla29/mcp-server-mysql

Имена переменных совпадают, поэтому достаточно заменить пакет в команде запуска:

diff
-  "args": ["-y", "@benborla29/mcp-server-mysql"]+  "args": ["-y", "mcp-mysql-client"]

Что изменится в поведении:

  • MYSQL_DB обязателен — сервер всегда привязан к одной базе;
  • ответы ограничены MYSQL_MAX_ROWS и помечаются truncated;
  • DDL недоступен даже при включённых правах на запись;
  • UPDATE/DELETE без WHERE требуют подтверждения в вызове;
  • набор инструментов другой: query, execute, explain, list_tables, describe_table, server_info.

Диагностика

Первым делом — server_info: он покажет, к чему подключён сервер, какие права у пользователя MySQL и какие ограничения включены.

СимптомПричина
errno 1045Неверные MYSQL_USER / MYSQL_PASS
errno 1044Пользователь есть, прав на базу нет
errno 1142Не хватает GRANT на операцию или таблицу — ALLOW_* тут не поможет
errno 3159Сервер требует TLS: MYSQL_SSL=true
ECONNREFUSED / ETIMEDOUTХост, порт, файрвол или неподнятый VPN
ER_NOT_SUPPORTED_AUTH_MODEНужен TLS для caching_sha2_password
Сервер не подключаетсяОшибка конфигурации видна прямо в диалоге: сервер стартует даже без учётных данных и объясняет, чего не хватает

Техническая документация

Лицензия

MIT

來源:README.md,提交 39810eb

工具

6

server_info

Сведения о подключении и правах

Показывает, к какой базе и под каким пользователем подключён сервер, версию MySQL, размер базы, выданные пользователю права (GRANT) и действующие ограничения самого MCP-сервера: разрешённые операции записи, потолок строк в ответе и таймаут запроса. Стоит вызвать первым, если непонятно, почему запрос отклонён: права MySQL и разрешения сервера — это два независимых ограничения.

無需輸入參數。

list_tables

Список таблиц базы

Перечисляет таблицы и представления подключённой базы: движок, кодировку, комментарий, размер данных и индексов в байтах и оценку числа строк. Оценка берётся из статистики InnoDB и может заметно расходиться с реальностью — точное число даёт COUNT(*) через query. С этого инструмента стоит начинать знакомство с незнакомой базой.

無需輸入參數。

describe_table

Структура таблицы

Показывает структуру таблицы: столбцы с типами, обнуляемостью, значениями по умолчанию и комментариями, индексы с их составом, внешние ключи наружу и, главное, ссылки на эту таблицу из других (referenced_by) — именно они определяют, безопасно ли удалять строки. Разделы, кроме столбцов, можно отключить, если нужен только их список.

輸入參數table必填include_indexesinclude_foreign_keys

query

Выполнить читающий SQL-запрос

Выполняет один читающий запрос (SELECT, SHOW, DESCRIBE, WITH ... SELECT) и возвращает строки. Изменяющие запросы отклоняются даже при включённых правах на запись — для них есть execute. Запрос идёт внутри read-only транзакции, число строк ограничено MYSQL_MAX_ROWS: если ответ обрезан, поле truncated равно true и это префикс, а не весь результат. Значения подставляйте через ? и params — драйвер экранирует их сам.

輸入參數sql必填limitparams

explain

Показать план выполнения запроса

Возвращает план выполнения читающего запроса: какие индексы будут использованы и сколько строк сервер рассчитывает просмотреть. Обычный режим ничего не выполняет; analyze=true запускает запрос по-настоящему и показывает фактическое время — на больших таблицах это дорого. Полезно перед тяжёлой выборкой и при диагностике медленных запросов.

輸入參數sql必填formatparamsanalyze

execute

Выполнить изменяющий SQL-запрос

Выполняет один изменяющий запрос — INSERT, UPDATE, DELETE или REPLACE — и возвращает число затронутых строк. Сейчас сервер разрешает: только чтение. Права выдаются переменными ALLOW_INSERT_OPERATION, ALLOW_UPDATE_OPERATION и ALLOW_DELETE_OPERATION в конфигурации MCP-клиента и требуют перезапуска сервера — из диалога их получить нельзя. DDL (CREATE, ALTER, DROP, TRUNCATE) не поддерживается ни при каких настройках. Запрос выполняется сразу и без транзакции: откатить его отсюда нельзя. UPDATE и DELETE без WHERE и LIMIT требуют явного allow_full_table=true.

輸入參數sql必填paramsallow_full_table

版本歷史

4
  1. v1.1.1最新Nov 5, 2026
  2. v1.1.0Oct 31, 2026
  3. v1.0.1Oct 22, 2026
  4. v1.0.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分