CursorでMySQL用MCPサーバーを使ってみる

## はじめに

皆さん、Cursorは使っていますでしょうか。
自分は最近Cursorを導入し、大変便利だと感じたため、Pro会員に課金しました。

そして最近、こうしたAIチャットツールと外部ツールを連携するための、MCPサーバーなるものがあることを知りました。
試しにMySQLのMCPサーバーを導入してみたところ、Cursorのチャットから直接MySQLのデータベースへアクセスできるようになりました。
これによって、Cursorが直接データベースにアクセスして、クエリを実行してくれるようになります。
エラー時にデータベースへアクセスしてデータを取得したり、テーブル定義を変更したりしてくれます。
非常に便利です。

この記事では、備忘録も兼ねて、MySQLのMCPサーバーを導入する方法と、CursorからMCPサーバーにアクセスする方法を紹介します。

## MCPサーバーとは

そもそもMCPサーバーとは何かというと、自分の理解では「AI生成ツール」と「外部ツール」を連携するためのものです。

これまでも、ChatGPTのFunctionCallingやプラグインなど、類似の仕組みは存在していました。
しかし、これらの仕組みは、今や多数存在する他の生成AI（Claude、DeepSeek、etc...）に対して普遍的に使えるようなものではありません。
そのため、他の生成AIに対して連携しようとすると、その度に新しくコードを書き直さなければなりませんでした。

ところが、MCPサーバーの登場によって、こういった規格が統一されました。
つまり、一度規格に従って生成AIと外部ツールとの連携用のコードを書いたら、ClaudeだろうがDeepSeekだろうが、後はずっとそれを使いまわせるようになったということです。

この部分に筆を割き過ぎると、この記事の主題から外れてしまうので、詳しく知りたい方は以下のような記事を参考にしてください。
<https://zenn.dev/nanami_bitwise/articles/966efd5438e75b>

## MySQLのMCPサーバーを使ってみる

今回、こちらのネットで検索して一番上に出てきた、こちらのMCPサーバーを使うことにします。

<https://github.com/designcomputer/mysql_mcp_server>

Github Desktop、コマンドライン、Visual Studioなど、お好みの方法で落としてきてください。

### 前提: 実行環境

自身の実行環境は以下の通りです。

- Windows 11
- Cursor 0.48.9
- PowerShell 7.5.0
- 方法1の場合
  - python 3.13
  - pip 25.0.1
  - uv 0.6.13
- 方法2の場合
  - npm 10.9.2

MCPサーバーを利用するに際して、pythonとpipとuv、またはnpmが必要となります。
各自、ローカル環境で実行できるようにしておいてください。

### 方法1: MCPサーバーアプリケーションをローカルに持ってきて起動

まずは、ローカルで以下のコマンドを実行します。
後々このコマンドを実行したパスを使用することになるので、自分で管理しやすい任意の場所に保存しておいてください。

```pws
pip install mysql-mcp-server
```

次に、Cursorの設定から、MCP→Add new global MCP serverを選択し、以下の通り設定します。

```json
{
  "mcpServers": {
    "mysql": {
      "command": "uvへのフルパス",
      "args": [
        "--directory",
        "src\\mysql_mcp_serverへのフルパス",
        "run",
        "mysql_mcp_server"
      ],
      "env": {
        "MYSQL_HOST": "ホスト名",
        "MYSQL_PORT": "3306（ホスト側の設定に合わせてください）",
        "MYSQL_USER": "ユーザー名",
        "MYSQL_PASSWORD": "パスワード",
        "MYSQL_DATABASE": "データベース名"
      }
    },
  }
}
```

いくつか注意点を挙げます。

#### uvへのフルパスを記載する

Windows環境では、uvとだけ記載すると、コマンドを見つけることができないという旨のエラーが出ました。
そのため、uvコマンド（uv.exe）へのフルパスを記載する必要がありました。
おそらく、`C:\\Users\\ユーザー名\\.local\\bin\\uv`のような記載になるはずです。

#### パスの記載方法について

Windows環境では、\（バックスラッシュ）を用いるべきケースがほとんどですが、どうやら現在のWindowsのシェルはそのあたりを上手く変換してくれるようです。
そのため、/（スラッシュ）でも問題なく認識してくれます。
自分は念のためバックスラッシュ2つ（jsonでのエスケープのため）で記載していますが、お好みでいいと思います。
このあたりは今後検証してみたいです。

#### MySQLのホスト名とデータベース名

自分はこの部分を勘違いしており、かなり時間を取ってしまいました。
今回、自分が接続しようとしていたデータベースのURLは、プログラム上だと以下のような文字列になっていました。

jdbc:mysql://hoge.com:3306/fuga

上記文字列は、hoge.comにあるfugaテーブルに対して、jdbcでmysqlに接続する、という意味です。
つまりこの時、ホスト名はhoge.comであり、データベース名はfugaとなります。
Cursorの設定ファイルで言うと、MYSQL_HOSTにはhoge.com、MYSQL_DATABASEにはfugaを指定する必要があります。

### 方法2: Smitheryを通して起動

こちらの方法を使えば、ローカルにデータを落としてくる必要がなくなるようなのですが、自分の環境だと上手く動作しませんでした。
挑戦したい方は、以下から確認してみてください。

<https://smithery.ai/server/mysql-mcp-server>

## 動作確認

まず、CursorのMCP設定欄が以下のようになっていることを確認してください。
緑色の丸が付いていたら一旦問題ないです。

![mysql-mcp-setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558837/0d1c9c1a-8c07-40f3-8c98-9c95d3038ebd.png)

次に、Cursorのチャットで、以下のように問い合わせてみてください。

`〇〇テーブルからデータを取得してください`

以下のようにデータを返してくれたら成功です。

![mysql-mcp-screen-shot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558837/fe00396d-acf3-474b-8559-7bf4f0f91a03.png)

## 上手く動かない場合

`Ctrl + Shift + U` で「出力」を開き、右上のプルダウンから「Cursor MCP」を開いてください。
MCPに関連するログが出力されているので、エラー解決のヒントになるはずです。

また、それでも上手く動かない場合は、CursorのMCPの設定から更新ボタンを押すか、Cursorを再起動してみると上手く動く可能性があります。
Cursorは絶賛開発中のエディタなので、このあたりの挙動はやや不安定なのかもしれません。

## まとめ

Cursorが非常に便利だと感じる一方、ここまで便利ならデータベース側の操作も自動でやってくれないだろうかと思っていました。
このMCPサーバーを使うことで、データベースの操作までもAIが行ってくれるようになります。
実際に業務で使用する場合は、セキュリティやハルシネーションなどの課題を検討する必要があると思いますが、とても可能性を感じる素晴らしいMCPサーバーだと思いました。