はじめに
2026 年 6 月 11 日のアナウンスにて、SQL MCP Server が一般提供になりました。
どんなものなのか気になったので、軽く調べたついでにローカルで Docker を使ってデプロイして試してみます。
特別なことをやらせるとかではなく、"触ってみた" くらいの内容です。
目次
SQL MCP Server 雑まとめ
上記のドキュメントに記載がありますが、オープンソースで作成された、 AI エージェントなどが SQL データベースに "安全に" アクセスできるようにするための MCP サーバーです。
すべてではありませんが、以下のような特徴があります。
- 自然言語から SQL への変換 (NL2SQL) を、意図的にサポートしていない
- RBAC のサポート
NL2SQL 非サポート
AI エージェントから SQL DB を操作するんだから「こういうデータがほしい」と伝えたらクエリを生成して取ってくれるのでは?と思ったけどそうではないようです。
代わりに一旦 Data API Builder (DAB) という、データベース用の REST API、GraphQL API を作成するエンジンを用いて、NL2DAB を行います。 こうする理由は「決定論的に正確で適切な T-SQL を生成し、安全性と信頼性を維持するため」とのこと。
これは、生成 AI が直接自然言語から SQL を生成するとハルシネーションなどの特性から常に同じ結果にならない可能性がある、それにより、同じように依頼しても異なる SQL を生成し、結果として意図しないデータ取得や変更、削除をするかもしれない、といった懸念を排除することが目的のようです。
RBAC のサポート
Data API Builder の中では、ロールベースの承認が可能です。
ロールに対して操作可能なアクションやフィールドなどが指定でき、AI エージェントが MCP サーバーのツールを実行する際に適用されます。
これにより、AI エージェントが可能な操作に制限をかけられるためセキュリティが確保されます。
SQL MCP Server デプロイ
では、ローカルで SQL MCP Server をデプロイしてみます。 端末にいろいろインストールしたくなかったので、Docker 上で SQL MCP Server とテスト用の SQL Server をまとめて構成して、サンプルデータを入れました。
VS Code で試したものですが、まとめて以下のリポジトリに置いてあります。
中身は GitHub Copilot さんにお願いしました。あくまでもローカル検証用です。
GitHub - kzk839/sql-mcp-local-demo · GitHub
展開されるもの
docker-compose にて、次の 3 つのコンテナーが展開されるようになっています。
- SQL コンテナー
SQL Server 本体 - SQL-init コンテナー
サンプルデータの投入用 - MCP コンテナー
SQL MCP Server 本体
サンプル データ
サンプル データとして、次のテーブルと、テーブルごとにいくつかのデータがされます。
| テーブル | データ件数 | データの特徴 |
|---|---|---|
| Categories | 5 件 | Electronics / Furniture / Appliances / Office Supplies / Clothing などの商品カテゴリー |
| Product | 20 件 | 在庫0の商品、廃盤商品、480 円〜149,900 円の価格幅、2023〜2024 年の日付をもつ商品データ |
| Reviews | 24 件 | Rating 1〜5、NULL コメントあり、複数件レビューのある商品あり のレビューデータ |
エンティティ間のリレーションも設定されているため、「Electronics カテゴリの商品」などの横断クエリもで実施きます。
デプロイ
リポジトリを Clone して、SQL Server のパスワード指定用の env ファイルを作ります。
.env.example ファイルがあるので、コピペして名前を変えて、パスワードを指定すれば OK です。

あとは、sql-mcp-local 配下で docker を起動します。
docker compose up -d

コンテナーは起動しており、問題なさそうです。
docker compose ps curl http://localhost:5000/health


testを VS Code で開き、コマンドパレットから、SQL MCP Server を起動して、SQL MCP Server に接続します。
cd test code .




最初は sql-mcp-local フォルダで開いていたのですが、下のようにフォルダ内の init.sql を見に行くズルをしたので、init が見えないフォルダを開いてテストするようにしました。賢い笑

これでちゃんと、MCP サーバーのツールを使ってくれます。
テスト
では、デプロイできた SQL MCP Server を使って、簡単ではありますがいくつかテストしてみます。
一覧取得
カテゴリーの一覧を聞いてみます。
特にフィルタリングも必要ないので、カテゴリーテーブルの中身を取ってきているだけですね。
ツールの「describe_entities」と「read_records」を使っていることがわかります。

数値条件
商品価格で条件を付けてみます。
ツールへの入力にて、"Price ge 10000" という条件を指定しているのがわかります。
DAB の API にパラメーターとしてテーブルや条件などを与えると、それを基にクエリを作成、実行してくれて、API の結果としてクエリの実行結果が返ってくる、ということですね。

ソート
価格が高い順にして、個数指定をしてみました。
orderby と first を使って、指定条件を適用しています。

複合条件など
もう少し複雑なことを依頼してみます。
カテゴリと価格
カテゴリと価格、二つの条件を与えてみました。
and 条件を作ってくれています。

利益率
続いては、利益率の計算とソートです。
利益率は、商品の価格とコストから算出する必要がありますが、それも問題なく実施してくれています。

在庫、廃盤かどうか、平均レビュー評価
今度は 3 つの条件を入れてみますが、これも特に問題なし。
レビューの平均はクエリで対応できないため商品に関する条件で対象を取得した後、平均値を算出しているようです。

ちなみに、MCP Server を使わないで、とお願いした結果はこちら。結果は同じですが、クエリはすごい複雑そう。

価格帯別に、平均レビュー評価とレビュー件数
価格帯を 3 つ指定して、それぞれの平均レビュー評価とレビュー件数をお願いしました。
特にフィルタリング条件を付けていないように見えるので、 これはクエリだけできれいに取り出すことができないから全部取り出して分類、計算、みたいなことをしたんでしょうか。
指示を理解して意図したとおりに整理してくれているのであれば問題ないでしょう。


価格の変更、商品削除 (RBAC 確認)
最後に、RBAC の確認として価格を変更してみます。
anonymous は read 権限しかないので、価格の変更ができないと返って来ています。
実行を拒否するのではなく、試して、結果権限がないからダメ、になるんですね。

もちろん削除もできませんでした。

終わりに
ということで、どんな感じなのかなと SQL MCP Server を試してみました。
条件に従ったデータを取り出すためのクエリを考える、というのは経験がないながらも大変だろうと思いますが、自然言語でお願いしていろいろやってくれるのは便利で良さそうです。
よく考えたら今回は読み取りメインでしたが、テーブルやレコードの作成も同じようにできることでしょう。
ここで思いつく程度のクエリなら通常のエージェントだけでも生成、SQL Server に直接接続で十分対応できるのかもしれませんが、 より複雑なクエリになってくると、生成ごとの微妙なズレが大きな違いを生むことになったりする (そのための SQL MCP Server ) のかな 、などと考えていました。
ロールで権限を制御できるのはよさそうです。 誤りや、悪意を持って操作する場合でもある程度防ぐことができるのはとても重要だと思います。
これを Azure 上で Container Apps にデプロイして、 Azure SRE エージェントと連携して DB 系のトラシューで活用できたりするのかとか気になるので、試してみたい所存です。