はじめに
前記事ではMCPの基本概念と主要サービスとの連携方法を解説しました。本記事では、より実践的なMCPの活用方法として、STDIOサーバーとリモートサーバーの使い分け、変数補間の活用、そしてデータベースやAPIとの連携について詳しく解説します。
本記事を読むことで、以下のことができるようになります。
- STDIOサーバーとリモートサーバーの違いを理解し、適切に選択できる
- 変数補間を使用して柔軟なMCP設定を構築できる
- データベースMCPを設定し、CursorからSQL操作を実行できる
- カスタムAPI連携用のMCPサーバーを設定できる
実行環境と前提条件
本記事の内容を実践するための環境要件は以下のとおりです。
| 項目 | 要件 |
|---|---|
| オペレーティングシステム | Windows 10以上、macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上 |
| Cursor バージョン | 2.3以降 |
| Node.js | 18以上(npxコマンド実行に必要) |
| Python | 3.10以上(uvx使用時) |
| インターネット接続 | 必須 |
前提条件
- MCPの基本概念を理解していること(前記事参照)
- mcp.jsonの基本的な設定方法を理解していること
- データベースの基本操作(SQL)を理解していること
期待される結果
本記事の手順を完了すると、以下の状態になります。
- プロジェクトに最適なMCPサーバータイプを選択できる
- 環境変数やワークスペースパスを動的に参照するMCP設定を作成できる
- PostgreSQL/SQLiteなどのデータベースをCursorから操作できる
- REST APIをMCP経由でCursorに統合できる
STDIOサーバーとリモートサーバーの比較
MCPサーバーには大きく分けて2種類のアーキテクチャがあります。それぞれの特徴を理解し、ユースケースに応じて適切に選択することが重要です。
STDIOサーバー
STDIOサーバーは、ローカルマシン上でCursorが直接プロセスを起動・管理するタイプのMCPサーバーです。
flowchart LR
A[Cursor] -->|標準入出力| B[MCPサーバー<br/>プロセス]
B --> C[ローカルリソース<br/>ファイル/DB]STDIOサーバーの特徴
| 項目 | 説明 |
|---|---|
| 実行場所 | ローカルマシン |
| ライフサイクル | Cursorが管理(起動・終了) |
| 通信方式 | 標準入出力(stdin/stdout) |
| ユーザー数 | 単一ユーザー |
| ネットワーク | 不要 |
STDIOサーバーの設定例
|
|
STDIOサーバーが適しているケース
- ローカルファイルやデータベースへのアクセス
- 開発環境でのテスト
- 機密性の高いデータを扱う場合
- ネットワーク遅延を避けたい場合
リモートサーバー(SSE/Streamable HTTP)
リモートサーバーは、別のプロセスまたはサーバー上で動作し、HTTP経由で通信するMCPサーバーです。
flowchart LR
A[Cursor] -->|HTTP/SSE| B[MCPサーバー<br/>リモート]
B --> C[外部サービス<br/>API/クラウドDB]リモートサーバーの特徴
| 項目 | 説明 |
|---|---|
| 実行場所 | ローカルまたはリモートサーバー |
| ライフサイクル | 独立して管理 |
| 通信方式 | HTTP POST + Server-Sent Events |
| ユーザー数 | 複数ユーザー対応可能 |
| 認証 | OAuth/APIキー |
リモートサーバーの設定例
|
|
リモートサーバーが適しているケース
- チームでのMCPサーバー共有
- クラウドサービスとの連携
- 常時稼働が必要なサービス
- OAuth認証が必要なサービス
選択の判断基準
| 判断基準 | STDIO推奨 | リモート推奨 |
|---|---|---|
| データの場所 | ローカル | クラウド/リモート |
| チーム利用 | 個人開発 | チーム開発 |
| セキュリティ | 機密データ | 一般データ |
| 可用性 | 開発時のみ | 常時稼働 |
| セットアップ | 簡単にしたい | 柔軟に構成したい |
変数補間の活用
mcp.jsonでは変数補間を使用して、環境に依存しない柔軟な設定を記述できます。これにより、チームメンバー間で設定ファイルを共有しやすくなります。
サポートされる変数構文
Cursorは以下の変数構文をサポートしています。
| 構文 | 説明 | 例 |
|---|---|---|
${env:NAME} |
環境変数を参照 | ${env:API_KEY} |
${userHome} |
ユーザーのホームディレクトリ | /Users/username |
${workspaceFolder} |
プロジェクトルート | /path/to/project |
${workspaceFolderBasename} |
プロジェクトフォルダ名 | project |
${pathSeparator} |
OSのパス区切り文字 | / または \ |
${/} |
パス区切り文字(短縮形) | / または \ |
変数が展開されるフィールド
変数補間は以下のフィールドで使用できます。
commandargsenvurlheadersauth
実践的な変数補間の例
環境変数の参照
APIキーやトークンを環境変数から読み込む設定です。
|
|
ワークスペースパスの活用
プロジェクト内のスクリプトやデータベースファイルを参照する設定です。
|
|
ユーザーホームの活用
グローバルな設定ファイルや認証情報を参照する設定です。
|
|
環境ファイルの読み込み
.envファイルから追加の環境変数を読み込む設定です。
|
|
クロスプラットフォーム対応
Windows/macOS/Linuxで動作する設定を書く場合は、パス区切り文字の変数を活用します。
|
|
データベースMCPの設定と活用
MCPを使用すると、CursorのAgentからデータベースを直接操作できます。スキーマの確認、クエリの実行、データの分析などをAIアシスタントに依頼できるようになります。
SQLite MCP Server
SQLiteは軽量なファイルベースのデータベースで、開発環境やプロトタイピングに適しています。
インストールと設定
|
|
提供されるツール
| ツール名 | 説明 |
|---|---|
read_query |
SELECTクエリの実行 |
write_query |
INSERT/UPDATE/DELETEクエリの実行 |
create_table |
テーブルの作成 |
list_tables |
テーブル一覧の取得 |
describe_table |
テーブル構造の確認 |
使用例
Agentに以下のように指示します。
usersテーブルから、created_atが今月のユーザー数を集計してください
Agentは適切なSQLクエリを生成し、実行結果を返します。
PostgreSQL MCP Server
PostgreSQLは本番環境でも広く使用されるリレーショナルデータベースです。
インストールと設定
|
|
接続文字列を使用する場合
|
|
提供されるツール
| ツール名 | 説明 |
|---|---|
query |
SQLクエリの実行 |
list_schemas |
スキーマ一覧の取得 |
list_tables |
テーブル一覧の取得 |
describe_table |
テーブル構造とインデックスの確認 |
データベース操作の実践例
スキーマの確認
このデータベースのテーブル一覧を確認し、それぞれのテーブル構造を教えてください
データ分析クエリの生成
ordersテーブルとorder_itemsテーブルを結合して、
過去30日間の売上トップ10商品を集計するクエリを実行してください
マイグレーションの作成支援
usersテーブルに「email_verified_at」カラムを追加するマイグレーションを作成してください。
NULL許容のTIMESTAMP型で、インデックスも追加してください
データベースMCPのセキュリティ考慮事項
| 考慮事項 | 推奨対策 |
|---|---|
| 認証情報の管理 | 環境変数を使用し、設定ファイルにハードコードしない |
| 権限の制限 | 読み取り専用ユーザーを使用(可能な場合) |
| 本番環境への接続 | 開発環境のみで使用し、本番DBへの直接接続は避ける |
| クエリの監査 | 実行されたクエリをログに記録する |
API連携MCPの設定
REST APIやGraphQL APIをMCP経由でCursorに統合する方法を解説します。
Fetch MCP Server
Web APIからデータを取得するための汎用的なMCPサーバーです。
設定例
|
|
提供されるツール
| ツール名 | 説明 |
|---|---|
fetch |
URLからコンテンツを取得(HTML/JSON/テキスト) |
fetch_markdown |
URLからコンテンツを取得しMarkdownに変換 |
使用例
https://api.example.com/users のエンドポイントからユーザーデータを取得してください
カスタムAPI MCPサーバーの作成
特定のAPIに特化したMCPサーバーを作成することで、より効率的な連携が可能になります。
TypeScriptでのMCPサーバー実装例
|
|
カスタムサーバーの設定
|
|
リモートAPIサーバーとの連携
既存のAPIサーバーをMCPエンドポイントとして公開することも可能です。
SSEエンドポイントの設定
|
|
Streamable HTTPエンドポイントの設定
|
|
複数MCPサーバーの統合管理
プロジェクトで複数のMCPサーバーを使用する場合の管理方法を解説します。
プロジェクト設定とグローバル設定の使い分け
~/.cursor/mcp.json # グローバル設定(すべてのプロジェクトで使用)
├── github # 全プロジェクト共通
├── slack # 全プロジェクト共通
└── notion # 全プロジェクト共通
.cursor/mcp.json # プロジェクト設定
├── project-db # プロジェクト固有のDB
├── project-api # プロジェクト固有のAPI
└── local-tools # プロジェクト固有のツール
設定ファイルの分離例
グローバル設定(~/.cursor/mcp.json):
|
|
プロジェクト設定(.cursor/mcp.json):
|
|
MCPサーバーの有効化/無効化
特定のMCPサーバーを一時的に無効化するには、Cursor Settings → MCP から操作できます。コード上で無効化する場合は、設定をコメントアウトするか削除します。
トラブルシューティング
MCPサーバーで問題が発生した場合の対処方法を解説します。
よくある問題と解決策
| 問題 | 原因 | 解決策 |
|---|---|---|
| サーバーが起動しない | コマンドパスが正しくない | フルパスを指定するか、PATHを確認 |
| 認証エラー | APIキーが無効 | 環境変数の設定を確認 |
| タイムアウト | ネットワーク遅延 | タイムアウト設定を調整 |
| ツールが表示されない | サーバーが未接続 | Cursor Settingsで接続状態を確認 |
デバッグ手順
-
Cursor Settingsでの確認
- MCP セクションでサーバーの状態を確認
- エラーメッセージがあれば内容を確認
-
手動でのサーバー起動テスト
- ターミナルでMCPサーバーを直接起動
- 出力されるエラーメッセージを確認
-
環境変数の確認
- 必要な環境変数が設定されているか確認
echo $VARIABLE_NAMEで値を確認
-
ログの確認
- Cursorの開発者ツールでログを確認
- MCPサーバーのログ出力を確認
まとめ
本記事では、MCPサーバーの実践的な活用方法を解説しました。
- STDIOサーバーはローカルリソースへのアクセスに適し、リモートサーバーはチーム共有やクラウド連携に適している
- 変数補間(
${env:}、${workspaceFolder}等)を活用することで、柔軟で移植性の高い設定を構築できる - データベースMCPを使用すると、AIがスキーマを理解し、適切なSQLクエリを生成・実行できる
- カスタムAPI MCPサーバーを作成することで、任意のAPIをCursorに統合できる
MCPを活用することで、CursorのAIが外部システムの情報を参照しながらより的確なコード生成や提案を行えるようになります。プロジェクトの要件に応じて適切なMCPサーバーを選択し、開発効率を向上させてください。