Cursor と MCP サーバー|ローカル運用・社内配布・シークレット管理の現実解(情シス向け)
目次 クリックで開く
AIコードエディタとして圧倒的な支持を得ているCursorに、新たな進化をもたらしたのがMCP(Model Context Protocol)です。単にAIがコードを書くだけの時代は終わり、AIがローカルのデータベースを読み取り、GitHubのIssueを確認し、社内のSlackから情報を引き出す「自律的な開発エージェント」としての運用が現実のものとなっています。
しかし、企業導入において最大の障壁となるのが、「ローカルリソースへのアクセスをどう制御するか」、そして「APIキーなどの機密情報をどう守るか」というガバナンスの問題です。本記事では、情シス・IT担当者が実務で直面するMCPサーバーの運用・管理・配布の最適解について、公式ドキュメント(Model Context Protocol公式)に基づいた技術的根拠とともに解説します。
1. CursorとMCP(Model Context Protocol)が変える開発体験の正体
1.1 MCPとは何か:LLMに「手足」を与える標準プロトコル
MCP(Model Context Protocol)は、Anthropic社によって公開された、AIアプリケーション(Client)と外部データソース(Server)を接続するためのオープンな標準プロトコルです。従来、エディタ上のAIは「開いているファイル」しか見ることができませんでしたが、MCPを介することで、AIはサーバー側が提供するツール(Tools)やリソース(Resources)を自由自在に扱えるようになります。
CursorはこのMCPをいちはやくサポートしており、Cursor本体をMCP Hostとして機能させることで、世界中で公開されているMCPサーバーや、自社で開発した独自のサーバーとシームレスに連携できます。
1.2 CursorでのMCP活用メリット:コンテキストの壁を破壊する
Cursor単体でも強力なRAG機能(Codebase Indexing)を持っていますが、MCPはそれを「動的リソース」にまで拡張します。
- データベース連携: ローカルのPostgreSQLやMySQLからスキーマ情報を取得し、実際のデータに基づいたクエリ作成をAIに指示。
- ドキュメント連携: NotionやGoogle Driveにある最新の仕様書をコンテキストとして読み込ませる。
- システム操作: ローカルのシェル実行やファイル操作をAIに代行させ、デプロイフローの自動化を図る。
こうした高度な自動化は、かつての「SaaSコストとオンプレ負債を断つ」といったインフラの最適化フェーズ(詳細記事はこちら)における「運用の自動化」をさらに加速させる強力な武器となります。
2. MCPサーバーのローカル運用と社内配布の技術構成
2.1 MCPのアーキテクチャ:Client / Server / Host の関係
MCPの通信は、主にstdio(標準入出力)またはSSE(Server-Sent Events)を介して行われます。Cursorで利用する場合、ほとんどがstdio形式です。CursorがMCPサーバーの実行コマンド(例:npx @modelcontextprotocol/server-github)を子プロセスとして立ち上げ、JSON-RPCによって通信します。
2.2 【実務】ローカル環境でのMCPサーバー構築と登録手順
CursorでMCPサーバーを利用するための基本手順は以下の通りです。
- CursorのSettings(Command + Shift + J)を開く。
- Features > MCP セクションへ移動。
- + Add New MCP Server をクリック。
- Typeに「command」、Nameに任意の名称、Commandに実行パスを入力。
例えば、公式のSQLiteサーバーを導入する場合、Commandには以下のように記述します(Node.js環境が必要)。
npx -y @modelcontextprotocol/server-sqlite –db-path /path/to/your/database.db
2.3 社内配布の現実解:設定ファイル(json)の共有と配布自動化
エンジニア個々に手動設定を求めるのは非効率であり、ミスを誘発します。CursorのMCP設定は、ローカルの以下のパスにある project.json またはグローバルな設定ファイルに保存されています。
- macOS:
~/Library/Application Support/Cursor/User/globalStorage/pro.antelope.cursor/mcpServers.json - Windows:
%APPDATA%\Cursor\User\globalStorage\pro.antelope.cursor\mcpServers.json
社内配布の現実解:
Infrastructure as Code (IaC) 的なアプローチ: 設定ファイルをGit管理し、各ユーザーの所定ディレクトリへシンボリックリンクを貼る、あるいは設定スクリプト(Setup.shなど)を配布して書き換える。
cursor.json によるプロジェクト単位の設定: プロジェクトのルートディレクトリに .cursor/mcp.json(※将来的な対応やカスタム設定用)を配置し、共有する方法も検討されますが、現時点ではグローバル設定の共有が主流です。
3. 情シスが直視すべき「シークレット管理」の脆弱性と対策
3.1 危険な運用:設定ファイルへのAPIキー直書き
最も避けるべきは、mcpServers.json の env セクションに、GitHubのパーソナルアクセストークンやデータベースのパスワードを平文で記述することです。このファイルはバックアップ対象になりやすく、また万が一PCが紛失した際の漏洩リスクが極めて高いです。
3.2 推奨される管理手法:direnvや環境変数の継承
安全な運用のためには、Cursorを起動するシェル側で環境変数をセットしておく、あるいは direnv 等を活用してディレクトリ単位で環境変数を制御する方法が推奨されます。MCPサーバー側が process.env.GITHUB_PERSONAL_ACCESS_TOKEN のような形式で変数を参照するように設計されていれば、設定ファイルにキーを書き込む必要はありません。
また、機密性の高いデータを扱う際は、ID管理(IAM)の自動化アーキテクチャと同様に、アクセストークンのライフサイクル管理(定期的なローテーションと無効化)を徹底することが不可欠です。
4. 【比較表】自社開発MCP vs 公開済みMCP:コストとリスクの対照
組織でMCPを導入する際、オープンソース(OSS)を利用するか、自社の業務フローに合わせて開発するか、以下の比較表を参考に判断してください。
| 比較項目 | 公式・OSS MCP | 自社専用MCP |
|---|---|---|
| 導入スピード | 即時(npx等で実行) | 数日〜数週間(開発が必要) |
| セキュリティ | ソースコードの精査が必要 | 設計段階で制御可能 |
| 柔軟性 | 一般的機能に限定 | 独自ツール・DBに最適化 |
| メンテナンス | コミュニティ依存 | 社内エンジニアの工数発生 |
| コスト | 基本無料 | 開発・保守人件費 |
5. 実践:社内用MCPサーバー(GitHub/DB連携)の導入ステップ
5.1 Step 1:Node.js/Pythonによるサーバー実装
独自のMCPサーバーを作成する場合、Anthropicが提供しているSDKを利用するのが最短です。TypeScript/Node.jsでの実装例は以下の通りです。
npm install @modelcontextprotocol/sdk
サーバー側では「どのようなツール(関数)を提供するか」を定義し、Cursorからのリクエストに応じて内部処理を実行します。例えば、社内の独自ドキュメント検索APIを叩くツールを作成すれば、AIが社内規定を読み取ってコードを書くことが可能になります。
5.2 Step 2:Cursorへの登録と疎通確認
作成したサーバーをローカルでビルドし、Cursorの設定画面から登録します。登録後、Cursor内の「MCPツールバー」にグリーンのインジケーターが表示されれば、正常に接続されています。赤いアイコンが表示される場合は、パスの指定ミスやNode.jsのバージョン不一致が考えられます。
5.3 Step 3:エラーハンドリング(接続タイムアウト・権限不足)
実務で頻発するエラーとその対策をまとめました。
- ECONNREFUSED / Timeout: サーバーの起動に時間がかかりすぎている、あるいはstdioが衝突している。
npxの代わりにフルパスで実行ファイルを指定すると安定します。 - Permission Denied: Cursorが特定のディレクトリやファイル(DBファイルなど)にアクセスする権限を持っていない。OS側の実行権限を確認してください。
- Invalid JSON-RPC: サーバーが出力する標準出力(stdout)に、MCPプロトコル以外のログ(console.logなど)が混じっている。ログ出力は標準エラー出力(stderr)にリダイレクトする必要があります。
こうしたデータ連携のトラブルシューティングは、「SFA・CRM・MAのデータ連携全体設計図」で語られる、システム間の「責務の分離」と同じ考え方が適用できます。MCPサーバーを単なる「橋渡し」として設計し、ロジックを肥大化させないことが保守性の要です。
6. まとめ:ガバナンスと自由度を両立させる運用ポリシーの策定
CursorとMCPの組み合わせは、エンジニアの生産性を劇的に向上させますが、それは「適切なガバナンス」があってこそ成立します。情シス・IT担当者としては、以下の3点を運用ポリシーに組み込むことを推奨します。
- MCPサーバーのホワイトリスト化: 社内利用を許可するOSS MCPサーバーを明示し、自作サーバーは社内レビューを経たもののみ配布する。
- シークレット管理の徹底: 設定ファイルへのキー直書きを禁止し、1Password CLIやdirenv等のセキュアな取得経路を標準化する。
- データガバナンスの監視: AIがアクセスしてよいリソース(DBの読み取り専用ユーザーなど)を制限し、万が一の誤操作を防ぐ。
業務のDXは、ツールを導入して終わりではありません。例えば「Excelと紙の限界を突破するAppSheet活用(詳細はこちら)」のように、現場の自由度を奪わずに、システム側でいかに安全なレールを敷けるかが、IT実務者の腕の見せ所と言えるでしょう。
Cursor Enterprise等の上位プランでは、組織単位での設定制御が今後さらに強化される見込みです。常に公式のアップデート(Cursor公式料金・機能ページ)を注視しつつ、現時点での「現実解」を積み上げていきましょう。
9. エンタープライズ導入で見落としがちな「ネットワーク制限」とプロキシの壁
企業環境において、CursorからMCPサーバーを介して外部API(GitHubやNotion等)に接続する場合、社内プロキシやファイアウォールが通信を遮断するケースが多発します。MCPサーバーはCursorの子プロセスとして動作するため、OSレベルまたは個別のランタイム(Node.js/Python)に対して環境変数を正しく通す必要があります。
情シスのためのMCPネットワーク疎通チェックリスト
- 環境変数の継承:
HTTP_PROXYおよびHTTPS_PROXYが、MCPを実行するシェルまたはランタイムに正しく渡されているか。 - 証明書の信頼: 独自SSLデコードを行っている環境で、Node.js等が社内CA証明書を参照できているか。
- npxのオフライン実行: セキュリティポリシーで
npx(外部リポジトリからの動的取得)が禁止されている場合、MCPサーバーのバイナリを事前に社内リポジトリ等から配布する構成をとっているか。
これらのアカウント・権限管理の考え方は、SaaSアカウントの削除漏れを防ぐ自動化アーキテクチャと同様、入口(プロキシ)と出口(API実行権限)の両面でガバナンスを効かせることが肝要です。
10. CursorのプランによるMCP管理能力の差(要確認)
組織導入において、個人に設定を委ねるか、管理者が一括制御するかは大きな分かれ目です。現時点でのプラン別の特性をまとめました。
| 管理機能 | Proプラン | Business / Enterprise |
|---|---|---|
| 設定の配布方式 | 各ユーザーが手動設定 | ポリシーによる一括制限(ロードマップ) |
| データプライバシー | 設定でPrivacy Mode選択 | デフォルトで学習除外・SOC2準拠 |
| 集中ログ管理 | 不可(ローカルのみ) | 管理コンソールでの利用状況把握(要確認) |
最新の詳細は、Cursor公式サイトのPricingページをご参照ください。特にEnterpriseプランでは、今後MCPサーバーのホワイトリスト管理機能などの強化が期待されています。
11. セキュリティの終着点:ローカルLLMとMCPの組み合わせ
「たとえMCP経由でも社外(クラウドLLM)にコンテキストを送りたくない」という極めて高いセキュリティ要件がある場合、ローカル環境で動作するLLM(Ollama等)とMCPを組み合わせる手法も現実味を帯びています。Cursorのモデル設定をローカルサーバーに向けることで、インターネットから隔離された環境での「自律エージェント」運用が可能になります。
これは、以前ご紹介したSaaSコストとオンプレ負債を断つためのインフラ刷新の議論と同じく、利便性と機密性のバランスをどこに置くかという高度な経営判断に直結します。MCPは、その判断を支えるための柔軟な「接続の標準」として、今後も重要な役割を担うはずです。
ご相談・お問い合わせ
本記事の内容を自社の状況に当てはめたい場合や、導入・運用の設計を一緒に整理したい場合は、当社までお気軽にご相談ください。担当より折り返しご連絡いたします。