2026-09-13
· Dylan YuMCPでClaudeとCursorにデータベースを管理させる方法(ローカル環境)
Model Context Protocolを使えば、AIアシスタントがデータベースに直接アクセスできます。しかし、ほとんどのMCPデータベースサーバーはデータをクラウドリレーに送信します。本記事では、Claude、Cursor、Windsurfがデータをマシンから外に出さずにデータベースをクエリ・管理できるローカルMCPサーバーの構築方法を解説します。
Anthropicが発表したModel Context Protocolは、AIアシスタントが外部ツールに接続するための標準的な手段として、静かに浸透しています。CursorもClaude DesktopもWindsurfもCodexも対応しています。2026年に本格的なAIコーディングアシスタントを使っているなら、意識するしないに関わらずMCPを利用しているはずです。
MCPで最も便利な用途の一つが、AIアシスタントとデータベースの連携です。「今週登録したユーザーをすべて見せて」と自然言語で尋ねると、AIがクエリを組み立て、実際のデータベースに対して実行し、結果をチャットに返してくれます。スキーマ定義をコピペする必要も、手動でSQLを書く必要も、クエリを実行するために別のデータベースツールに切り替えて結果をスクリーンショットで撮る必要もありません。
うまく動けば、本当に素晴らしい体験です。
ただし、セキュリティを気にする人ならタブを閉じて手作業に戻りたくなるような落とし穴があります。ほとんどのMCPデータベースサーバー——公式のPostgres MCP、コミュニティ製のSQLite MCP、「ChatGPTにデータベースを接続」する各種サービス——は、AIクライアントが直接データベースに接続する仕組みです。つまり、データベースの認証情報とクエリ結果がAIプロバイダーのインフラを経由することになります。プロトタイプ用のローカルSQLiteファイルなら問題ありません。しかし、実際のユーザーデータが入った本番のPostgresデータベースでは、ほとんどのチームにとって選択肢に入らないでしょう。
私はBasevoltという、データベースを扱うローカルファーストのデスクトップアプリを開発しています。最近実装した機能の一つが、組み込みのMCPサーバーです。仕組みはシンプルで、AIアシスタント(Claude、Cursor、Windsurf)がマシン上で動くBaseVoltに接続し、BaseVoltがデータベースに接続します。AIはデータベースの認証情報を見ることはありません。データベースへの接続はローカルに留まります。マシンから外に出るのは、AIが質問に答えるために必要なクエリ結果だけです——しかも、それは中間のクラウドリレーを経由せず、直接AIプロバイダーに送られます。
本記事では、この設定を実際に行うための実践的なガイドと、ローカルアプローチがなぜ重要なのか、代替手段とどう違うのかを深く掘り下げて解説します。
MCPのデータベース問題
「セキュリティ」という言葉は抽象すぎるので、具体的に問題を説明します。
Claude DesktopやCursorでMCPデータベースサーバーを設定するとき、通常はデータベースに接続するサーバープロセスを指定します。例えば公式の@modelcontextprotocol/server-postgresは、Postgresの接続文字列を受け取り、データベースをMCPツール群(クエリ実行、テーブル一覧、スキーマ記述など)としてAIクライアントに公開します。
Claudeに「直近10件の注文を見せて」と尋ねたとき、実際に何が起きるかを見てみましょう。
- ClaudeがSQL文字列とともに
queryツールを呼び出すことを決定する。 - Claude Desktopがそのツール呼び出しを、マシン上で動いているMCPサーバープロセスに送信する。
- MCPサーバープロセスがPostgresデータベースに対してクエリを実行する。
- 結果がMCPサーバーに返される。
- MCPサーバーが結果をClaude Desktopに返す。
- Claude Desktopが結果をAnthropicのAPIに送信し、Claudeが読み取って応答する。
ステップ1〜5はローカルで完結します。しかしステップ6は違います。クエリ結果——実際の注文データ、顧客名、金額など——は、会話コンテキストの一部としてAnthropicのサーバーに送信されます。Claudeがそれを読んで応答するためです。これはMCPの仕組みそのものです。AIが結果を使うには、結果を見る必要があります。
では、これは問題なのでしょうか。状況によります。ダミーデータの入ったローカル開発用データベースをクエリするなら、問題ありません。しかし、実際の顧客PIIが入った本番データベースをクエリするなら、問題です。第三者にデータを送信することになり、データ処理契約やGDPR、HIPAA、SOC 2の要件に違反する可能性があります。
しかし、クエリ結果がAIプロバイダーに送られることすら最悪の部分ではありません。最悪なのは認証情報です。
直接接続するデータベースMCPサーバーの場合、MCPサーバープロセスがデータベースに接続するために認証情報を必要とします。それらの認証情報はMCP設定ファイル——通常はclaude_desktop_config.jsonや.cursor/mcp.json——に保存されます。ディスク上にある分には問題ありません。しかし、MCPサーバープロセス自体は、データベースへの接続を維持し続ける長時間実行プロセスです。そのプロセスが侵害されたり、AIクライアントが悪意のあるツール呼び出しを実行させられたりすれば、データベースが露出することになります。
さらにクラウドリレー型もあります。一部のMCPデータベースサービスはローカルでまったく動きません。データベースの認証情報を提供すると、彼らのクラウドインフラからデータベースに接続し、AIクライアントはネットワーク経由でそのクラウドサービスと通信します。認証情報もデータも他人のサーバーに置かれ、両方を適切に扱ってくれることを信じるしかありません。なぜかこちらの方が人気があるのに、問題はより明らかです。
根本的な問題は、ほとんどのMCPデータベース構成が、多すぎるアクセス権を多すぎる相手に信頼させる点にあります。AIプロバイダーはデータを見ます。MCPサーバープロセスは認証情報を持ちます。クラウドリレーサービスはその両方を持ちます。AIアシスタントをより便利にするはずのプロトコルにおいて、データベースのユースケースには信頼の問題があるのです。
MCPとは何か(簡単な説明)
詳しく進める前に、MCPを知らない方のために説明しておきます。すでにご存知の方はこのセクションを飛ばしてください。
MCP(Model Context Protocol)は、AIアシスタントが外部ツールを呼び出すためのプロトコルです。JSON-RPCベースで、AIクライアント(Claude Desktopなど)が便利な機能を提供するサーバープロセスと通信するための標準化された方法です。
アーキテクチャはシンプルです。
- AIクライアント(Claude Desktop、Cursor、Windsurf)は、あなたがチャットしている相手です。マシン上で動きます。
- MCPサーバーは、AIが呼び出せる「ツール」や「リソース」を公開する別プロセスです。これも通常、AIクライアントが起動するローカルプロセスとしてマシン上で動きます。
- プロトコルは、両者が通信するための言語です。AIクライアントがツール呼び出しを送り、MCPサーバーが実行して結果を返します。
Claudeと会話していて、Claudeがデータベースをクエリする必要があると判断したとき、MCPツールを呼び出します。AIクライアントがその呼び出しをMCPサーバーに転送します。MCPサーバーが処理を実行し、結果を返します。Claudeは結果を読み取って会話を続けます。
重要なのは、AIクライアントがMCPツールを呼び出すタイミングを自分で判断するという点です。手動で呼び出す必要はありません。普通に話しかけるだけで、AIが質問に答えるためにツールを呼び出す必要があると判断します。これがMCPを魔法のように感じさせる理由です。「すべてのテーブルを見せて」と言えば、list_tablesツールが利用可能だと分かっているAIが、自動的に実行してくれます。
Claude Desktopでの最小限のMCPサーバー設定は次のようになります。
{
"mcpServers": {
"my-database": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite"],
"env": {
"DB_PATH": "/path/to/your/database.db"
}
}
}
}
これはClaude Desktopに対して、「起動時にこのコマンドを実行してMCPサーバープロセスを立ち上げ、そのツールをmy-databaseとして公開せよ」と指示しています。データベースについて質問すると、そのサーバーが公開しているツールを呼び出せるようになります。
プロトコル自体はオープンで、ドキュメントも充実しています。Anthropicが仕様を公開し、TypeScriptとPythonのSDKが提供されています。誰でもMCPサーバーを書けます。だからこそ、すでに数百のMCPサーバーが存在します——GitHub、Slack、ファイルシステム、データベース、AIに連携させたいものなら何でもあります。
問題はプロトコルではありません。プロトコルは問題ありません。問題はデータベースMCPサーバーの典型的なデプロイ方法にあります。それが本記事の残りのテーマです。
AIとデータベースを接続する3つの方法
AIアシスタントとデータベースを接続するためのアーキテクチャパターンは3つあります。外側から見るとどれも同じように見えます——質問して答えが返ってくる——しかし、データがどこに行くのか、誰が何にアクセスできるかが大きく異なります。
オプション1:直接データベースMCPサーバー
最も一般的なアプローチです。データベースに直接接続するMCPサーバープロセスをローカルで動かします。公式のPostgres MCPサーバーもこの方式です。コミュニティ製のSQLite MCPサーバーの多くも同様です。
フローは次のようになります。
You → AI Client (Claude Desktop) → MCP Server (local process) → Your Database
仕組み:MCPサーバーにデータベースの接続文字列やファイルパスを設定します。サーバープロセスがデータベースへの接続を維持します。AIがツールを呼び出すと、サーバーがクエリを実行して結果を返します。
メリット:セットアップがシンプルです。プロセス1つ、設定ファイル1つ。ローカルデータベースでうまく動きます。公式サーバーはオープンソースで監査可能です。
デメリット:データベースの認証情報がMCPサーバープロセス内に存在します。クエリ結果がAIクライアントを経由してAIプロバイダーに流れます。本番データベースに接続している場合、AIプロバイダーにデータを信頼することになります。AIとデータベースの間にアクセス制御レイヤーがありません——AIがDROP TABLE usersを実行しようとすれば、MCPサーバーは喜んで実行してしまいます(一部のサーバーには読み取り専用モードがありますが)。
いつ使うべきか:ローカル開発用データベース、機密でないデータのSQLiteファイル、失っても構わない使い捨てのデータベース。本番環境には使わないでください。
オプション2:クラウドリレーMCP
ホスト型のMCPサーバーを提供するサービスもあります。データベースの認証情報を提供すると、彼らのクラウドからデータベースに接続し、AIクライアントはネットワーク経由でそのサービスと通信します。
フローは次の通りです。
You → AI Client → Cloud Relay Service → Your Database
仕組み:アカウントを作成し、Webダッシュボードにデータベースの接続情報を追加すると、クライアント設定に書くためのMCPエンドポイントURLが発行されます。AIクライアントがツール呼び出しをクラウドに送り、クラウドがクエリを実行し、同じ経路で結果が戻ってきます。
メリット:管理すべきローカルプロセスがありません。どのマシンからでも使えます。リレーサービスがクエリログ、レート制限、監査ログなどの機能を追加できます。
デメリット:データベースの認証情報が他人のサーバーに保存されます。クエリ結果が彼らのインフラを経由します。信頼のチェーンに第三者を追加することになります。サービスが障害を起こせば、AIツールからのデータベースアクセスが失われます。 breachが起きれば、データベースの認証情報が影響範囲に入ります。
いつ使うべきか:正直に言うと、データベース用途ではお勧めしにくいです。セキュリティのトレードオフを正当化するのが難しい。データがすでに公開に近い読み取り専用の分析用データベースならあり得るかもしれませんが、それでもなぜ仲介者を挟むのかという疑問は残ります。
オプション3:デスクトップアプリ経由のローカルMCPサーバー(BaseVolt)
私がBaseVoltで採用したアプローチです。データベースに直接接続する単独のMCPサーバープロセスを動かすのではなく、データベース接続を管理し、その機能の一つとしてMCPサーバーを公開するデスクトップアプリを動かします。
フローは次の通りです。
You → AI Client (Claude Desktop) → BaseVolt (local process) → Your Database
仕組み:BaseVoltはSQLiteファイル、Postgres、MySQL、Cloudflare D1に接続するデスクトップアプリです。接続を管理し、認証情報を扱い、データをブラウズ・編集するためのUIを提供します。同時にlocalhostでMCPサーバーも動かします。AIクライアントはそのMCPサーバーに接続します。AIがツールを呼び出すと、BaseVoltがデータベースに対して実行し、結果を返します。
メリット:データベースの認証情報はBaseVolt内に留まり、設定ファイルやクラウドサーバーには置かれません。データベースへの接続はローカルです。クラウドリレーがありません。アクセス制御レイヤーがあり、BaseVoltはMCPサーバーに許可する操作を制限できます(読み取り専用、特定テーブルのみなど)。さらに、MCP連携に加えてフル機能のデータベースワークスペースUIも使えます。
デメリット:デスクトップアプリをインストールして実行する必要があります。マシン上にもう一つものが増えます。(ただし、すでにデータベースツールを使っているなら、追加ではなく置き換えになります。)
いつ使うべきか:大切にしたいデータベースを扱うとき——本番データ、顧客データ、認証情報やクエリ結果を無関係なインフラに流したくないすべてのケース。正直に言えば、ほとんどの場面でそうあるべきです。
BaseVoltのMCPサーバーをセットアップする(ステップバイステップ)
実践に入りましょう。BaseVoltでローカルMCPサーバーをセットアップし、Claude Desktop、Cursor、Windsurfに接続する方法を説明します。
ステップ1:BaseVoltをインストールしてデータベースに接続する
basevolt.appからBaseVoltをダウンロードしてください。macOSとWindowsで利用可能です。他のデスクトップアプリと同じようにインストールできます。
BaseVoltを初めて開くと、データソースの追加を求められます。選択肢は次の通りです。
- SQLite:マシン上の
.dbまたは.sqliteファイルを指定します。BaseVoltが直接読み取ります。 - PostgreSQL:ホスト、ポート、データベース名、ユーザー名、パスワードを入力します。標準のPostgresワイヤープロトコルで接続します。
- MySQL:同じ要領で——ホスト、ポート、認証情報を入力します。
- Cloudflare D1:Cloudflareアカウントで認証し、D1データベースを選択します。BaseVoltはD1 REST APIと通信します。
今回はローカルのPostgresデータベースに接続すると仮定して進めます。接続情報を入力して「接続」をクリックすると、BaseVoltがスキーマを読み込みます。サイドバーにテーブル、カラム、リレーションシップが表示されるはずです。
無料枠では最大2つのデータソースに接続でき、試用には十分です。Proは$99/年で、より多く必要な場合にご利用ください。
ステップ2:BaseVoltの設定でMCPサーバーを有効にする
BaseVoltの設定を開きます(左下の歯車アイコン、またはmacOSではCmd+,、WindowsではCtrl+,)。MCPセクションに移動します。
「MCPサーバーを有効化」というトグルがあります。オンにしてください。
BaseVoltがlocalhostでMCPサーバーを起動します。デフォルトでは利用可能なポートを自動選択し、http://localhost:3107/mcpのようなURLを表示します。このURLをメモしておいてください。次のステップで必要になります。
ここで言及しておくべきオプションがいくつかあります。
- 読み取り専用モード:有効にすると、MCPサーバーはSELECTクエリの実行とスキーマの記述はできますが、テーブル作成、カラム変更、データ書き込みはできません。AIに分析はさせたいが変更はさせたくない本番データベースに適しています。
- 許可するデータソース:複数のデータベースを接続している場合、MCP経由で公開するものを選択できます。本番データベースとスクラッチデータベースがあり、AIにはスクラッチの方だけ触らせたい場合に便利です。
- ポート:固定したい場合はポートを指定できますし、BaseVoltに自動選択させることもできます。
MCPサーバーが起動すると、BaseVoltにステータスインジケーターが表示され、アクティブでリッスン中であることが分かります。
ステップ3:AIクライアントを設定する
次に、AIクライアントにMCPサーバーの場所を教える必要があります。ツールごとに設定は少し異なりますが、考え方は同じで、BaseVoltが表示したlocalhost URLを指定します。
Claude Desktop
Claude Desktopはclaude_desktop_config.jsonという設定ファイルを使います。場所はOSによって異なります。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
ファイルを開き(なければ作成し)、mcpServersオブジェクトにBaseVoltのエントリを追加します。
{
"mcpServers": {
"basevolt": {
"type": "url",
"url": "http://localhost:3107/mcp"
}
}
}
type: "url"は、Claude Desktopに新しいプロセスを立ち上げるのではなく、HTTP経由で実行中のMCPサーバーに接続するよう指示します。BaseVoltは自身のサーバープロセスを管理するため、これが正しい選択です。
urlタイプをサポートしていない古いバージョンのClaude Desktopを使っている場合は、コマンドベースの設定を使うこともできます。
{
"mcpServers": {
"basevolt": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:3107/mcp"]
}
}
}
これはmcp-remoteを、HTTPエンドポイントとClaude Desktopのstdioベースのトランスポート間のブリッジとして使います。どちらでも動きます。
ファイルを保存してClaude Desktopを再起動してください。起動時にBaseVoltのMCPサーバーに接続します。新しい会話で利用可能なツールを確認すれば、BaseVoltのデータベースツールが一覧に表示されているはずです。
Cursor
Cursorはプロジェクトルートの.cursor/mcp.jsonファイル(またはグローバル設定の~/.cursor/mcp.json)を使います。形式は似ています。
{
"mcpServers": {
"basevolt": {
"url": "http://localhost:3107/mcp"
}
}
}
CursorのMCPサポートはこの1年でより堅牢になりました。urlフィールドはリモート(この場合はローカル)のMCPサーバーに接続するよう指示します。ファイルを保存すれば、次回リロード時にCursorが設定を反映します——ウィンドウのリロードやCursorの再起動が必要な場合があります。
Cursorの設定のMCPセクションで接続を確認できます。basevoltが緑のステータスインジケーターとともに一覧に表示され、公開しているツールが確認できるはずです。
MCPサーバーを特定のプロジェクトにスコープしたい場合(そのプロジェクトで作業しているときだけ接続するようにする場合)は、.cursor/mcp.jsonファイルをプロジェクトルートに置きます。どこでも使えるようにしたい場合はグローバル設定を使います。
Windsurf
Windsurf(旧Codeiumのエディタ)は~/.codeium/windsurf/mcp_config.jsonの設定ファイルを使います。構造はClaude Desktopと同じです。
{
"mcpServers": {
"basevolt": {
"serverUrl": "http://localhost:3107/mcp"
}
}
}
Windsurfではフィールド名がurlではなくserverUrlである点に注意してください——これで私は一度ハマりました。ファイルを保存してWindsurfを再起動してください。WindsurfのMCP設定パネルにBaseVoltのMCPサーバーが表示され、ツールが一覧表示されるはずです。
3つのクライアントすべてについて注意すべき点:例中のポート番号(3107)はあくまで例です。BaseVoltのMCP設定に表示される実際のポートを使ってください。BaseVoltにポートを自動選択させている場合、再起動のたびに変わる可能性があります——BaseVoltの設定でポートを固定するか、変更時にクライアント設定を更新してください。
ステップ4:質問を始める
すべて接続できたら、AIクライアントで新しい会話を開き、データベースについて普通に話しかけてみてください。AIはBaseVoltが公開するMCPツールを自動的に発見し、関連する場面で呼び出します。
試してみたいことをいくつか紹介します。
「データベース内のすべてのテーブルを表示して。」
AIがlist_tablesツールを呼び出し、BaseVoltがテーブル名を返し、AIが一覧表示します。シンプルですが、自分で設計したわけではないデータベースを扱っているときにはすぐに役立ちます。
「usersテーブルのスキーマは?」
AIがdescribe_tableにusersを指定して呼び出し、カラム名、型、制約を取得して説明してくれます。もうPRAGMA table_info(users)を実行して出力を睨む必要はありません。
「今週登録したユーザーをすべて表示して。」
AIが適切なSQL——例えばSELECT * FROM users WHERE created_at >= date('now', '-7 days')——を組み立て、queryツールを呼び出し、BaseVoltが実行し、AIが結果を提示します。usersテーブルの日付カラム名が違っていても、AIはすでに調べたスキーマからそれを知っています。
「ordersテーブルにステータスごとにグループ化したカンバンビューを作成して。」
ここが面白いところです。BaseVoltのMCPサーバーは生のSQLだけでなく、ビュー作成、ダッシュボード設定、ワークスペース管理などの高レベルな操作も公開しています。AIがcreate_viewツールにテーブル名、ビュー型、グループ化設定を指定して呼び出します。BaseVoltがUIにビューを作成し、アプリですぐに確認できます。
「usersテーブルにlast_login_atというカラムを追加して。」
AIがALTER TABLE文を書き、executeツールを呼び出します。BaseVoltが実行します。スキーマが更新されます。読み取り専用モードを有効にしていれば、これはブロックされます——それが目的です。
「テスト用にordersテーブルに50行のサンプルデータを生成して。」
AIはスキーマに基づいてリアルなサンプルデータを生成できます——ランダムな名前、範囲内の日付、既存のenum値からのステータスなど。プロトタイプを作っていてテーブルが空のときに便利です。
重要なのは、ツールのことを意識する必要がないという点です。ただ話しかけるだけです。「今週登録したユーザーを表示して」から「このSQL文字列でqueryツールを呼び出す」への変換は、AIがやってくれます。それがMCPの目的です——ツール呼び出しを自然言語の背後に抽象化してくれます。
AI + データベースで実際にできること
「AIでデータベースをクエリできる」という説明では不十分なので、より具体的に説明します。MCP連携を通じて実際にできることは次の通りです。
自然言語でデータをクエリする
一番分かりやすい用途です。英語(または日本語)で質問すると、AIがSQLに変換し、BaseVoltがSQLを実行し、答えが返ってきます。AIはスキーマ全体にアクセスできるため、テーブル名、カラム名、リレーションシップ、型を知っています。データの構造が見えるからこそ、正しいSQLを書けます。
実際に使っている例をいくつか挙げます。
- 「先月の注文数をステータス別に集計して」
- 「注文合計金額の上位10顧客を表示して」
- 「今後30日以内にサブスクリプションが期限切れになるユーザーは?」
- 「紹介経由とオーガニックで登録したユーザーの平均注文額は?」
AIはJOIN、集計、日付計算、フィルタリングをこなします。複雑なクエリの場合、実行前に実行予定のSQLを見せてくれることもあり、これは良い健全性チェックになります。
テーブルの作成と変更
AIはDDL——CREATE TABLE、ALTER TABLE、CREATE INDEX——を書いて実行できます。「フィーチャーフラグを管理するテーブルが必要」と言えば、AIが妥当なスキーマを設計して作成してくれます。
CREATE TABLE feature_flags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
enabled BOOLEAN NOT NULL DEFAULT 0,
description TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
適切な型を選び、制約を追加し、良いプラクティスとしてタイムスタンプも含めてくれます。会話しながら改良できます。「フラグを取得するユーザーの割合用のカラムを追加して」と言えば、テーブルをALTERしてくれます。
ここでローカル実行が重要になります。SQLはAIが書きますが、実行はBaseVoltがローカルでデータベースに対して行います。SQL自体は(ツール呼び出しの一部として)AIプロバイダーに送られますが、データベースの認証情報は送られません。そして実行はマシン上で行われ、クラウドのサンドボックスでは行われません。
ビューの設定
BaseVoltはテーブルの上に複数のビュータイプをサポートしています:グリッド(デフォルトのテーブルビュー)、カンバン(ステータスフィールドでグループ化)、ギャラリー(カード型、画像付きレコードに適している)、カレンダーです。MCP連携を通じて、AIがこれらのビューを作成・設定できます。
次のように言えます。
- 「ticketsテーブルに優先度ごとにグループ化したカンバンビューを作成して。」
- 「商品の名前、価格、画像を表示するギャラリービューを作って。」
- 「eventsテーブルにstart_dateフィールドを使ったカレンダービューを設定して。」
AIがBaseVoltのビュー作成ツールに適切なパラメータを指定して呼び出します。ビューはBaseVoltのUIに即座に表示されます。その後、改良できます。「オープンなチケットだけ表示するフィルターを追加して」や「カンバンを優先度ではなくステータスでグループ化して」と言えば反映されます。
これは、データベースを扱いたいがツールのUIを覚えたくない非開発者にとって、本当に便利です。見たいものを説明するだけで、AIが設定してくれます。
ダッシュボードの構築
BaseVoltにはチャート、メトリクス、テーブルを1つのビューにまとめるダッシュボード機能があります。AIはゼロからダッシュボードを構築できます。
「今月の合計サインアップ数、MRR、過去30日間のサインアップ推移のラインチャートを含むダッシュボードを作って。」
AIは次のように動きます。
- データベースから関連データをクエリする。
- ダッシュボードウィジェットを作成する——合計サインアップ用のメトリクスウィジェット、MRR用のメトリクスウィジェット、サインアップ推移用のラインチャート。
- ダッシュボード上に配置する。
手動で何も設定せずに、BaseVoltで動くダッシュボードが完成します。ここでも改良できます。「チャートを過去90日間にして」や「サインアップ元ごとの内訳を追加して」と言えば反映されます。
テーブル名を覚えずにスキーマを探索する
自分が設計したわけではないデータベース——引き継いだコードベース、クライアントのプロジェクト、改造中のオープンソースアプリ——を扱うとき、スキーマの探索は非常に価値があります。psqlで\dtを実行してテーブル名をスクロールする代わりに、ただ尋ねるだけで済みます。
- 「このデータベースにはどんなテーブルがある?」
- 「ordersテーブルとcustomersテーブルはどう関係している?」
- 「ユーザー設定を保存しているテーブルはある?」
- 「usersテーブルに外部キーを持つテーブルはどれ?」
AIがMCPツール経由でスキーマを探索し、平易な言葉で説明してくれます。自分のスキーマに精通したデータベースの専門家が隣に座っているようなものです。
サンプルデータの生成
プロトタイプを作るとき、サンプルデータが必要になることがよくあります。AIが生成できます。
「過去1ヶ月にわたるリアルな名前、メール、ランダムな登録日を持つ20人のダミーユーザーを挿入して。」
AIが生成データを含むINSERT文を書き、BaseVolt経由で実行します。スキーマを尊重します——正しい型、有効な外部キー、enumカラムの妥当な値。新しいプロトタイプを始めるたびに、これでおそらく15分節約できています。
なぜローカルが重要なのか
少し時間を取って説明したいと思います。これこそが、単独のMCPデータベースサーバーを出荷するのではなく、BaseVoltにMCPサーバーを組み込んだ理由です。
先に説明した3つのアプローチ——直接MCP、クラウドリレー、デスクトップアプリ経由のローカル——は、どれも同じことができます。AIはデータをクエリし、テーブルを作成し、ビューを設定できます。ユーザー体験はほぼ同じです。違いは完全に、データと認証情報がどこに存在するかにあります。
直接データベースMCPサーバーの場合、データベースの認証情報は設定ファイルとMCPサーバープロセス内にあります。クエリ結果はMCPサーバーからAIクライアント、そしてAIプロバイダーへと流れます。認証情報の露出は限定的(ローカルプロセス、ローカル設定ファイル)ですが、データの露出はクラウドAIのやり取りと同じです。
クラウドリレーの場合、認証情報はリレーサービスのサーバーにあります。データは彼らのインフラを経由します。チェーンに第三者を追加することになります。信頼の観点からは最悪の選択肢です。
BaseVoltのローカルMCPサーバーの場合、データベースの認証情報はBaseVolt内に留まります——暗号化され、アプリによって管理され、AIクライアントにもAIプロバイダーにも公開されません。データベースへの接続はBaseVoltがローカルで維持します。AIクライアントはlocalhost経由でBaseVoltのMCPサーバーと通信します。AIプロバイダーに送られるのはツール呼び出しの結果だけです——AIが質問に答えるために必要なクエリ結果です。
最後の部分は避けられません。「今週登録したユーザーは47人です」とAIに答えてほしければ、AIは「47」というクエリ結果を見る必要があります。その結果内のデータはAIプロバイダーに送られます。現在のAIアーキテクチャではどうしようもありません——モデルが推論するにはコンテキストが必要です。
しかし、問題はこれです。AIが見るデータをあなたがコントロールできます。読み取り専用モードを使えます。特定のテーブルだけ公開できます。機密カラムを除外するフィルタを付けてクエリできます。ローカルMCPサーバーは、直接データベース接続にはない制御レイヤーを提供します。
そして認証情報はマシンから一切外に出ません。これが一番重要です。Postgresのパスワード、MySQLの接続文字列、CloudflareのAPIトークン——すべてBaseVolt内に留まります。AIクライアントは見ません。AIプロバイダーは見ません。クラウドリレーも見ません。
セキュリティ要件のあるチーム——SOC 2、HIPAA、GDPR、サードパーティのデータアクセスに関する社内ポリシー——にとって、これは「使える」と「使えない」の分かれ目になります。ローカルアプローチはすべてのリスクを排除するわけではありません(AIはクエリ結果を見ます)が、認証情報の露出リスクを排除します。そして、それこそが breach につながるリスクです。
比較表
3つのアプローチを並べて比較しました。
| 直接DB MCP | クラウドリレーMCP | BaseVoltローカルMCP | |
|---|---|---|---|
| セットアップ | 設定ファイルの編集、サーバーパッケージのインストール | アカウント作成、Webダッシュボードに認証情報追加、エンドポイントURL取得 | デスクトップアプリのインストール、データベース接続、MCPをオン |
| データフロー | AIクライアント → ローカルプロセス → DB | AIクライアント → クラウドサービス → DB | AIクライアント → BaseVolt(ローカル)→ DB |
| 認証情報の露出 | ローカル設定ファイル + ローカルプロセス | クラウドサービスのサーバー | BaseVoltアプリのみ(ローカル、暗号化) |
| オフライン動作 | 可(ローカルDBの場合) | 不可 | 可(ローカルDBの場合) |
| ビュー/ダッシュボード作成 | 不可(生SQLのみ) | サービスによる | 可(カンバン、ギャラリー、ダッシュボード、カレンダー) |
| 対応AIアシスタント | MCP互換クライアントなら何でも | MCP互換クライアントなら何でも | MCP互換クライアントなら何でも |
| アクセス制御レイヤー | 限定的(一部サーバーに読み取り専用モード) | サービスによる | あり(読み取り専用モード、データソースごとの制御、テーブルレベルの制限) |
| コスト | 無料(オープンソース) | 通常サブスクリプション | 無料枠(2ソース)、Pro $99/年 |
表を見れば明らかです。ローカルのSQLiteファイルにクエリを走らせるだけでセキュリティを気にしないなら、直接MCPアプローチで十分です。認証情報の保護とアクセス制御が必要な本番データベースにアクセスするなら、ローカルデスクトップアプリのアプローチだけが意味を持ちます。
セキュリティ上の考慮事項
ローカルアプローチであっても、セキュリティのトレードオフについて明確にしておかないと無責任です。考えておくべき点をまとめました。
AIはクエリ結果を見ます。 これはデータでAIアシスタントを使う上での根本的なトレードオフです。「すべてのユーザーを表示して」と頼んでAIがクエリツールを呼び出すと、結果セット——実際のユーザーデータ——が会話の一部としてAIプロバイダーに送られます。AIは質問に答えるためにこのデータを必要とします。AIにデータを見せずにデータについて推論させる方法はありません。
つまり、AIプロバイダーに送られたくないデータのカラムをクエリしないでください。usersテーブルにpassword_hashカラムがあるなら、SELECT *は避けましょう。心配な場合は読み取り専用モードを使い、公開テーブルを制限してください。あるいは、何を頼むか慎重に考えましょう。
信頼できる設定でない限り、書き込み権限で本番データベースに接続しないでください。 AIはDDLとDMLを実行できます。本番データベースへの書き込み権限を与えれば、テーブルを削除したり、データを変更したり、レコードを削除したりできます。ほとんどの場合、AIは頼まれたことだけをします。しかしAIモデルはミスを犯す可能性があり、プロンプトインジェクションは現実の攻撃ベクトルです——データに埋め込まれた悪意のあるプロンプトをAIが読めば、意図しないクエリを実行する可能性があります。
本番データベースには読み取り専用モードを使ってください。BaseVoltのMCPサーバーはこれをサポートしており、公開ツールをクエリとスキーマ検査のみに制限し、書き込みを禁止します。失えないものには、これが安全なデフォルトです。
BaseVoltのMCPサーバーはlocalhostでのみ動きます。 0.0.0.0ではなく127.0.0.1にバインドします。つまり、ネットワーク上の他のマシンからはアクセスできず、自分のマシン上のプロセスからのみアクセスできます。共有マシンや企業ネットワークにいる場合、これは重要です。他の誰もMCPサーバーに接続できません。
MCPサーバーができることを制限できます。 読み取り専用モードに加えて、BaseVoltはMCP経由で公開するデータソースを選べます。本番データベースと開発データベースの両方を接続している場合、AIには開発データベースだけを公開できます。本番データベースはBaseVoltのUIでアクセスできますが、MCP経由では到達できません。
認証情報はBaseVoltによってローカルに保存されます。 保存時は暗号化されます。AIクライアントにもAIプロバイダーにも送信されません。BaseVoltのサーバーにも送信されません(BaseVoltにはデータベース接続を扱うサーバーがありません——デスクトップアプリであり、すべてはローカルです)。BaseVoltをアンインストールすれば、認証情報も削除されます。
AIが何をしているか監査してください。 BaseVoltはMCPツール呼び出しをログに記録するため、AIがどのようなクエリを実行したかを確認できます。何かおかしなものがあれば——予期しないDROP TABLE、機密カラムを選択するクエリ——気づくことができます。これは直接MCPサーバーにはないことが多く、安心感のために価値があります。
セキュリティについてのまとめです。ローカルアプローチは代替手段より大幅に優れていますが、魔法ではありません。クエリ結果をAIプロバイダーに送っている事実は変わりません。AIシステムにSQLを実行する能力を与えている事実も変わりません。どのデータベースを接続するか、どのアクセスレベルを許可するか、AIに何を頼むか、慎重に考えましょう。
まとめ
MCPは本当に便利なプロトコルです。AIアシスタントにデータベースの質問をして実際の答えを得られる——スキーマ定義をコピペしたり手動でクエリを実行したりする必要なしに——という体験は、データとの向き合い方を変えます。最初は目新しいだけに感じますが、1週間使うと戻れなくなります。
しかし、ほとんどの人がMCPデータベース接続を設定する方法には、本当の問題があります。認証情報とデータが、自分がコントロールできないインフラを経由するのです。ローカル開発なら許容範囲でしょう。しかし、大切なデータには許容できません。
ローカルMCPサーバーのアプローチ——AIクライアントからBaseVolt、そしてデータベースへ、すべてマシン上で——は、AI支援のデータベース作業の便利さを、認証情報の露出なしに提供します。クエリ、スキーマ探索、ビュー作成、ダッシュボード構築、すべて手に入ります。セキュリティの頭痛は手に入りません。
すでにClaude DesktopやCursor、Windsurfを使っていてデータベースを扱う方には、設定する価値があります。5分ほどで終わり、一度動き始めればずっと使い続けることになります。
basevolt.app で試してみてください——サインアップもクレジットカードも不要です。無料枠には2つのデータソースが含まれており、メインのデータベースとスクラッチデータベースを接続するのに十分です。インストールして、データベースを接続して、MCPサーバーを有効にして、AIクライアントを向けて、質問を始めてください。
セットアップで問題があったり質問があったりする場合は、デモサイトでインストールなしに完全なワークフローを確認できます。
...X でフォローしてください。