言語を切り替える
テーマを切り替える

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 なし):

  1. あなた:AI にクエリ SQL を書かせる
  2. AI:SQL コードを提示
  3. あなた:SQL をコピーし、データベースクライアントに切り替え
  4. あなた:SQL を貼り付けて実行
  5. あなた:クエリ結果をコピー
  6. あなた:Cursor に戻り、結果を AI に貼り付け
  7. AI:結果に基づいて分析を継続

全工程で3つのウィンドウを行ったり来たりします。面倒です。

MCP 方式

  1. あなた:AI に直接「先月どの製品の売上が最高だった?」と聞く
  2. 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"
      ]
    }
  }
}

重要ポイント解説(多くの人がここで詰まります):

  1. mcpServers: 固定のフィールド名です。変更しないでください。
  2. "sqlite": この Server に付ける名前です。自由に決めてOK。AI はこの名前を見ます。
  3. command: "npx": npx を使って MCP Server を直接実行します。手動インストール不要です。
  4. 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 が有効か確認できます:

  1. 設定を開く(Ctrl+,)
  2. “MCP” を検索
  3. 設定した 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 ユーザーはスラッシュの向きを確認
  • ファイルが実際に存在するか確認(lsdir コマンド)

問題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 があなたの意図を誤解して DELETEUPDATE を実行したら、泣くに泣けません。

読み取り専用ユーザーの作成:

-- 読み取り専用ユーザー作成
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 取得方法

  1. GitHub → Settings → Developer settings
  2. Personal access tokens → Tokens (classic)
  3. Generate new token → 必要な権限(repo, user 等)をチェック
  4. トークンをコピー(一度しか表示されません)

実戦デモ

設定後、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つだけです:

  1. 概念理解:MCP は AI に道具を与えること。口だけでなく手を動かせるようにする。
  2. 設定実践:SQLite で練習し、PostgreSQL で実務運用し、API で能力拡張する。
  3. 安全注意:読み取り専用権限、環境変数、本番主データベースには触らせない。

今日は15分だけ時間を取って、SQLite MCP を設定してみてください。効率が10%、20%どころではなく、全く違う働き方になることに気づくはずです。

最後に一言:MCP はまだ新しく、公式も頻繁に更新しており、コミュニティも新しい Server を次々に出しています。GitHub の MCP Server リストをチェックしてみてください。あなたにぴったりのツールが見つかるかもしれません。

MCPデータベース設定完全フロー

MCP Server をゼロから設定し、Cursor からデータベースを直接照会できるようにする完全手順

⏱️ Estimated time: 15 min

  1. 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. 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. 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. 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 がデータベースを呼び出さないのはなぜ?
よくある3つの原因:

1. **Cursor の完全再起動忘れ**:ウィンドウを閉じるだけでなく、アプリを終了させて開き直してください。
2. **設定ファイル構文エラー**:JSON 形式を確認してください。特にカンマや引用符。検証ツールを使うのが確実です。
3. **パスの問題**:必ず絶対パスを使用してください。相対パスは機能しません。

デバッグ方法:出力パネル(View → Output)で「MCP」チャンネルを選び、起動ログやエラー情報を確認してください。「MCP Server started」とあれば起動成功です。
本番環境で MCP を使うのは安全ですか?
安全対策を講じれば可能です。必須事項:

**必須対策**:
• 読み取り専用アカウント使用(DELETE/UPDATE/DROP 禁止)
• リードレプリカ(Read Replica)接続、メイン DB 不可
• パスワードは環境変数管理(ハードコーディング禁止)
• 機密テーブル(パスワード、決済情報)へのアクセス権剥奪

**推奨対策**:
• MCP 呼び出しログの定期監査
• クエリ複雑度の制限(DB 負荷防止)
• まず開発環境で検証

結論:読み取り専用 + リードレプリカ + 環境変数は最低限のセキュリティ基準です。
複数のデータベースを同時に設定できますか?
はい、AI は適切なツールを自動選択します。設定例:

```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 でパス設定設定がいつもエラーになる
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日

コメント

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

関連記事