珂遺永の児云議な碧怏み

n-ozawan

峻さん、こんにちは。晦永蝕�kグル�`プの稼-看噛温敬温稼です。
イラン猟晒��では敢蛍の晩をノウル�`ズと冱い、イラン�靴淋�晩に乎輝します。

云籾です。
MCP (Model Context Protocol) は、伏撹AI (LLM) と翌何リソ�`スやツ�`ルを俊�Aするための���片ク顳┘廛蹈肇灰襭�です。その碧�Mみはどうなっているのでしょうか�申饂悗浪儖箟覆諒没蕕澆砲弔い討里���です。

珂遺永の碧怏み

サ�`バ�`とクライアント

珂遺永はクライアント?サ�`バ�`侏で強恬します。��畜に冱うならば、珂遺永ホスト、珂遺永クライアント、珂遺永サ�`バ�`の3つの更夛となっています。

MCPホストは伏撹AIが�嘛�する�h廠�┘▲廛蝪�であり、VS CodeやClaude Desktopなどが��輝します。MCPホストはユ�`ザ�`からの峺幣を鞭け函り、MCPクライアントを宥じて、MCPサ�`バ�`が戻工する光�Nサ�`ビスを�g佩させます。宥佚する珂遺永サ�`バ�`は�}方あり、MCPホストはMCPサ�`バ�`ごとにMCPクライアントを恬撹し、それらを砿尖します。

珂遺永クライアントは珂遺永ホストと珂遺永サ�`バ�`を播局しするコンポ�`ネントです。伏撹粥鴛からの凋綜を鞭けて、珂遺永サ�`バ�`を宥して翌何粥永鴛やロ�`カルファイルへアクセスし、潤惚を粥鴛へ卦します。

珂遺永サ�`バ�`は伏撹粥鴛にリソ�`スや字嬬を戻工するコンポ�`ネントです。珂遺永サ�`バ�`は��鬉垢詬皺織轡好謄爐瓦箸帽講�します。箭えば赫庄岳堰顎恢へのアクセスや荷恬を辛嬬するための珂遺永サ�`バ�`、などです。また、仝サ�`バ�`々と療くとクラウド貧に更廏されたものと�誅颪靴泙垢�、�g縞の謹くはロ�`カル桟廠で珂遺永サ�`バ�`を強恬させます。念指、糸姻温敬.庄看の珂遺永を聞ってみましたが、あれはロ�`カル桟廠に糸姻温敬.庄看喘の珂遺永サ�`バ�`が強恬しています。

JSON-RPC

MCPクライアントと珂遺永サ�`バ�`はJSON-RPCという�ク颪罵�佚を佩います。RPCとは、Remote Procedure Call の待で、ネットワ�`ク貧の�eのコンピュ�`タで�嘛�するプログラム���v方やメソッド��を、返圷のプログラムから岷俊柵び竃して�g佩させるプロトコルです。JSON-PRCとは、そんなRPCをJSONで宥佚するプロトコルです。

箭えば、珂遺永クライアントは參和のような干皆或鰻を、珂遺永サ�`バ�`へ僕佚します。

{
  "jsonrpc": "2.0",         // JSONRPC のバ�`ジョン
  "id": 1,                  // �R�e徨
  "method": "tools/call",   // ツ�`ルの�g佩
  "params": {               // 哈方
    "name": "example",
    "arguments": {
      "query": "hello world!"
    }
  }
}

珂遺永サ�`バ�`は鞭け函った干皆或鰻の坪否を圷に�I尖を�g佩します。そしてその�I尖が撹孔した魁栽、參和のようなレスポンスを珂遺永クライアントへ卦抜します。

{
  "jsonrpc": "2.0",         // JSON-RPC のバ�`ジョン
  "id": 1,                  // �R�e徨�┘螢�エストと揖じ桑催が�O協される��
  "result": {               // �I尖が撹孔した��栽の�Y惚
    "content": [
      {
        "type": "text", 
        "text": "hello world!", 
      }
    ]
  }
}

珂遺永サ�`バ�`の児云字嬬

珂遺永サ�`バ�`にはプリミティブと柵ばれる3つの児云字嬬があります。

ツ�`ル

ツ�`ルは、伏撹粥鴛が翌何システムと銭亊して、採かしらの�I尖を�g佩するための字嬬です。

珂遺永クライアントは、珂遺永サ�`バ�`がどんなツ�`ルを戻工しているのかを諒い栽わせます。その縞は、"method": "tools/list"のリクエストを僕佚します。

{
  "jsonrpc": "2.0",         // JSONRPC のバ�`ジョン
  "id": 1,                  // �R�e徨
  "method": "tools/list",   // MCPサ�`バ�`が戻工するツ�`ルの匯�Eを函誼
  "params": {}              // 哈方
}

珂遺永サ�`バ�`は"method": "tools/list"のリクエストに��して、旋喘辛嬬なツ�`ルの秤烏をレスポンスします。參和のレスポンスでは、fetch_pageというツ�`ルが戻工されていることが蛍かります。

{
  "jsonrpc": "2.0",         // JSON-RPC のバ�`ジョン
  "id": 1,                  // �R�e徨
  "result": {               // ツ�`ルの匯�Eを卦抜する
    "tools": [
      {
        "name": "fetch_page",  // ツ�`ル兆
        "inputSchema": { 
          "type": "object",
          "required": ["url"] 
        }
      }
    ]
  }
}

そのレスポンスから、伏撹粥鴛は聞喘するツ�`ルを登僅して、珂遺永クライアントがそのツ�`ルを�g佩するリクエストを僕佚します。

{
  "jsonrpc": "2.0",         // JSONRPC のバ�`ジョン
  "id": 1,                  // �R�e徨
  "method": "tools/call",   // MCPサ�`バ�`が戻工するツ�`ルを�g佩
  "params": {               // 哈方
    "name": "fetch_page",   // �g佩したいツ�`ル兆
    "arguments": {
      "url": ""
    }
  }
}

リソ�`ス

リソ�`スは、伏撹粥鴛が翌何システムが隔つリソ�`スを函誼するための字嬬です。

珂遺永クライアントは、珂遺永サ�`バ�`からどのようなリソ�`スを函誼できるのかを諒い栽わせます。その縞は、"method": "resources/list"のリクエストを僕佚します。

{
  "jsonrpc": "2.0",             // JSONRPC のバ�`ジョン
  "id": 1,                      // �R�e徨
  "method": "resources/list",   // リソ�`スの匯�Eを函誼
  "params": {}                  // 哈方
}

珂遺永サ�`バ�`は"method": "resources/list"のリクエストに��して、函誼辛嬬なリソ�`スをレスポンスします。參和のレスポンスでは、file:///example/README.mdというリソ�`スが函誼辛嬬であることがわかります。

{
  "jsonrpc": "2.0",         // JSON-RPC のバ�`ジョン
  "id": 1,                  // �R�e徨
  "result": {               // リソ�`スの匯�Eを卦抜する
    "resources": [
      {
        "uri": "file:///example/README.md",
        "mimeType": "text/markdown"
      }
    ]
  }
}

そのレスポンスから、伏撹粥鴛は珂遺永クライアントを宥して、翌何システムのリソ�`スを函誼するリクエストを僕佚します。

{
  "jsonrpc": "2.0",             // JSONRPC のバ�`ジョン
  "id": 1,                      // �R�e徨
  "method": "resources/read",   // リソ�`スの函誼
  "params": {                   // 哈方
    "uri": "file:///example/README.md"
  }
}

プロンプト

プロンプトは、よく聞う峺幣や嵎諒�┘廛蹈鵐廛硲�の侘塀を嚠め喘吭しておく仝テンプレ�`ト々です。�I尖した潤惚や函誼したリソ�`スを伏撹粥鴛が嗤�浸醵辰垢襪燭瓩砲蓮△修譴吠覆靴織廛蹈鵐廛箸�駅勣です。そのようなプロンプトを珂遺永サ�`バ�`から函誼することができます。プロンプトのあり��なしや、その坪否によっては伏撹粥鴛の娼業が寄きく�笋錣辰討�ますので、珂遺永サ�`バ�`からプロンプトを戻工することで、芦協した娼業を鳩隠します。

珂遺永クライアントとの宥佚はツ�`ルやリソ�`スとほぼ揖じで、"method": "prompts/list"でプロンプトの匯�Eを函誼し、"method": "prompts/get"でプロンプトを函誼します。

おわりに

珂遺永は粥鴛に�v�Sするプロトコルですので、鹸�jで佃しい咫�鵑鯤椶韻討い泙靴燭�、吭翌とシンプルな碧��でした。

書指は珂遺永クライアントから珂遺永サ�`バ�`への宥佚をあげましたが、その剃で、珂遺永サ�`バ�`から珂遺永クライアントへの宥佚もあります。ファイルの��茅など、云輝にその荷恬をしても措いのか�燭肇罘`ザ�`に鳩範するために、珂遺永サ�`バ�`から珂遺永クライアントへ諒い栽わせます。

ではまた。


Recommendおすすめブログ