MCP 実践チュートリアル:Cursor からデータベース照会と API 呼び出しを直接行う完全設定ガイド
先週の水曜日の午後、データ分析機能を書いていて、12月の新規ユーザー数をデータベースで確認する必要がありました。以前の習慣なら、DataGrip に切り替え、SQL を書き、実行し、結果をコピーして、コードに貼り付けるところです。たった1つの単純なクエリのために、ウィンドウを3回も切り替え、2分も無駄にしていました。
ふと思いました。「毎日 Cursor でコードを書いているのに、AI は関数を書いたりバグを直したりできるのに、なぜ直接データベースを調べられないんだ?」と。
MCP を設定した後、今では Cursor で「12月の新規ユーザー数を調べて」と聞くだけで、AI が瞬時に結果を返してくれます。ウィンドウ切り替えも SQL 手書きも不要、効率は倍増しました。
正直なところ、最初に MCP と聞いたときは私も混乱しました。Server、Client、Protocol……言葉は立派ですが、ネット上のチュートリアルは理論ばかりか、Hello World 止まりのものばかり。設定方法を理解するのに2日もかかりました。
そこでこの記事では、最も分かりやすい方法で、手取り足取り MCP の設定方法を教えます。AI が直接データベースを照会し、API を呼び出せるようにしましょう。15分で設定を終え、すぐに使い始められます。
MCP とは何か、なぜ必要なのか
誰にでもわかる MCP 解説
MCP の正式名称は Model Context Protocol(モデルコンテキストプロトコル)です。学術的に聞こえますが、要するに AI に「道具ベルト」を装着させるようなものです。
以前の AI は非常に賢いアドバイザーのようなものでした。質問すればアドバイスやコードをくれますが、自分では何もできません。あなたはアドバイスをコピーして、自分で実行する必要がありました。
MCP があれば、AI は真のアシスタントになります。アドバイスだけでなく、実際に手を動かしてくれます。データベースの照会、API の呼び出し、ファイルの読み込みなど、これらを自分でこなせるのです。
従来方式 vs MCP 方式
実例として、「先月最も売上の高かった製品」を知りたいとします。
従来方式(MCP なし):
- あなた:AI にクエリ SQL を書かせる
- AI:SQL コードを提示
- あなた:SQL をコピーし、データベースクライアントに切り替え
- あなた:SQL を貼り付けて実行
- あなた:クエリ結果をコピー
- あなた:Cursor に戻り、結果を AI に貼り付け
- AI:結果に基づいて分析を継続
全工程で3つのウィンドウを行ったり来たりします。面倒です。
MCP 方式:
- あなた:AI に直接「先月どの製品の売上が最高だった?」と聞く
- AI:自動的にデータベースを照会し、答えを直接教える
一発です。効率は少なくとも5倍違います。
コアコンセプト(3分で理解)
MCP のアーキテクチャは実はシンプルで、3つの役割だけです:
MCP Client(道具を使う AI の頭脳)
あなたが使っている AI ツール、例えば Cursor や Claude Desktop です。あなたの要望を理解し、道具を使うべきか判断します。
MCP Server(道具を提供するウェイター)
AI に特定の能力を提供する設定済みサービスです。例えばデータベース Server は AI に DB 照会能力を与え、API Server はインターフェース呼び出し能力を与えます。
Tools(具体的な能力)
各 MCP Server が公開する具体的な機能です。例えばデータベース Server なら「テーブル構造確認」「SELECT クエリ実行」「行数カウント」といったツールを持っています。
例えるなら:AI は作業員(Client)、MCP Server は道具箱、中にはレンチやハンマー(Tools)が入っています。「釘を打て」と言えば、AI は道具箱からハンマーを取り出して使うわけです。
この3つの概念が分かれば、後の設定作業の意味も理解できるはずです。
実戦ケース1 - SQLite データベース統合
なぜ SQLite から始めるのか
SQLite 最大のメリットは単純さです。データベースサービスのインストール不要、ポート設定不要、ファイル1つがデータベースです。練習に最適です。
手順に慣れたら、PostgreSQL や MySQL に置き換えるのも同じ要領です。
準備作業:テストデータベースの作成
まずデータデータがないとテストできないので、test.db ファイルを作成しましょう:
-- ユーザーテーブル作成
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
-- 注文テーブル作成
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
user_id INTEGER,
product_name TEXT,
amount REAL,
order_date TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- テストユーザー挿入
INSERT INTO users (name, email) VALUES
('田中 太郎', 'tanaka@example.com'),
('佐藤 花子', 'sato@example.com'),
('鈴木 一郎', 'suzuki@example.com');
-- テスト注文挿入
INSERT INTO orders (user_id, product_name, amount) VALUES
(1, 'MacBook Pro', 12999.00),
(1, 'AirPods', 1299.00),
(2, 'iPhone 15', 5999.00),
(3, 'iPad Air', 4799.00),
(3, 'Apple Watch', 2999.00);
任意の SQLite ツール(DB Browser、コマンドライン等)でこの SQL を実行するか、Python で作成しても構いません:
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
# 上記の SQL 文を実行
# ...
conn.commit()
conn.close()
MCP Server の設定(ここが重要)
チュートリアルの核心部分です。MCP 設定ファイルはニーズに応じて2箇所に配置できます:
グローバル設定(全プロジェクトで使用可能):
- Windows:
C:\Users\ユーザー名\.cursor\mcp.json - Mac/Linux:
~/.cursor/mcp.json
プロジェクト設定(現在のプロジェクトのみ有効):
- プロジェクトルート直下の
.cursor/mcp.json
まずはプロジェクト設定で練習し、うまくいったらグローバルに移行することをお勧めします。
.cursor/mcp.json ファイルを作成し、以下を記述します:
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sqlite",
"--db-path",
"D:/path/to/your/test.db"
]
}
}
}
重要ポイント解説(多くの人がここで詰まります):
mcpServers: 固定のフィールド名です。変更しないでください。"sqlite": この Server に付ける名前です。自由に決めてOK。AI はこの名前を見ます。command: "npx": npx を使って MCP Server を直接実行します。手動インストール不要です。args: コマンドへの引数です。-y: インストールを自動確認@modelcontextprotocol/server-sqlite: 公式の SQLite MCP Server パッケージ--db-path: データベースファイルのパス(必ず絶対パスで!)
Windows ユーザーへの注意:パスはスラッシュ / またはダブルバックスラッシュ \\ を使用してください。シングルバックスラッシュは使えません:
- ✅
D:/projects/test.db - ✅
D:\\projects\\test.db - ❌
D:\projects\test.db(エラーになります)
Cursor 再起動と設定検証
設定ファイルを保存したら、必ず Cursor を完全に再起動してください。ウィンドウを閉じるだけでなく、アプリを終了させてください。
再起動後、Cursor の設定で MCP が有効か確認できます:
- 設定を開く(Ctrl+,)
- “MCP” を検索
- 設定した SQLite Server が表示されているはずです
もっと直接的な方法は、AI にデータベース関連の質問をして、MCP を呼び出すか確認することです。
実戦デモ
設定が成功すれば、このように遊べます:
クエリ1:テーブル一覧確認
あなた:データベースにはどんなテーブルがある?
AI:[MCPを呼び出して照会] 2つのテーブルがあります:users と orders
クエリ2:ユーザー数集計
あなた:ユーザー総数を調べて
AI:[SELECT COUNT(*) FROM users を実行] 合計3名のユーザーがいます
クエリ3:特定ユーザーの注文確認
あなた:田中 太郎は何を買った?
AI:[結合クエリを実行] 田中 太郎の購入品:
- MacBook Pro(12999元)
- AirPods(1299元)
合計:14298元
クエリ4:集計分析
あなた:最も消費額が多いユーザーは?
AI:[GROUP BY クエリを実行] 田中 太郎が最も多く、合計14298元消費しています
ご覧の通り、SQL を一行も書かずに、AI が自動で処理してくれます。これが MCP の威力です。
よくあるトラブルシューティング
問題1:MCP Server が起動しない
症状:AI が回答するが、データベースを呼び出さない
解決策:
- 設定ファイルの構文確認(JSON フォーマットが正しいか、余分なカンマがないか)
- Cursor が完全に再起動されたか確認
- Cursor の出力ログで “MCP” 関連のエラーを検索
問題2:データベースファイルが見つからない
症状:エラー “cannot open database file”
解決策:
- パスが絶対パスであることを確認(相対パスは不可)
- Windows ユーザーはスラッシュの向きを確認
- ファイルが実際に存在するか確認(
lsやdirコマンド)
問題3:権限エラー
症状:Permission denied
解決策:
- データベースファイルの読み書き権限を確認
- Windows ユーザー:ファイル右クリック → プロパティ → セキュリティで、現在のユーザーに読み取り権限があるか確認
デバッグのコツ:VS Code(Cursor)で「出力(Output)」パネルを開き(View → Output)、「MCP」チャンネルを選ぶと、詳細なエラーログが見られます。
実戦ケース2 - PostgreSQL データベース統合
応用シーン:本番環境データベース
SQLite は学習や小規模プロジェクトに適していますが、実際の業務では PostgreSQL や MySQL などのプロダクション級データベースを使うことが多いでしょう。良いニュースは、設定の要領は同じで、パラメータが違うだけということです。
ここでは PostgreSQL を例にしますが、MySQL も似たようなものです。
設定の違い:接続情報と環境変数
PostgreSQL はクライアント/サーバー構成なので、接続情報が必要です。しかし、絶対にパスワードを設定ファイルに直接書かないでください。これは最も一般的なセキュリティミスです。
正しいやり方は環境変数を使うことです。
まずプロジェクトルートに .env ファイルを作成します(.gitignore に追加するのを忘れずに):
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=myapp
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=your_secure_password
次に .cursor/mcp.json を設定します:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"--stdio"
],
"env": {
"POSTGRES_HOST": "${POSTGRES_HOST}",
"POSTGRES_PORT": "${POSTGRES_PORT}",
"POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
"POSTGRES_USER": "${POSTGRES_USER}",
"POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
}
}
}
}
重要ポイント:
--stdio: 標準入出力(ローカル方式)で通信することを指定env: 環境変数設定。Cursor はプロジェクトの.envファイルを自動的に読み込みます
セキュリティベストプラクティス(超重要)
AI にデータベース権限を与える際、セキュリティは最優先事項です。私が踏んだ地雷を、あなたが踏まないように:
1. 読み取り専用アカウントを使用
AI に書き込み権限を与えないでください! AI があなたの意図を誤解して DELETE や UPDATE を実行したら、泣くに泣けません。
読み取り専用ユーザーの作成:
-- 読み取り専用ユーザー作成
CREATE USER readonly_user WITH PASSWORD 'secure_password';
-- SELECT 権限のみ付与
GRANT CONNECT ON DATABASE myapp TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
-- 将来作成されるテーブルも読み取り専用にする
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
2. アクセス範囲の制限
データベースに機密テーブル(ユーザーパスワード、決済情報など)がある場合、AI に触らせないようにしましょう:
-- 機密テーブルへのアクセス権剥奪
REVOKE SELECT ON TABLE user_passwords FROM readonly_user;
REVOKE SELECT ON TABLE payment_info FROM readonly_user;
3. 本番環境はリードレプリカを使用
本番環境で MCP を使う場合(最初は推奨しませんが)、少なくともリードレプリカ(Read Replica)に接続し、プライマリには接続しないでください。万が一 AI が複雑すぎるクエリでデータベースに負荷をかけても、本番サービスへの影響を防げます。
実戦デモ
設定完了後、SQLite ではできないようなことも可能になります:
複雑なクエリ:多対多 JOIN
あなた:各部門の平均給与を集計して
AI:[複雑なクエリを実行]
SELECT d.name, AVG(e.salary) as avg_salary
FROM departments d
JOIN employees e ON d.id = e.department_id
GROUP BY d.name
ORDER BY avg_salary DESC;
結果:
- 技術部:平均15000円
- 製品部:平均12000円
- 運営部:平均10000円
性能分析:実行計画の確認
あなた:このクエリがなぜ遅いのか見て
AI:[EXPLAINを実行] インデックスが使用されていません。user_id フィールドにインデックス追加を推奨します。
データ分析:レポート生成
あなた:過去7日間の日次新規ユーザー数
AI:[タイムウィンドウクエリを実行]
2024-01-10: 45人
2024-01-11: 52人
...
よくある問題
問題1:接続タイムアウト
症状:timeout connecting to database
解決策:
- データベースが起動しているか確認(
pg_isreadyコマンド) - ファイアウォールが接続を許可しているか確認
- host と port 設定が正しいか確認
問題2:認証失敗
症状:authentication failed
解決策:
- ユーザー名パスワードが正しいか確認
- PostgreSQL の
pg_hba.confが対象ユーザーの接続を許可しているか確認 psqlコマンドラインツールで手動接続を試して資格情報を確認
問題3:権限不足
症状:permission denied for table xxx
解決策:
- これは良いことです。読み取り専用権限が効いています
- 本当にそのテーブルを照会する必要があるなら、管理者アカウントで前述の GRANT コマンドを実行してください
実戦ケース3 - API 呼び出し統合
活用シーン:AI に外部サービスを使わせる
データベースは内部データの照会に使いますが、外部 API のデータが必要なこともあります。例えば:
- GitHub リポジトリのスター数や issue リスト確認
- 社内マイクロサービス API の呼び出し
- 天気、為替レートなどのリアルタイムデータ取得
MCP があれば、AI にこれらのインターフェースも呼び出させることができます。
HTTP タイプ MCP Server の設定
API 呼び出しはデータベースと異なり、MCP Server パッケージのインストールは不要で、HTTP タイプを設定するだけです。
GitHub API を例に、.cursor/mcp.json を設定します:
{
"mcpServers": {
"github-api": {
"url": "https://api.github.com",
"headers": {
"Accept": "application/vnd.github.v3+json",
"User-Agent": "Cursor-MCP-Client"
}
}
}
}
API に認証が必要な場合(GitHub プライベートリポジトリなど)、トークンを追加します:
{
"mcpServers": {
"github-api": {
"url": "https://api.github.com",
"headers": {
"Accept": "application/vnd.github.v3+json",
"Authorization": "Bearer ${GITHUB_TOKEN}",
"User-Agent": "Cursor-MCP-Client"
}
}
}
}
同様に、トークンは .env ファイルに記述します:
GITHUB_TOKEN=ghp_your_personal_access_token_here
GitHub Token 取得方法:
- GitHub → Settings → Developer settings
- Personal access tokens → Tokens (classic)
- Generate new token → 必要な権限(repo, user 等)をチェック
- トークンをコピー(一度しか表示されません)
実戦デモ
設定後、AI に直接 API を呼び出させることができます:
リポジトリ情報照会
あなた:facebook/react リポジトリのスター数を調べて
AI:[GET /repos/facebook/react を呼び出し]
React リポジトリは現在 218,345 スター、79,234 フォークがあります。
最新 Issue 取得
あなた:facebook/react の最近の issue を見て
AI:[GET /repos/facebook/react/issues?state=open&per_page=5 を呼び出し]
最近の5つの issue:
1. [Bug] useEffect が Strict Mode で2回実行される
2. [Feature] Suspense の新 API サポート
3. [Question] 大規模リストレンダリングの最適化
...
コミット頻度分析
あなた:過去一週間 facebook/react に何回コミットがあった?
AI:[GET /repos/facebook/react/commits?since=... を呼び出し]
過去7日間で 43 回のコミットがありました。主な貢献者は...
自社 API の設定
社内 API も同様に設定可能です。社内ユーザーサービスがあるとします:
{
"mcpServers": {
"user-service": {
"url": "https://api.yourcompany.com/user-service",
"headers": {
"Authorization": "Bearer ${INTERNAL_API_KEY}",
"Content-Type": "application/json"
}
}
}
}
これで AI にこう聞けます:
あなた:ユーザーID 12345 の注文履歴を調べて
AI:[社内API呼び出し] ユーザー12345は過去30日間に8回注文し、総額3200円消費しています。
注意事項
API レート制限
多くの API には呼び出し頻度制限があります。GitHub 無料版は1時間60回です。AI が頻繁に呼び出すとすぐに制限に達します。
解決策:
- 認証トークンを使う(GitHub は認証済みなら5000回/時)
- AI に「API 呼び出しは最小限にし、結果を再利用して」と伝える
セキュリティリスク
AI に API 呼び出し権限を与えることは、外部サービス操作権限を与えることと同義です。必ず:
- 読み取り専用トークンを使用(書き込み権限を与えない)
- 定期的にトークンをローテーション
- API 呼び出しログを監視
応用テクニックとベストプラクティス
複数 MCP Server の併用
1つのプロジェクトで複数の MCP Server を同時に設定できます。AI は適切なツールを自動選択します。
私の設定例:
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "D:/projects/myapp/data.db"]
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
"env": {
"POSTGRES_HOST": "${POSTGRES_HOST}",
"POSTGRES_PORT": "${POSTGRES_PORT}",
"POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
"POSTGRES_USER": "${POSTGRES_USER}",
"POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
}
},
"github-api": {
"url": "https://api.github.com",
"headers": {
"Authorization": "Bearer ${GITHUB_TOKEN}",
"Accept": "application/vnd.github.v3+json"
}
}
}
}
こうすれば、AI にこう聞けます:
あなた:ローカル SQLite データベースのユーザー数を調べて、それから GitHub でリポジトリのスター数を見て
AI:[sqlite MCP自動選択] ローカルユーザーは245名です
[github-api MCP自動選択] リポジトリは 1.2k スターです
AI は内容に応じてどのツールを使うべきか判断します。賢いですね。
プロジェクト設定 vs グローバル設定
2つの設定方法は適用シーンが異なります:
プロジェクト設定(.cursor/mcp.json):
- プロジェクト固有のデータベース、API に適しています。
- メリット:プロジェクト間で干渉しない、Git でバージョン管理可能(機密情報を除く)。
- デメリット:プロジェクトごとに設定が必要。
グローバル設定(~/.cursor/mcp.json):
- 汎用ツール(ファイルシステム、一般 API など)に適しています。
- メリット:一度設定すれば全プロジェクトで使える。
- デメリット:混乱しやすく、設定ファイルがプロジェクト外にあるためチーム共有が不便。
私のアドバイス:
- データベース、プロジェクト専用 API → プロジェクト設定
- GitHub、天気などの汎用 API → グローバル設定
- 開発完了後、プロジェクト設定をドキュメント化し、チームメンバーが複製できるようにする。
パフォーマンス最適化
MCP は呼び出しのたびに実際にクエリや API リクエストを実行するため、頻繁に呼び出すと遅くなります。最適化のコツ:
1. AI に結果をキャッシュさせる
あなた:ユーザーリストを調べて(この結果を覚えておいて、後で使うから)
AI:[検索して記憶] 245名のユーザーがいます...
あなた:さっきの245名のうち、VIP は何人?
AI:[再検索せず、前の結果に基づいて分析]
2. クエリ複雑度の制限
AI に複雑すぎるクエリを書かせないこと。10層ネストの SQL を生成したら即座に止めて、手動で最適化しましょう。
3. データベースインデックス
AI のクエリが賢くても、データベースの性能限界はあります。必要な箇所にはインデックスを追加しましょう。
デバッグテクニック
問題が起きたら、以下の方法で素早く特定しましょう:
1. MCP ログの確認
Cursor の「出力」パネル(View → Output)で「MCP」チャンネルを選択すると以下が見えます:
- MCP Server 起動ログ
- 各ツール呼び出しの引数と戻り値
- エラースタック
2. MCP 設定のテスト
設定直後は単純な質問でテストします:
あなた:データベース接続をテストしたい。テーブル一覧を教えて
これが動かなければ設定に問題があります。
3. 手動実行検証
AI がクエリ失敗と言ったら、手動で実行してみましょう。AI が生成した SQL が悪いのか、権限や接続の問題なのか切り分けられます。
一般的なエラーコードの意味
ENOENT: ファイルやパスが存在しない(パス確認)ECONNREFUSED: 接続拒否(DB未起動またはポート違い)EACCES: 権限不足(ファイル権限またはDB権限)ERR_MODULE_NOT_FOUND: MCP Server パッケージ未インストール(npx コマンド確認)ETIMEDOUT: タイムアウト(ネットワーク問題またはクエリ遅延)
結論
正直なところ、MCP を設定してから私のコーディングスタイルは変わりました。
以前はデータ確認のために3つのウィンドウを行き来し、思考が頻繁に中断されました。今は Cursor で一言聞くだけで AI が即答してくれるので、思考をコードロジックに集中させられます。
長々と書きましたが、核心は3つだけです:
- 概念理解:MCP は AI に道具を与えること。口だけでなく手を動かせるようにする。
- 設定実践:SQLite で練習し、PostgreSQL で実務運用し、API で能力拡張する。
- 安全注意:読み取り専用権限、環境変数、本番主データベースには触らせない。
今日は15分だけ時間を取って、SQLite MCP を設定してみてください。効率が10%、20%どころではなく、全く違う働き方になることに気づくはずです。
最後に一言:MCP はまだ新しく、公式も頻繁に更新しており、コミュニティも新しい Server を次々に出しています。GitHub の MCP Server リストをチェックしてみてください。あなたにぴったりのツールが見つかるかもしれません。
MCPデータベース設定完全フロー
MCP Server をゼロから設定し、Cursor からデータベースを直接照会できるようにする完全手順
⏱️ Estimated time: 15 min
- 1
Step1: 設定ファイル作成:プロジェクト設定かグローバルか
設定ファイルの場所を選択:
**プロジェクト設定**(初心者推奨):
• プロジェクトルートに .cursor/mcp.json を作成
• メリット:プロジェクト間で干渉せず、設定を管理しやすい
• 適用:プロジェクト固有の DB や API
**グローバル設定**:
• Windows: C:\Users\ユーザー名\.cursor\mcp.json
• Mac/Linux: ~/.cursor/mcp.json
• メリット:全プロジェクトで共通利用
• 適用:GitHub、天気などの汎用 API
作成コマンド:
• mkdir .cursor && touch .cursor/mcp.json(Mac/Linux)
• md .cursor && type nul > .cursor\mcp.json(Windows) - 2
Step2: SQLite 設定:最も簡単な入門
SQLite 設定手順:
1. データベースファイル準備(test.db)
2. .cursor/mcp.json を編集:
```json
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sqlite",
"--db-path",
"/absolute/path/to/test.db"
]
}
}
}
```
**重要注意事項**:
• パスは必ず絶対パス(相対パス不可)
• Windows ユーザー:正斜線 / または二重逆斜線 \\ を使用
• npx は自動で MCP Server をダウンロード(初回は少し遅い)
• Cursor 再起動で設定有効化(完全終了すること) - 3
Step3: PostgreSQL 設定:本番環境の安全実践
PostgreSQL 設定手順(セキュリティ版):
1. .env ファイル作成(.gitignore に追加必須):
```env
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=myapp
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=your_password
```
2. 読み取り専用ユーザー作成(重要!):
```sql
CREATE USER readonly_user WITH PASSWORD 'password';
GRANT CONNECT ON DATABASE myapp TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
```
3. .cursor/mcp.json 設定:
```json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
"env": {
"POSTGRES_HOST": "${POSTGRES_HOST}",
"POSTGRES_PORT": "${POSTGRES_PORT}",
"POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
"POSTGRES_USER": "${POSTGRES_USER}",
"POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
}
}
}
}
```
**セキュリティ要点**:
• AI に書き込み権限(DELETE/UPDATE)を絶対与えない
• 本番環境はリードレプリカに接続(主 DB 不可)
• 機密テーブル(パスワード等)の権限剥奪 - 4
Step4: 設定検証:MCP 動作テスト
設定確認手順:
1. Cursor 完全再起動(ウィンドウ閉じるだけでなく終了)
2. Cursor 設定を開く(Ctrl+, or Cmd+,)
3. "MCP" を検索し、設定が表示されるか確認
**実地テスト**:
AI に簡単な質問をする:
• "データベースにはどんなテーブルがある?"
• "ユーザー総数を調べて"
**デバッグ方法**:
• 出力パネルを開く:View → Output
• "MCP" チャンネルを選択しログ確認
• 起動エラー、接続失敗等の情報をチェック
**よくあるエラー**:
• ENOENT:パスが存在しない(絶対パス確認)
• ECONNREFUSED:DB 未起動またはポート間違い
• Permission denied:ファイルまたは DB 権限不足
• JSON parse error:設定ファイル構文エラー(カンマ、引用符確認)
FAQ
設定後も AI がデータベースを呼び出さないのはなぜ?
1. **Cursor の完全再起動忘れ**:ウィンドウを閉じるだけでなく、アプリを終了させて開き直してください。
2. **設定ファイル構文エラー**:JSON 形式を確認してください。特にカンマや引用符。検証ツールを使うのが確実です。
3. **パスの問題**:必ず絶対パスを使用してください。相対パスは機能しません。
デバッグ方法:出力パネル(View → Output)で「MCP」チャンネルを選び、起動ログやエラー情報を確認してください。「MCP Server started」とあれば起動成功です。
本番環境で MCP を使うのは安全ですか?
**必須対策**:
• 読み取り専用アカウント使用(DELETE/UPDATE/DROP 禁止)
• リードレプリカ(Read Replica)接続、メイン DB 不可
• パスワードは環境変数管理(ハードコーディング禁止)
• 機密テーブル(パスワード、決済情報)へのアクセス権剥奪
**推奨対策**:
• MCP 呼び出しログの定期監査
• クエリ複雑度の制限(DB 負荷防止)
• まず開発環境で検証
結論:読み取り専用 + リードレプリカ + 環境変数は最低限のセキュリティ基準です。
複数のデータベースを同時に設定できますか?
```json
{
"mcpServers": {
"sqlite-local": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/path/to/local.db"]
},
"postgres-prod": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
"env": { "POSTGRES_HOST": "prod-server", ... }
}
}
}
```
使用時、明確に指示します:
• "ローカル SQLite でユーザー数を調べて"
• "本番 PostgreSQL で最新注文を見て"
AI は指示に基づいて適切な MCP Server を選びます。
Windows でパス設定設定がいつもエラーになる
**✅ 正解**:
• "D:/projects/test.db"(推奨、正斜線)
• "D:\\\\projects\\\\test.db"(二重逆斜線)
**❌ 不正解**:
• "D:\projects\test.db"(単一逆斜線、JSON 解析エラー)
• "./test.db"(相対パス、MCP が見つけられない)
• "C:\Users\ユーザー名\test.db"(日本語ユーザー名などは問題になる可能性あり)
**デバッグ**:
1. PowerShell 等でファイル存在確認:dir "D:\projects\test.db"
2. 絶対パスをコピーし、手動でバックスラッシュをスラッシュに置換
3. オンライン JSON 検証ツールでフォーマットチェック
MCP は Cursor のパフォーマンスに影響しますか?
**通常**:
• MCP Server は必要時のみ起動し、普段はリソースを食いません。
• クエリ遅延 = DB 応答時間 + ネットワーク遅延(通常 1秒未満)。
**遅くなる場合**:
• 初回呼び出し:npx が MCP Server パッケージをダウンロード(一度だけ)。
• 複雑なクエリ:AI が生成した SQL が複雑すぎて DB が遅くなる。
• API 制限:外部 API の頻繁な呼び出しでレート制限にかかる。
**最適化**:
• AI に結果キャッシュを指示:「この結果を覚えておいて」
• 検索範囲の制限:「最近の100件だけ調べて」
• データベースへのインデックス追加
9 min read · 公開日: 2026年1月17日 · 更新日: 2026年3月3日
関連記事
AI コード生成のミスを減らす?この5つの Prompt テクニックで効率50%アップ
AI コード生成のミスを減らす?この5つの Prompt テクニックで効率50%アップ
Cursor 上級テクニック:開発効率を倍増させる10の実践的手法(2026年版)
Cursor 上級テクニック:開発効率を倍増させる10の実践的手法(2026年版)
Cursor バグ修正完全ガイド:エラー分析から解決策検証までの効率的ワークフロー

コメント
GitHubアカウントでログインしてコメントできます