Skip to main content
Glama
webshoten

DB Agent MCP Server

by webshoten
README.md
# DB Agent MCP Server

MySQLデータベースにクエリを実行するMCPサーバーです。

## セットアップ

### 1. 依存関係のインストール

```bash
bun install
```

### 2. 環境変数の設定

`.env`ファイルを作成し、以下の環境変数を設定してください:

```bash
# データベース設定(必須)
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=root
DB_NAME=appdb

# サーバー設定(オプション)
PORT=3000

# 認証設定(オプション)
AUTH_ENABLED=false  # 認証を有効にする場合は true
API_KEY=your-secret-api-key  # 認証が有効な場合に使用するAPIキー
```

**認証について:**
- `AUTH_ENABLED=false`(デフォルト): 認証なしで動作します(開発環境向け)
- `AUTH_ENABLED=true`: 認証が有効になります。この場合、`API_KEY`の設定が必須です
- 認証が有効な場合、リクエストには以下のいずれかの方法でAPIキーを含める必要があります:
  - `Authorization: Bearer <API_KEY>` ヘッダー
  - `Authorization: ApiKey <API_KEY>` ヘッダー
  - `X-API-Key: <API_KEY>` ヘッダー

### 3. MySQLデータベースの起動

```bash
docker build -t local-mcp-mysql ./docker/mysql

docker run -d \
  -p 3306:3306 \
  --name mcp-mysql \
  -e MYSQL_ROOT_PASSWORD=root \
  local-mcp-mysql

docker exec -it mcp-mysql mysql -uroot -proot appdb
```

#### Dockerコンテナの停止・削除

コンテナを停止する場合:

```bash
docker stop mcp-mysql
```

コンテナを停止して削除する場合:

```bash
docker stop mcp-mysql
docker rm mcp-mysql
```

コンテナを停止せずに削除する場合(強制削除):

```bash
docker rm -f mcp-mysql
```

### 4. MCPサーバーの起動

HTTPサーバーとして起動します:

```bash
bun run start
```

デフォルトで`http://localhost:3000/mcp`で起動します。ポートを変更する場合は環境変数`PORT`を設定してください。

```bash
PORT=8080 bun run start
```

**認証について:**
- デフォルトでは認証が無効(`AUTH_ENABLED=false`)です
- 本番環境では`AUTH_ENABLED=true`と`API_KEY`を設定して認証を有効にしてください

### 5. MCPクライアントの設定

#### Cursorの場合

**認証が無効な場合(開発環境):**

Cursorの設定ファイル(`~/.cursor/mcp.json` または設定UI)に以下を追加:

```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp"
    }
  }
}
```

**認証が有効な場合(本番環境):**

`headers`セクションを使用してAPIキーを指定します。以下のいずれかの方法を使用できます:

**方法1: X-API-Keyヘッダーを使用**
```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "X-API-Key": "your-secret-api-key"
      }
    }
  }
}
```

**方法2: Authorizationヘッダーを使用(Bearer形式)**
```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer your-secret-api-key"
      }
    }
  }
}
```

**方法3: Authorizationヘッダーを使用(ApiKey形式)**
```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "ApiKey your-secret-api-key"
      }
    }
  }
}
```

#### Claude Desktopの場合

**認証が無効な場合(開発環境):**

`~/Library/Application Support/Claude/claude_desktop_config.json` に以下を追加:

```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp"
    }
  }
}
```

**認証が有効な場合(本番環境):**

`headers`セクションを使用してAPIキーを指定します:

```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "X-API-Key": "your-secret-api-key"
      }
    }
  }
}
```

または

```json
{
  "mcpServers": {
    "db-agent": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer your-secret-api-key"
      }
    }
  }
}
```

**重要**: MCPサーバーを起動してから、CursorやClaude Desktopを再起動してください。

## 使用方法

MCPクライアントから以下の2つのツールを使用してSQLクエリを実行できます。

### `run_query_readonly` - 読み取り専用クエリ(承認不要)

SELECT、SHOW、DESCRIBE、DESC、EXPLAINクエリを実行します。このツールは承認を求めません。

例:

- `SELECT * FROM users LIMIT 10;`
- `SELECT COUNT(*) FROM sessions;`
- `SHOW TABLES;`
- `DESCRIBE users;`
- `EXPLAIN SELECT * FROM users;`

### `run_query_write` - 書き込みクエリ(承認必要)

INSERT、UPDATE、DELETE、CREATE、DROP、ALTERなどの書き込み操作を実行します。このツールはユーザーの承認を求めます。

例:

- `INSERT INTO users (name, email) VALUES ('John', 'john@example.com');`
- `UPDATE users SET name = 'Jane' WHERE id = 1;`
- `DELETE FROM sessions WHERE expired_at < NOW();`
- `CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(255));`