初めに
今回はMCPを使い日本語のみでDB操作をしてみたいと思います。
MCPサーバーには DBHub を使ってみます。
DBHubとは
MySQL, PostgreSQL, SQL Server, MariaDB, SQLite と複数のデータベースに接続可能なMCPサーバーです。
https://github.com/bytebase/dbhub
データベース系MCPサーバーはいくつか世に出ていますが、MySQLのものはMySQL公式からもAnthropicからも出ていないので非公式のものを使う他ありません。が、このDBHubはGitHub厳選MCPサーバー集にも載っているので素性の怪しいものではない・・・筈。多分。
環境構築
必要なものは以下の通りです。
- MCPクライアント(今回は Claude Desktop Windows版 を使用)
- Node
- python
ここでNodeは新しすぎるとダメな場合があるようです。
2026年2月現在で最新のLTS版(24.13.0)では動作せず、20.20.0に下げたら動作しました。
Claude Desktop の設定方法
Claude Desktop の 「ファイル」>「設定」>「開発者」を開きます。
ここでローカルMCPサーバーを追加することができます。
「設定を編集」ボタンを押すとエクスプローラーが開き claude_desktop_config.json というファイルが選択された状態になるので、このファイルをテキストエディタで編集します。
claude_desktop_config.json 記入例
ここではローカルで起動しているMySQLを指定しています。
{
"mcpServers": {
"dbhub": {
"command": "npx",
"args": [
"@bytebase/dbhub@latest",
"--transport",
"stdio",
"--dsn",
"mysql://app_user:app_password@localhost:3306/dbname"
]
}
}
}
書き換えたら Calude Desktop を再起動します。
他に読み込み直させる方法はないようです。めんどい。
動作例
テーブル定義
予めこんなテーブルを作成しておき、レコードを入れておきました。
CREATE TABLE `customers` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`gender` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'X',
`phone` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=50001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
CREATE TABLE `orders` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`customer_id` bigint unsigned NOT NULL,
`order_number` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`status` enum('pending','paid','shipped','completed','canceled') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'pending',
`total_amount` int NOT NULL COMMENT '注文合計金額',
`ordered_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `order_number` (`order_number`),
KEY `fk_orders_customer` (`customer_id`),
CONSTRAINT `fk_orders_customer` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106473 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
動作させてみる
「顧客テーブルの性別内訳を教えて」と指示してみました。
するとまずテーブルの構成を確認するための許可を求めてきました。

何にも言ってないのに顧客テーブルが customers だと突き止めました。
次に目当てのテーブルのカラム定義を確認し、

ここで gender カラムには M/F/X という3種類の文字列を入れているのですが、何も言っていなくてもAIが値を解釈してくれています。
資料化させてみる
せっかく内訳を出してみたのでそのままグラフ化させてみましょう。

複数テーブルを跨る操作
今度はもう少し複雑な指示です。複数テーブルを参照するような指示をしてみましょう。
一旦SQLを出力した後でカラム定義を確認しています。
恐らく orders テーブルが初出のためでしょう。
最初に全テーブルの定義を読み込ませたりすると良いのかもしれませんね。

所感
エンジニアは基本的にSQLぐらい使えるので革命的に便利になった、とまでは言えないと思います。
が、それ以上に非エンジニアにとってデータベースへの敷居が低くなったのではないでしょうか。
エンジニアの力を借りずとも、例えばカスタマーサポートがお客さんからの問い合わせに対しちょっとしたデータベース調査したり、営業担当がデータを元に提案資料作ったりが捗りそうです。
今後はそういう使い方が当たり前になってくるんでしょうかね。




