MCPの接続とセキュリティ
MCPのアーキテクチャ、トランスポート方式、権限境界を理解し、サードパーティまたは独自のMCP Serverへ安全に接続します。
Model Context Protocol(MCP)は、AI アプリケーションを外部システムに接続するオープンプロトコルです。互換性のあるクライアントは、データ ソースごとに個別のアクセス プロトコルを設計することなく、MCP サーバーを介してコンテキストを取得したり、ツールを呼び出したり、事前定義されたプロンプトを使用したりできます。
MCP はモデル API とは異なるアクセス層です
AGTCloud API はモデルの呼び出しを担当します。 MCP サーバーは、ツールとコンテキストを互換性のあるクライアントに公開する責任があります。 MCP に接続するときは、サーバー提供元または管理者から提供されたインストール コマンド、URL、および認証方法を使用してください。 AGTCloud モデル API アドレスは MCP サーバー エンドポイントとして使用できません。
MCPの仕組み
MCP ホストは複数の MCP サーバーに接続し、サーバーごとに独立した MCP クライアントを作成できます。
| 参加者 | 主な責任 | 一般的な形態 |
|---|---|---|
| MCP Host | AI アプリケーションをホストし、接続、権限、ユーザー確認を管理します | コーディングエージェント、IDE、デスクトップ アシスタント |
| MCP Client | MCP サーバーとの専用接続を確立し、サーバー機能をホストに提供します | 通常はホストに組み込まれています |
| MCP Server | 特定のツール、データ、またはプロンプト テンプレートを公開する | ローカル子プロセス、リモートサービス |
MCPはデータ層とトランスポート層に分かれます。 データ層は、JSON-RPC メッセージ、機能検出、およびプリミティブを定義します。トランスポート層は、ローカル プロセスまたはネットワーク間でメッセージを配信する方法を担当します。通常、クライアントがこれらのプロトコル詳細を内部で処理します。接続時は、クライアントが提供するMCP設定を優先して使用してください。
Serverが提供できる機能
MCP サーバーは主に 3 種類のプリミティブを公開します。
| プリミティブ | 制御方法 | 機能 | 接続時の主な確認事項 |
|---|---|---|---|
| Tools | モデルはオプションで呼び出すことができ、ホストはポリシーと承認の実行を担当します。 | APIの呼び出し、ファイルへの書き込み、データベースのクエリなどの操作またはクエリの実行 | 入力スキーマ、書き込み操作、外部副作用、手動承認が必要かどうか |
| Resources | アプリケーションによって選択および管理される | ファイル、レコード、API 応答などのコンテキストをモデルに提供します。 | データ範囲、機密情報、更新頻度、コンテンツの信頼性 |
| Prompts | 通常はユーザーによって積極的に選択されます | 再利用可能なインタラクション テンプレートとパラメータを提供する | テンプレートソース、パラメータの意味、外部命令が含まれているかどうか |
サーバーはサポートする機能を宣言し、クライアントは利用可能なツール、リソース、およびプロンプトを検出します。サーバーが特定の機能を提供しているからといって、必ずしもクライアントがそれを有効にするわけではありません。最終的な動作は、ホストのバージョン、アクセス許可ポリシー、およびユーザーの選択によっても異なります。
サーバーから返されたコンテンツを外部入力として扱います
リソース、ツールの結果、およびプロンプトにはすべて、信頼できないコンテンツが含まれている可能性があります。 MCP 経由で返されたからといって、その中の命令が他のファイル、認証情報、またはシステム サービスにアクセスすることを自動的に許可しないでください。
トランスポート方式を選ぶ
現在の MCP 仕様では、stdio とストリーミング可能な HTTP という 2 つの標準トランスポートが定義されています。
| 方式 | 仕組み | 適した用途 | 主なリスク |
|---|---|---|---|
stdio | クライアントはローカルのサーバー サブプロセスを開始し、標準入出力を通じて行ごとの JSON-RPC メッセージを交換します。 | ローカルツール、制御されたディレクトリ、ネットワーク展開を必要としないサーバー | 起動コマンドは、ローカル マシン上でプログラムを実行することと同じです。サーバーはプロセス権限と環境情報の一部を継承します |
| Streamable HTTP | クライアントは HTTP POST を単一の MCP エンドポイントに送信します。サーバーは現在のリクエストのスコープ内で JSON または SSE ストリームを返します。 | リモート サービス、チーム共有機能、ネットワーク認証が必要なサーバー | サービス ID、OAuth またはトークン、ネットワーク境界、送信データ、およびリモート操作の副作用 |
stdio の場合、サーバーの stdout は MCP メッセージのみを出力でき、ログは stderr に書き込まれる必要があります。接続障害が発生した場合は、クライアントによってキャプチャされた stderr ログを確認できますが、認証情報を含む完全なログをサードパーティに送信しないでください。
現在、Streamable HTTP は単一の POST エンドポイントを使用しており、GET アドレスや従来の HTTP+SSE アドレスを個別に構成する必要はありません。認証方法はサーバーによって決定されます。サーバーが OAuth プロセスを提供する場合、長期認証情報を共有構成に直接書き込むのではなく、その認証ページに従って認証を完了することを優先する必要があります。
設定構造を理解する
異なるクライアントのフィールド名と設定場所は、まったく同じではありません。以下に一般的な構造のみを示しており、直接実行することはできません。すべてのプレースホルダーを、サーバー提供元によって提供される実際のコマンド、パラメーター、URL、および認証方法に置き換えてください。
不明な起動コマンドを直接コピーしないでください
ローカル MCP設定の command と args はコンピュータ上で実行されます。不明なソースからワンクリック インストール コマンドを実行しないでください。また、ホーム ディレクトリ、SSH ディレクトリ、またはシステム ディレクトリ全体をデフォルトのアクセス スコープとして使用しないでください。
安全に接続する手順
1. クライアントのサポートを確認する
クライアントが MCP をサポートしていることを確認し、stdio とストリーミング可能 HTTP のどちらをサポートしているかを確認してください。クライアントの現在のバージョンに対応する設定形式を使用し、他のクライアントの例に基づいてフィールドを推測しないでください。
2. サーバー ID を確認する
Server 公式リポジトリ、Provider コンソール、または組織管理者からインストール方法を取得します。発行者、バージョン、更新履歴、依存関係、アンインストール方法を確認します。リモート サーバーは、ドメイン名、HTTPS、および認証プロセスもチェックする必要があります。
3. インベントリの機能と権限
サーバーを有効にする前に、サーバーによって公開されているツール、リソース、およびプロンプトを表示します。各ツールの入力、読み取り範囲、書き込み操作、および外部副作用をログに記録し、現在のタスクに関連しない機能を無効にします。
4. 最小範囲を設定する
ローカル サーバーは、必要なディレクトリと環境変数のみを開きます。リモート サーバーは最小特権のアカウントまたはスコープを使用します。モデル API Keyを汎用 MCP 認証情報として不明なサーバーに送信しないでください。
5. リロードして確認する
クライアントの指示に従って設定を再読み込みし、サーバーが接続できることを確認し、クライアントによって表示される機能リストが期待どおりであることを確認します。接続が成功しても、すべてのツールが有効になるわけではありません。
6. 読み取り専用操作から開始します。
最初に機能をリストし、機密性のないリソースを読み取るか、副作用なしでツールを呼び出します。入力、出力、ログを確認した後、ファイルの書き込み、データの変更、または外部システムの呼び出しを 1 つずつ実行します。
権限レビューのチェックリスト
| 範囲 | 接続前の確認 |
|---|---|
| ローカルファイル | サーバーが読み書きできるディレクトリと、シンボリック リンクをたどるか、ディレクトリ外のファイルにアクセスするか |
| コマンドの実行 | ツールが実行するプログラムと、パラメータがモデルまたは外部コンテンツによって直接制御されるかどうか |
| ネットワークアクセス | サーバーはどのドメイン名、イントラネット サービス、サードパーティ API にアクセスしますか? |
| 認証情報 | キーまたはトークンはどこに保存され、どのプロセスまたはドメイン名に渡され、個別に取り消すことができますか? |
| データ処理 | 入力と結果は端末外へ送信されますか?Providerはログと呼び出しデータをどのように保存しますか? |
| 書き込み操作 | 変更、削除、送信、支払い、メッセージ送信の前に明確な確認がありますか? |
| アップデート | サーバー パッケージまたはリモート機能が変更された場合、クライアントが権限を再表示するかどうか |
リモート サーバーの場合は、信頼できる HTTPS アドレスにのみ接続し、認証プロセスに従ってそれらのアドレスを承認します。ローカル サーバーの場合は、絶対コマンド パス、分離されたディレクトリ、および通常のユーザー権限の使用を優先します。便宜上、管理者権限で直接実行しないでください。
よくある質問
| 現象 | 優先して確認する項目 | 対処方法 |
|---|---|---|
| サーバーを起動できません | コマンドパス、ランタイム、パラメータ、作業ディレクトリ | プログラムが通常の端末に存在することを確認しますが、クライアントをバイパスして未知のコマンドを直接実行しないでください。 |
| 接続済みと表示されるがツールがない | サーバーの機能、クライアントの権限およびバージョン | 機能リストをリロードし、クライアントがプリミティブをサポートしていることを確認します。 |
stdio 接続後すぐに切断する | サーバーが通常ログを stdout に出力するかどうか | ログを stderr に書き込み、stdout に MCP メッセージのみが含まれていることを確認します。 |
リモート エンドポイントは 401 または 403 を返します | サーバー認証方式、トークン、スコープ | サーバー文書に従って再認証し、他のサービスのトークンを使用しないでください。 |
リモート エンドポイントは 404 を返します | URL に完全な MCP パスが含まれているかどうか | サーバー提供元によって提供されるエンドポイントを使用し、モデル API パスを自分で追加しないでください。 |
| ツールは読み取りはできますが、書き込みはできません | ツールの権限、ディレクトリの範囲、および手動による確認 | 本当に必要な場合にのみ権限を拡張し、取り消し可能なテストを再度実行する |
| ツールの挙動が説明と一致しない | サーバーのバージョン、ツールスキーマ、および外部入力 | 直ちにツールを無効化して、機密情報を除いた証拠を保存し、サーバーの提供元に連絡してください。 |
| 接続後に予期しない外部リクエストが発生する | サーバーのネットワーク権限とデータフロー | サーバーを切断し、認証情報を取り消し、ログとホスト ネットワーク アクティビティを確認します。 |
継続利用の推奨事項
- 接続されているサーバー、バージョン、ツールリスト、認可範囲を定期的に確認してください。
- さまざまなサーバーに対して、独立した取り消し可能な最小特権の認証情報を使用します。
- 特に削除、書き込み、支払い、メッセージング、運用システムの操作については、手動による確認を維持します。
- 不明なリソースまたはツールの結果内のコマンドを信頼できるシステム コマンドとして扱わないでください。
- ログ、スクリーンショット、エラーレポートでは、キー、トークン、顧客データ、機密パスを削除する必要があります。
- サーバーの使用を停止する場合は、クライアントから構成を削除し、関連付けられている認証情報を取り消します。
モデルクライアント用に AGTCloud を設定する必要がある場合は、CC-Switch 統合チュートリアル から開始するか、左側の「サードパーティ連携」ディレクトリで特定のツールを選択してください。モデルのエンドポイントとリクエストフィールドを理解する必要がある場合は、API Reference を確認してください。 MCP のプロトコルの詳細とバージョン変更については、MCP 公式ドキュメント を参照してください。