Claude Media
IDE内蔵MCPサーバーのセキュリティモデル — VS Code/JetBrains実装の違い

IDE内蔵MCPサーバーのセキュリティモデル — VS Code/JetBrains実装の違い

VS Code拡張機能とJetBrainsプラグインが内部で動かす非表示のMCPサーバー「ide」の通信・認証・公開ツールの違いを、公式仕様から比較します。

IDE内蔵MCPサーバー「ide」とは何か

VS Code拡張機能JetBrainsプラグインは、有効になっている間バックグラウンドで ide という名前のローカルMCPサーバーを動かしています。CLIがIDEネイティブの差分ビューアーで変更を表示したり、@メンションで選択範囲を読み取ったりするのは、すべてこのサーバー経由です。/mcp の一覧には表示されません。設定する項目が無いためです。

表示されないサーバーだからこそ、組織で運用する側は正体を把握しておく必要があります。とくに PreToolUse フックでMCPツールを許可リスト化している場合、この非表示サーバーが公開するツール名を知らないと、意図せず許可・拒否のどちらか一方に倒れてしまいます。Hooksの設定方法自体はClaude Code Hooks完全ガイドにまとめています。

公式ドキュメントは ide サーバーが /mcp に出てこない理由を「設定する項目が無いから」とだけ説明しています。ユーザーが有効・無効を切り替えたり認証情報を入力したりする対象ではなく、拡張機能の一部として自動的に立ち上がり自動的に終了するため、他の外部MCPサーバーと同列の管理UIに乗せる意味がない、という設計判断です。裏を返せば、ここで解説する権限モデルはユーザーの手で調整できる範囲がほぼ無く、実装そのものを知ることでしか安全性を評価できません。

VS CodeとJetBrainsでモデルに見えるツール数が違う

ide サーバーは内部的に複数のRPCを持ちますが、モデル(Claude本体)に見えるツールは絞り込まれています。この絞り込み方がVS CodeとJetBrainsで異なります。

観点VS Code拡張JetBrainsプラグイン
サーバー名VS Code拡張ide(/mcpには非表示)JetBrainsプラグインide(/mcpには非表示)
モデルに見えるツール数VS Code拡張2JetBrainsプラグイン1
読み取り専用ツールVS Code拡張mcp__ide__getDiagnostics(Problemsパネルの診断結果)JetBrainsプラグインmcp__ide__getDiagnostics(inspectionの診断結果)
書き込み系ツールVS Code拡張mcp__ide__executeCode(Jupyterノートブックのセル実行)JetBrainsプラグインなし
バインドアドレスVS Code拡張127.0.0.1固定(設定不可)JetBrainsプラグイン既定127.0.0.1、設定でネットワーク全体に公開可能
ポート範囲VS Code拡張10000–65535のランダムポートJetBrainsプラグインOS割り当てのエフェメラルポート(範囲非公開)
トランスポートVS Code拡張暗号化なしws://JetBrainsプラグイン暗号化なしws://

VS Code拡張機能だけがコード実行系のツールを持つ非対称な設計です。JetBrainsプラグインは「モデルから見て診断結果を読めるだけ」に絞られており、モデル起点でコードを実行する経路がそもそもありません。

Jupyterコード実行はVS Code拡張機能だけの機能

mcp__ide__executeCode は無確認では何も実行しません。呼び出されるたびに、コードはアクティブなノートブックの末尾に新しいセルとして挿入されます。VS Codeがそのセルまでスクロールし、ネイティブのQuick Pickが「Execute」か「Cancel」かを尋ねます。キャンセルするか Esc で閉じると、Claudeにはエラーが返り何も実行されません。アクティブなノートブックが無い、Jupyter拡張機能(ms-toolsai.jupyter)が入っていない、カーネルがPythonでない、のいずれかに該当する場合もツールは拒否されます。

このQuick Pick確認は PreToolUse フックとは別物です。フックの許可リストに mcp__ide__executeCode を加えても、意味するのは「Claudeがセル実行を提案できる」ことだけです。実際に実行させる最終ゲートは、VS Code側のQuick Pickが握っています。フックだけでコード実行を止めたつもりでも、Quick Pickでの人間の承認が別途必要になる構造です。

通信とトークンはどう守られているか

両実装とも、通信はループバック(127.0.0.1)上の暗号化されていない ws:// です。IDEを起動するたびに新しいランダムなトークンが生成され、~/.claude/ide/<port>.lock に書き込まれます。CLIはこのトークンを X-Claude-Code-Ide-Authorization ヘッダーで提示して初めて接続できます。CLAUDE_CONFIG_DIR を設定している場合は、ロックファイルの書き込み先も $CLAUDE_CONFIG_DIR/ide/ に変わります。

暗号化されていない点は弱点に見えますが、ソケットがループバック限定である間は妥当な設計です。同じマシン上で通信を盗聴できるプロセスは、同じ権限でロックファイルのトークンも読めてしまうため、TLSを足しても保護は増えません。問題が生じるのは、後述するようにこのループバック限定が崩れたときです。

機密ファイルをIDEコンテキストから除外する

ide サーバーに接続している間、CLIはプロンプトを送るたびに現在の選択範囲とアクティブなファイルのパスをコンテキストとして自動的に含めます。トランスクリプトには ⧉ Selected N lines from <file> という行が表示され、これが発生したことを示します。.env のような機密ファイルをこの自動共有から外すには、そのパスに対する Read の拒否ルールを設定します。一致する拒否ルールがあれば、選択テキストと開いているファイルの通知の両方がClaudeに届かなくなります。

この設定は ide サーバー固有の話であり、MCPサーバー全般の権限設計とは別軸です。外部MCPサーバーへの接続そのものをどう安全に絞るかはMCPセキュリティガイドで扱っています。両者の違いは扱うリスクの種類にあります。ide サーバーは「自分のエディタが今どのファイルを開いているか」という文脈情報を渡す経路です。外部MCPサーバーは「外部のツール・データベース・APIに対してどこまでの操作を許すか」という別種のリスクを扱います。同じmcp__接頭辞のツール名を見ても、両者を混同せずに扱う必要があります。

WSL2やリモート開発でのネットワーク露出の違い

JetBrainsプラグインには「Settings → Tools → Claude Code [Beta] → Networking (Advanced)」にAccept connections from all network interfacesという設定があります。既定では無効でループバックのみですが、WSL2のデフォルトNATネットワークやリモート開発環境でCLIがIDEにループバック経由で到達できない場合に、ローカルネットワーク全体へ公開する選択肢として用意されています。有効にすると、認証トークンは引き続き必要なものの、セッションの通信とトークンの両方が平文でネットワークを流れます。WSL2では、この設定に頼るより先にミラーリングネットワークへ切り替える方法が推奨されています。

VS Code拡張機能にはこれに相当する設定がありません。バインドアドレスは 127.0.0.1 で固定です。WSL2上でVS Code拡張機能を使う場合は通常Remote-WSL経由でVS Code自体がWSL側のプロセスとして動くため、ループバックの範囲内で完結しやすい構成になっています。JetBrainsプラグインはIDE本体がWindows側で動きリモートホスト側にプラグインを入れる構成を取るため、ループバックの壁を越える必要が生じやすく、ネットワーク公開という抜け道を用意している、という違いです。

この権限モデルをどう評価するか

2つの実装を比べると、Anthropicは「モデルに見せるツールを必要最小限にする」という方針をIDEごとに律儀に作り分けています。JetBrainsでコード実行ツールが存在しないのは手抜きではありません。JetBrainsプラグインの利用形態(ターミナルでCLIを動かし、IDE統合を上乗せする構成)では、モデル起点のノートブック実行という機能自体が不要だからです。VS Code拡張機能はGUIパネルからJupyterノートブックを直接操作する体験を提供する分、確認ダイアログという追加の防御層を必ず挟んでいます。

弱点として残るのはトランスポートの平文化です。ループバック限定である前提が崩れる場面、つまりJetBrainsの「Accept connections from all network interfaces」を有効にした瞬間、この設計上の妥協はそのままリスクに転じます。この設定を有効にする組織は、認証トークンだけでなくセッションの中身も同じネットワーク上の他ホストから読み取れる状態になることを理解した上で選ぶ必要があります。

よくある質問

ide サーバーを無効化できますか

個別に無効化する設定はありません。VS Code拡張機能またはJetBrainsプラグイン自体を無効化・アンインストールすると ide サーバーも停止します。

診断結果(mcp__ide__getDiagnostics)には何が含まれますか

VS Codeの場合はProblemsパネルに表示される言語サーバーの診断(エラーと警告)、JetBrainsの場合はエディタに表示されるinspectionの診断です。ファイルを指定して範囲を絞ることもできます。

X-Claude-Code-Ide-Authorization トークンは誰が読めますか

ロックファイルは 0700 権限のディレクトリ内に 0600 権限で置かれるため、IDEを実行しているユーザー本人だけが読めます。同じマシンを共有する他ユーザーからは読めません。

JetBrainsのリモート開発でセキュリティ上の注意点はありますか

JetBrains Remote Developmentを使う場合、プラグインはローカルのクライアントではなく「Settings → Plugin (Host)」からリモートホスト側にインストールする必要があります。ide サーバー自体もリモートホスト上で起動するため、ループバック通信の起点がローカルPCではなくリモートホストになる点を踏まえてネットワーク構成を確認してください。

認証トークンはどのくらいの頻度で変わりますか

拡張機能・プラグインを起動するたびに新しいランダムトークンが生成されます。IDEを再起動すれば別のトークンに切り替わるため、ロックファイルの内容が漏れても、次回起動以降は無効になります。

まとめ

ide サーバーはCLIとIDEを繋ぐ内部専用のMCPサーバーで、/mcp には出てこないぶん存在を見落としやすい仕組みです。VS Code拡張機能はJupyterコード実行という強い権限を持つ代わりに、Quick Pickでの都度確認を必須にしています。JetBrainsプラグインは読み取り専用のツール1つに絞ることで、確認フロー自体を不要にしています。通信は両者ともループバック限定の平文が前提で、この前提が崩れるのはJetBrainsのネットワーク公開設定を有効にしたときだけです。組織で PreToolUse フックのMCP許可リストを運用しているなら、mcp__ide__getDiagnosticsmcp__ide__executeCode の2つのツール名を先に把握しておくと安心です。意図しない見落としを防げます。

この記事を共有:XはてブLinkedIn