第2章 — Model Context Protocol (MCP) の正体

公開日: 2026-03-31 最終更新日: 2026-06-12 バージョン: 1

第2ç«  — Model Context Protocol (MCP) の正䜓

LLM Primer IV: MCPで蚭蚈するAI認知 のりォヌクスルヌ第2回です。今回は、本曞の残りを支えられる皋床に䞁寧に、メンタルモデルを組み立おたす — 3぀の圹割、JSON-RPCのワむダ圢匏、動的なディスカバリ面、そしおセッション・ラむフサむクル。


なぜこの章があるのか

第1章は問題に名前を付けたした。この章は、答えのメンタルモデルを組み立おたす。MCPは䞀文で芁玄でき、䞀段萜で誀解されたす。なので時間をかけたす — ワむダ・レベルでのプロトコルの正䜓、3぀の圹割が䜕を意味し䜕を所有するのか、本番で本圓に効いおくる堎面でRESTずどう違うのか、接続から終了たでセッションの䞭で䜕が起きるのか。この章を読み終えるころには、次章を読む前に、サヌバヌプリミティブはどういう圢でなければならないか、クラむアントプリミティブはどういう圢でなければならないか、そしおMCPがなぜ今の構造を遞んだのかを、自分で予枬できる状態を目指したす。

ひずこずで蚀うず: MCPは3぀の圹割 — Host・Client・Server — を持぀JSON-RPCプロトコルで、明瀺的な胜力亀枉、真実の源泉ずしおの実行時ディスカバリ、そしお゚ヌゞェントパタヌンを埌付けではなく自然に衚珟できる双方向メッセヌゞモデルを備える。

2.1 MCPずは䜕か、「AIのUSB-C」の本圓の意味

Model Context Protocolは、LLMアプリケヌションが倖郚の胜力を発芋し、蚘述し、呌び出すためのオヌプン仕様です。ワむダ䞊はJSON-RPC 2.0が、少数のトランスポヌトのうちのどれかに乗りたす。アヌキテクチャ䞊は、ホストがどの準拠サヌバヌずも特泚の統合コヌドなしに動ける契玄です。プロトコルに察しお䞀床䜜られたツヌルは、それを話すすべおのホストで動きたす。プロトコルに察しお䞀床䜜られたホストは、それを話すすべおのツヌルを䜿えたす。

定着した蚀い回しは「AIのUSB-C」です。圢は本圓にUSB-Cに䌌おいたす — 開かれたデバむス矀ず開かれたホスト矀の間を、ひず぀の接続暙準が仲介する。比喩の限界も名前を付ける䟡倀がありたす。USB-Cはコネクタずその䞊のスタックを暙準化する。MCPはプロトコルだけを暙準化する。USB-Cは電気的なタむムスケヌルで動き、ハヌドりェアがフレヌミングを匷制する。MCPはネットワヌク的なタむムスケヌルで動き、フレヌミングは゜フトりェア定矩 — だからより柔軟である代わりに、切れる接続ず遅いピアを自分で扱わなければなりたせん。

゚ンゞニアにずっお近いのはLSPです。Language Server Protocolは、どの゚ディタずどの蚀語サヌバヌも話せるプロトコルを定矩したした。MCPは、どのLLMホストずどの胜力プロバむダも話せるプロトコルを定矩したす。勝ち筋の圢は同じ — 倚察倚が共有プロトコルで加法的にスケヌルする圢に畳たれる、ずいうもの。新しいワむダ圢匏を発明するのではなくJSON-RPC 2.0を遞んだのは意図的です。小さくお、成熟しおいお、蚀語非䟝存で、地味。面癜いアヌキテクチャ䞊の遞択はワむダレベルにはありたせん。Host・Client・Serverがどう責任を分担するか、そこにありたす。

2.2 Host・Client・Server — それぞれが所有するもの

MCPは3぀の圹割を定矩したす。たず理解すべきは、ここで蚀う「Client」ず「Server」が、他所での意味ずは違うこずです。Server は胜力を公開したす — ツヌル、リ゜ヌス、プロンプト。Client は、もっず倧きなアプリケヌションの䞭で管理される、ひず぀のサヌバヌぞの単䞀のプロトコル接続です。その倧きなアプリケヌションが Host。Hostはモデル、ナヌザヌのセッション、そしおモデルが䜕をしおよいかのポリシヌを所有したす。Servers はそれぞれの胜力面を所有したす。Clients はその間を結ぶ配線で、サヌバヌ1぀に぀き1぀です。

この分割が効くのは、それぞれが違う責任ず違う信頌姿勢を持぀からです。ナヌザヌ芖点で意味のある信頌境界はホスト。それ以倖はすべお、ホストが「入れるこずに決めた」もの。5぀のサヌバヌず話すホストは、内郚に5぀のClientを走らせ、それぞれが自分のセッション状態、自分のサブスクリプション、自分が亀枉枈みの胜力の芋え方を持ちたす。あるサヌバヌがクラッシュすれば、察応するClientがクラッシュする。他のClientは生き続け、Hostは生き続けたす。Clients は、悪いサヌバヌがセッション党䜓を汚染しないようにする接続ごずの絶瞁䜓です。

分割にはセキュリティ䞊の論拠もありたす。どのサヌバヌも、最䜎限、誰か他人が曞いたコヌドです。サヌバヌがホストに圱響しうるすべお — 通知、Elicitation、Sampling芁求、公開リ゜ヌス — をClientが仲介し、サヌバヌごずのポリシヌが宿る堎所になりたす。Host・Client・Serverは論理的な圹割で、厳密に物理的なものではありたせん。ロヌカル構成では Server はしばしば stdio で動くサブプロセス。リモヌトのデプロむではHTTPベヌスのトランスポヌト䞊のサヌビス。プロトコルは気にしたせん。圹割の境界が気にしたす。

2.3 MCPずRESTの違い — 動的ディスカバリず意味的蚘述

もっずもな質問は「これはRESTでよくないか」です。違いは化粧ではありたせん。最も倧きいのは、動的ディスカバリ、LLM向けに曞かれた意味的蚘述、そしお双方向メッセヌゞモデル。

REST APIぱンドポむントを人間の開発者向けのドキュメントで公開したす。クラむアントが䜿う゚ンドポむント集合はビルド時に固定で、新しい゚ンドポむントは再デプロむが必芁です。MCPは逆向きです。セッション開始時にClientが「䜕を提䟛したすか」ず問い、Serverは型付きカタログ — スキヌマ、説明、メタデヌタ — を返し、ホストがプログラムで䜿いたす。サヌバヌがあずからツヌルを远加すれば、listChanged 通知が再起動なしにセッション䞭のClientを曎新したす。Serverが自分の胜力に぀いおの暩嚁ある真実の源泉で、説明は実装からドリフトできたせん — ドリフトするためのクラむアント偎のコピヌが存圚しないからです。

2぀目の違いは意味的蚘述です。REST゚ンドポむントのドキュメントは、読んで刀断する開発者のために曞かれたす。MCPツヌルの蚘述は、自分のプロンプトの䞀郚ずしお読み、自埋的に刀断するLLMのために曞かれたす。「POST /users/:id/orders」ず曞いおある説明はLLMには無䟡倀です。LLMは、そのツヌルがどんな抂念的操䜜を行うのか、い぀優先すべきか、副䜜甚は䜕か、入力がドメむン的にどういう意味なのかを必芁ずしたす。APIをLLMが読める甚語に翻蚳する䜜業は、胜力に最も近い人が保守できる堎所 — サヌバヌ — に䞀床だけ抌し蟌たれおいたす。

3぀目の違いは双方向性です。RESTはリク゚スト・レスポンス、接続は閉じたす。MCPは蚭蚈䞊双方向です。サヌバヌはい぀でも通知を送れ、ClientぞSampling芁求を起こせ、フロヌの途䞭でナヌザヌに問い返せたす。どれもRESTで技術的に䞍可胜ではありたせん。どれもRESTでは䞍栌奜です。MCPでは暙準の䞀郚です。

2.4 胜力亀枉ずセッションのラむフサむクル

セッションは、Clientがトランスポヌトを開いお、自分のプロトコルバヌゞョンず胜力を茉せた initialize リク゚ストを送るずころから始たりたす。Serverは自分の胜力で応えたす — ツヌルを公開するか、リ゜ヌスを公開するか、サブスクリプションを提䟛するか、高床な機胜を持぀か。Clientは initialized 通知で確定したす。セッションは運甚状態に入り、䜿えるメッセヌゞ型はちょうど䞡者が合意した郚分集合になりたす。

この亀枉のおかげで、機胜セットが違うClientずServerが生産的に共存できたす。バヌゞョンもここで扱われたす — Serverは䞡者がサポヌトする最も高いバヌゞョンを遞びたす。運甚䞊の含意もありたす。初期化はタダではありたせん — ラりンドトリップ・コストがあり、リモヌトサヌバヌなら接続セットアップも乗りたす。長呜なセッションが掚奚パタヌン。胜力の倉化は再接続ではなく通知で流れたす。これを尊重するホスト — セッションを枩かく保ち、ネットワヌクの瞬断のあずバックグラりンドで再接続するホスト — はレむテンシが目に芋えお良くなりたす。リク゚ストごずに分解しお初期化し盎すホストは、正しく動きたすが効率は悪い。

抌さえおおきたい非察称性: リク゚ストには返信があり、通知にはありたせん。list-changedむベントは通知なので、芋逃したClientは list_tools を再呌びしお自分の芋え方を曎新できる甚意が必芁です。通知は最適化であっお保蚌ではありたせん。堅牢なMCPコヌドは通知をヒントずしお扱い、蚘録ずしおは扱いたせん。

芚えおおきたいこず: 3぀の圹割は、意図的な責任分割ずしお読む — Hostがモデルずポリシヌを、Serverが胜力を、Clientが接続ごずの仲介を所有する。動的ディスカバリは、Serverを真実の源泉にしお、クラむアント偎のドリフトをなくす手ずしお読む。双方向メッセヌゞモデルは、゚ヌゞェントパタヌンを埌付けではなく自然にする仕組みずしお読む。どれも现郚ではなく、構造的な働きを担っおいたす。

第2章を螏たえお

これでメンタルモデルが揃いたした。MCPは、3぀の圹割を持぀JSON-RPCプロトコルで、Serverを自分の胜力に぀いお暩嚁ある存圚にする動的ディスカバリ、LLM聎衆向けに曞かれた蚘述、通知ずServer発のリク゚ストを含む双方向メッセヌゞモデル、そしお明瀺的な胜力亀枉で開き、䞡者が合意した郚分集合の䞭で運甚するラむフサむクルを持぀。これだけ足堎があれば、ServerずClientがそれぞれ䜕を公開するかを具䜓的に話せたす — 次の2章がそれをやりたす。


次回 — 第3ç« : サヌバヌプリミティブ — Resources・Prompts・Tools。 サヌバヌが提䟛できる3぀の名詞、それぞれの意味、そしお適切なプリミティブを遞ぶ芏埋 — 隣の領分に抌し蟌たないこず。

党䜓像を抌さえたい方ぞ: 本曞では、泚釈付きのメッセヌゞ・トレヌスずずもにワむダ圢匏を歩き、LSPずUSB-Cずの比范を実務䞊の含意ずずもに発展させ、第11章ず第12章のセキュリティ議論を支える皋床に詳しくラむフサむクルを扱いたす。Amazonで『LLM Primer IV』を芋る

下田 昌平
下田 昌平
開発ず蚭蚈を担圓。1994幎からプログラミングを始め、今もなお最新技術ぞの探究心を持ち続けおいたす。