MySQL MCP Server
by xiangma9712
Verified
# MySQL MCP Server
MySQLデータベースを操作するためのMCPサーバーです。
read onlyなクエリの実行(query)と、最終的にロールバックされるwrite queryの実行(test_execute)をサポートしています。
## セットアップ
### 環境変数
以下の環境変数を`~/.mcp/.env`に追加してください:
```
MYSQL_HOST=host.docker.internal # Dockerコンテナからホストのサービスにアクセスするためのホスト名
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password
```
> **注意**: `host.docker.internal`はDockerコンテナからホストマシンのサービスにアクセスするための特別なDNS名です。
> ホストマシン上で動作しているMySQLサーバーに接続する場合は、この設定を使用してください。
> 別のMySQLサーバーに接続する場合は、適切なホスト名に変更してください。
### mcp.jsonの設定
```json
{
"mcpServers": {
"mysql": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--add-host=host.docker.internal:host-gateway",
"--env-file",
"/Users/username/.mcp/.env",
"my-mcp/mysql"
]
}
}
}
```
## 使用方法
### サーバーの起動
```sh
docker run -i --rm --add-host=host.docker.internal:host-gateway --env-file ~/.mcp/.env my-mcp/mysql
```
> **注意**: OrbStackを使用している場合、`host.docker.internal`は自動的にサポートされているため、`--add-host`オプションは省略可能です。
> Docker Desktopでも多くの場合自動的にサポートされていますが、確実性を高めるために`--add-host`オプションを追加することを推奨します。
### 利用可能なコマンド
#### 1. 読み取り専用のクエリの実行
```json
{
"type": "query",
"payload": {
"sql": "SELECT * FROM your_table"
}
}
```
レスポンス:
```json
{
"success": true,
"data": [
{
"id": 1,
"name": "example"
}
]
}
```
#### 2. クエリの実行確認
```json
{
"type": "test_execute",
"payload": {
"sql": "UPDATE your_table SET name = 'updated' WHERE id = 1"
}
}
```
レスポンス:
```json
{
"success": true,
"data": "更新SQLクエリが実行可能です。"
}
```
#### 3. テーブル一覧
```json
{
"type": "list_tables"
}
```
レスポンス:
```json
{
"success": true,
"data": ["table1", "table2", "table3"]
}
```
#### 4. テーブルの詳細確認
```json
{
"type": "describe_table",
"payload": {
"table": "your_table"
}
}
```
レスポンス:
```json
{
"success": true,
"data": [
{
"Field": "id",
"Type": "int(11)",
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": ""
},
{
"Field": "name",
"Type": "varchar(255)",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": ""
}
]
}
```
## 実装の詳細
- TypeScriptで実装
- mysql2パッケージを使用
- Dockerコンテナとして実行
- 標準入力を通じてJSONコマンドを受け付け
- 標準出力を通じてJSONレスポンスを返す
- `host.docker.internal`を使用してホストのMySQLに接続(OrbStackとDocker Desktop両対応)
## セキュリティ上の注意
- 環境変数を使用して機密情報を管理
- SQLインジェクション対策は実装者の責任
- 本番環境での使用時は適切なネットワーク設定が必要
- ホストマシンのサービスに接続する場合、適切なファイアウォール設定が必要