MySQL MCP Server について
MySQL MCP Serverは、MCPクライアントからMySQLデータベースを調査・検索するツールを提供します。安全確認付きの件数制限SELECTに加え、管理用途向けに書き込みやDDL操作も任意で利用できます。
主な機能
- 01テーブル一覧とスキーマ確認
- 02件数制限付きSELECTの実行
- 03テーブルDDLの取得
- 04クエリ実行計画の確認
- 05テーブルと行数の概要
- 06任意の書き込み・DDL操作
活用シーン
- 01データベーススキーマの調査
- 02MCPクライアントからの検索結果取得
- 03クエリ実行計画の確認
- 04承認済みのデータベース変更
MCP 対応
stdio経由で、MySQLの調査、検索、実行計画の確認、概要取得ツールをMCPクライアントに提供します。書き込みとDDLのツールは任意で、データを変更・削除できるかはデータベース権限によります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mdev-mysql-mcp-serverMYSQL_HOSTMySQL hostMYSQL_PORTMySQL portMYSQL_USERMySQL usernameMYSQL_PASSWORDシークレットMySQL passwordMYSQL_DATABASEMySQL database nameMYSQL_POOL_SIZEMySQL connection pool sizeLOG_LEVELPython logging levelMYSQL_READ_QUERY_LIMITMaximum rows returned by read queriesローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MySQL MCP サーバー
MCP 対応クライアントから MySQL データベースを調査し、クエリを実行するための Python 製 Model Context Protocol(MCP)サーバーです。テーブルの検出、スキーマの確認、読み取りクエリの実行、DDL の取得、クエリの説明、および制御されたデータベース管理ワークフロー向けのオプションの書き込み/DDL ツールを提供します。
機能
- テーブルの一覧表示とテーブルスキーマの説明
- 安全性チェック付きの SELECT クエリ実行
SHOW CREATE TABLEの出力取得- クエリ実行計画の説明
- テーブルと行数の概要表示
- データベースの権限を意図的に昇格して実行するユーザー向けの、オプションの書き込み/DDL ツール
安全性モデル
mysql_execute_read_query は、SELECT で始まる単一のステートメントのみを受け付け、一般的なデータ変更用 SQL キーワードやリスクのあるファイル読み書き形式を拒否し、返却される行数を MYSQL_READ_QUERY_LIMIT で制限します。これは安全策であり、データベース権限の代わりにはなりません。安全に調査するには、専用の読み取り専用 MySQL ユーザーを使用してください。書き込みツールと DDL ツールは、設定されたデータベースユーザーに権限があればデータを変更または破壊する可能性があります。MCP クライアントでは、これらのツールを手動承認に設定してください。
要件
- Python 3.11+
- MySQL 5.7+ または MySQL 8.0+
- Claude Desktop、Cursor、VS Code、その他の MCP ホストなどの MCP 対応クライアント
インストール
PyPI に公開されたら、標準的な Python MCP パッケージと同様にサーバーをインストールまたは実行してください。
uvx mdev-mysql-mcp-server
ソースからローカルで開発する場合:
git clone https://github.com/musaddiq-dev/mysql-mcp-server.git
cd mysql-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -e .
設定
環境変数のサンプルファイルをコピーし、データベース接続情報を設定してください。
cp .env.example .env
| 変数 | 説明 | 必須 | デフォルト |
|---|---|---|---|
MYSQL_HOST | MySQL ホスト | いいえ | localhost |
MYSQL_PORT | MySQL ポート | いいえ | 3306 |
MYSQL_USER | MySQL ユーザー名 | いいえ | root |
MYSQL_PASSWORD | MySQL パスワード | いいえ | 空 |
MYSQL_DATABASE | MySQL データベース名 | はい | 空 |
MYSQL_POOL_SIZE | 接続プールのサイズ | いいえ | 5 |
LOG_LEVEL | Python のログレベル | いいえ | INFO |
MYSQL_READ_QUERY_LIMIT | 読み取りクエリで返される最大行数 | いいえ | 1000 |
読み取り専用ユーザーの例:
CREATE USER 'mcp_readonly'@'localhost' IDENTIFIED BY 'change-me';
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'localhost';
FLUSH PRIVILEGES;
実行
mdev-mysql-mcp-server
PyPI 公開前にローカルのチェックアウトから実行する場合:
python -m mysql_mcp_server.server
MCP クライアントの設定
公開済みのパッケージをインストールする場合は、uvx の使用を推奨します。stdio を使用する MCP サーバーは、プロトコルメッセージのみを stdout に書き込む必要があります。このサーバーは Python のログ機能を通じてログを stderr に書き込みます。
Claude Desktop / Cursor / Windsurf / Cline
ほとんどの MCP クライアントで、次の mcpServers JSON 形式を使用できます。
{
"mcpServers": {
"mysql": {
"command": "uvx",
"args": ["mdev-mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}
このリポジトリからローカルで開発する場合は、代わりにインストール済みのコンソールスクリプトのパスを使用してください。
{
"mcpServers": {
"mysql": {
"command": "/absolute/path/to/mysql-mcp-server/.venv/bin/mdev-mysql-mcp-server",
"args": [],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}
Claude Code CLI
claude mcp add mysql \
--env MYSQL_HOST=localhost \
--env MYSQL_PORT=3306 \
--env MYSQL_USER=mcp_readonly \
--env MYSQL_PASSWORD=change-me \
--env MYSQL_DATABASE=your_database \
-- uvx mdev-mysql-mcp-server
VS Code MCP
VS Code は MCP 設定で同じ command/args/env モデルを使用します。
{
"servers": {
"mysql": {
"type": "stdio",
"command": "uvx",
"args": ["mdev-mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}
ツール
| ツール | 目的 | 安全性 |
|---|---|---|
mysql_list_tables | 設定済みデータベース内のテーブルを一覧表示 | 読み取り専用 |
mysql_describe_table | テーブルのスキーマを表示 | 読み取り専用 |
mysql_execute_read_query | 単一の行数制限付き SELECT クエリを実行 | 読み取り専用の安全策 |
mysql_execute_write_query | 単一の INSERT、UPDATE、または DELETE を実行 | 破壊的 |
mysql_execute_ddl | 単一の CREATE、DROP、ALTER、または TRUNCATE を実行 | 破壊的 |
mysql_get_table_ddl | SHOW CREATE TABLE の出力を返す | 読み取り専用 |
mysql_explain_query | 単一のクエリに対して EXPLAIN を実行 | 読み取り専用 |
mysql_get_database_summary | テーブル一覧と行数を返す | 読み取り専用 |
スモークテスト
データベースを使わずに構文を確認するには:
python -m py_compile src/mysql_mcp_server/server.py
データベースを設定した状態でサーバーを起動し、MCP クライアントから list_tables を呼び出してください。
配布
このサーバーは、標準的な Python MCP 配布経路を通じて公開されています。
- PyPI パッケージ:
mdev-mysql-mcp-server - MCP Registry 名:
io.github.musaddiq-dev/mysql-mcp-server - 実行時のヒント:
uvx - トランスポート:
stdio
この README の先頭にある mcp-name マーカーは、MCP Registry の所有権確認に必要です。ユーザーは、ローカルの MCP クライアント設定で uvx mdev-mysql-mcp-server を使用することを推奨します。
セキュリティに関する注意事項
- 認証情報を含む
.envや MCP クライアント設定をコミットしないでください。 - 最小権限のデータベースユーザーを使用してください。
execute_write_queryとexecute_ddlは、明示的な手動承認が必要な状態にしてください。- 追加の認証とトランスポートセキュリティなしに、このサーバーを信頼できないネットワーク上に公開しないでください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。