MCPサーバーとは?
MCPサーバーとは?ツール、リソース、プロンプトを解説 | We.Inc
MCPサーバーは、Model Context Protocol を通じてAIアプリケーションにツール、リソース、プロンプトを提供するプログラムです。実際のJSONメッセージを順を追って確認できます。
MCPサーバーとは?
MCPサーバーは、Model Context Protocol を通じてAIアプリケーションに作業の材料を提供するプログラムです。呼び出せるツール、読み取れるリソース、ユーザーが選べるプロンプトがそれにあたります。アプリケーションはMCPクライアントを通じて接続し、双方はローカルでは stdio、リモートでは Streamable HTTP を使って JSON-RPC 2.0 のメッセージをやり取りします。
サーバーが提供できる3つのもの
- プリミティブ
- 内容
- 使うかどうかを決めるのは
- 主なメソッド
- ツール
- 操作を実行する関数。入力用のJSON Schemaを持つ
- モデル
- tools/list, tools/call
- リソース
- ファイルやスキーマなど、URIで指定される読み取り専用のデータ
- アプリケーション
- resources/list, resources/read
- プロンプト
- 引数を取る再利用可能な指示テンプレート
- ユーザー
- prompts/list, prompts/get
下で実際のやり取りを1ステップずつ確認できます。各ステップでは、現行の仕様(バージョン 2026-07-28)のメッセージ形式を使って、クライアントが送るJSONとサーバーの応答を表示します。生のメッセージを読むのが、サーバーを魔法のように考えるのをやめる一番の近道です。
- ステップを選びます:ディスカバリー、ツールの一覧取得、ツールの呼び出し、変更通知の受信のいずれかです。
- 左側のリクエストと右側のレスポンスを読みます。
- ペアの下のメモで、そのステップで最も重要なフィールドを確認します。
- 任意のメッセージをコピーして、自分のサーバーやクライアントが送るものと比較できます。
- ツールには、get ではなく weather_current のように明確な接頭辞を付けましょう。ホストは多くのサーバーから同時にツールを読み込むことがあり、あいまいな名前は衝突します。
- ツールの説明は、一覧をざっと見る人間ではなく、モデルに向けて書きましょう。ツールが何をするのか、いつ選ぶべきかを書きます。
- 読み取り専用のコンテキストはツールではなくリソースとして公開しましょう。リソースなら何を含めるかをアプリケーションが決められるので、モデルが不要なデータを取得するのを防げます。
- 何かを変更するツールはすべて危険なものとして扱いましょう。プロトコルは承認をホストに任せているので、1回の呼び出しごとに安全に確認できるツールを設計します。
よくある質問
MCPサーバーはAPIと同じものですか?
通常はAPIを包むものです。一般的なサーバーは既存のAPIやデータベースを呼び出し、その操作を標準的な方法で記述するので、MCPに対応したアプリケーションなら独自の連携コードなしで発見して呼び出せます。
MCPサーバーは自分のコンピューターで動きますか、クラウドで動きますか?
どちらでも動きます。ローカルサーバーはアプリケーションによって起動され、標準入出力で通信します。リモートサーバーは別の場所で動き、Streamable HTTP で接続され、多くのクライアントに応答できます。
MCPサーバーには言語モデルが含まれていますか?
いいえ。サーバーが提供するのはツール、リソース、プロンプトだけです。モデルを持ち、何を送るかを決めるのはホストアプリケーションです。仕様では、バージョン 2026-07-28 の時点でサーバーから要求するサンプリングは非推奨とされています。
プロトコルのバージョン 2026-07-28 で何が変わりましたか?
プロトコルがステートレスになりました。すべてのリクエストが _meta フィールドにプロトコルのバージョンと機能を含み、サーバーは必須の server/discover リクエストに応答します。変更通知は subscriptions/listen ストリームによるオプトイン方式になりました。
ツールの呼び出しを承認するのは誰ですか?
ホストです。プロトコルのドキュメントは承認ダイアログ、権限設定、アクティビティログを提案していますが、それを強制するのはアプリケーションの役割なので、サーバーは人が呼び出しを確認したと決して仮定してはいけません。
ホスト、クライアント、サーバー
- どの構成にも3つの役割が登場します。ホストは人が使うAIアプリケーションです。ホストは接続するサーバーごとに1つのクライアントを作り、各クライアントはちょうど1つのサーバーとの専用接続を保ちます。
- つまり、ファイルサーバーとデータベースサーバーにつながったホストは2つのクライアントを持ちます。サーバーとは、どこで動いていても、単に応答するプログラムのことです。
2つの層:データとトランスポート
- データ層はメッセージを定義します。ディスカバリー、ツール、リソース、プロンプトのための JSON-RPC 2.0 のリクエスト、レスポンス、通知です。トランスポート層はそのメッセージを運び、接続の確立と認可を扱います。
- 標準のトランスポートは2つあります。stdio は、1台のマシン上のプロセス間で標準入出力を通じてメッセージを流します。Streamable HTTP はクライアントからサーバーへのHTTP POSTを使い、ストリーミング用に Server-Sent Events を任意で使えます。ベアラートークン、APIキー、OAuthに対応しています。
クライアント側から提供できるもの
- サーバーがクライアントに要求することもできます。エリシテーションでは、サーバーが elicitation/create メソッドを通じて、ユーザーに追加の情報や確認を求められます。
- サーバーがホストにモデルの生成を求めるサンプリングと、プロトコルレベルのログ出力は、バージョン 2026-07-28 の時点で非推奨です。新しいサーバーは、stdio では stderr にログを出すか、OpenTelemetry を使いましょう。
stdio か Streamable HTTP か
トランスポートの選び方
- サーバーが動く場所
- 同じマシン上。ホストが起動する
- ネットワーク経由で到達できるどこでも
- メッセージの伝わり方
- 標準入力と標準出力のストリーム
- HTTP POST、任意で Server-Sent Events
- 認証
- 不要。ローカルプロセスのため
- ベアラートークン、APIキー、カスタムヘッダー。OAuth推奨
- ログの出力先
- stderr(stdout はプロトコルメッセージを運ぶため)
- 通常のサーバーログ
リソーステンプレートの例
URIパラメーターを持つリソーステンプレート
クライアントは resources/templates/list でテンプレートを見つけ、波かっこの部分を埋めて、resources/read で結果を読み取ります。
1. ディスカバリー
server/discover はクライアントにとっては任意ですが、すべてのサーバーが応答しなければなりません。capabilities オブジェクトはどのプリミティブがあるかを示し、listChanged はサーバーがツールの変更を通知できることを意味します。
2. ツールの一覧取得
各ツールは名前、説明、JSON Schema で書かれた inputSchema を持ちます。ホストはこれをモデルに渡し、何を呼び出せるかを知らせます。
3. ツールの呼び出し
名前は一覧のツールと完全に一致し、引数はその inputSchema に合っている必要があります。結果は content 配列で返り、ここでは1つのテキスト項目です。
4. 変更通知
通知には id がないので、誰も返信しません。クライアントがこれを受け取れるのは、toolsListChanged を求める subscriptions/listen ストリームを開いたからです。
MCPのやり取りを1つずつ見る
ステップを選択
クライアントの送信
サーバーの応答
リクエストをコピー
レスポンスをコピー
ステップ {n} / {v}
無料で始める · クレジットカード不要
関連: ガイド|Webマーケティングと集客を学ぶ
製品
ご利用いただける方
機能
リソース
会社情報
サイトマップを見る