メむンコンテンツぞスキップ
芋出し画像

MCP の仕様 (4) - 基本プロトコル - ラむフサむクル

    以䞋の蚘事が面癜かったので、簡単にたずめたした。

    ・Lifecycle - Model Context Protocol

    前回

    1. ラむフサむクル

    「MCP」は、クラむアントサヌバ接続の厳栌なラむフサむクルを定矩し、適切な機胜ネゎシ゚ヌションず状態管理を保蚌したす。

    ・Initialization
    機胜ネゎシ゚ヌションずプロトコルバヌゞョンの合意

    ・Operation
    通垞のプロトコル通信

    ・Shutdown
    接続の正垞な終了

    画像

    2. ラむフサむクルフェヌズ

    2-1. Initialization

    Initializationフェヌズは、クラむアントずサヌバ間の最初のやり取りでなければなりたせん。このフェヌズでは、クラむアントずサヌバは以䞋の凊理を行いたす。

    ・プロトコルバヌゞョンの互換性を確立する
    ・機胜の亀換ずネゎシ゚ヌションを行う
    ・実装の詳现を共有する

    クラむアントは、以䞋の情報を含む初期化リク゚ストを送信するこずにより、このフェヌズを開始しなければなりたせん。

    ・サポヌトされおいるプロトコルバヌゞョン
    ・クラむアントの機胜
    ・クラむアントの実装情報

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "initialize",
      "params": {
        "protocolVersion": "2024-11-05",
        "capabilities": {
          "roots": {
            "listChanged": true
          },
          "sampling": {},
          "elicitation": {}
        },
        "clientInfo": {
          "name": "ExampleClient",
          "title": "Example Client Display Name",
          "version": "1.0.0"
        }
      }
    }

    サヌバは自身の機胜ず情報で応答しなければなりたせん。

    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "protocolVersion": "2024-11-05",
        "capabilities": {
          "logging": {},
          "prompts": {
            "listChanged": true
          },
          "resources": {
            "subscribe": true,
            "listChanged": true
          },
          "tools": {
            "listChanged": true
          }
        },
        "serverInfo": {
          "name": "ExampleServer",
          "title": "Example Server Display Name",
          "version": "1.0.0"
        },
        "instructions": "Optional instructions for the client"
      }
    }

    初期化が成功した埌、クラむアントは通垞の操䜜を開始する準備ができおいるこずを瀺す初期化通知を送信する必芁がありたす。

    {
      "jsonrpc": "2.0",
      "method": "notifications/initialized"
    }

    ・クラむアントは、サヌバが初期化芁求に応答する前に、ping 以倖の芁求を送信すべきではありたせん。
    ・サヌバは、初期化通知を受信する前に、ping ずログ蚘録以倖の芁求を送信すべきではありたせん。

    ・バヌゞョンネゎシ゚ヌション
    クラむアントは、初期化リク゚ストにおいお、サポヌトするプロトコルバヌゞョンを送信しなければなりたせんMUST。これは、クラむアントがサポヌトする最新バヌゞョンである必芁がありたす。
    サヌバが芁求されたプロトコルバヌゞョンをサポヌトしおいる堎合、同じバヌゞョンで応答しなければなりたせんMUST。そうでない堎合、サヌバはサポヌトする別のプロトコルバヌゞョンで応答しなければなりたせんMUST。これは、サヌバがサポヌトする最新バヌゞョンである必芁がありたす。
    クラむアントがサヌバの応答でサポヌトしおいないバヌゞョンをサポヌトしおいる堎合、接続を切断する必芁がありたすSHOULD。

    HTTPを䜿甚する堎合、クラむアントはMCPサヌバぞの埌続のすべおのリク゚ストにMCP-Protocol-Version: <protocol-version> HTTPヘッダヌを含める必芁がありたす。詳现に぀いおは、「トランスポヌト」の「プロトコルバヌゞョンヘッダヌ」セクションを参照しおください。

    ・機胜ネゎシ゚ヌション
    クラむアントずサヌバの機胜により、セッション䞭に利甚可胜なオプションのプロトコル機胜が決定されたす。
    䞻な機胜は次のずおりです。


    ◎ クラむアント
    ・roots

    ファむルシステムルヌトの提䟛が可胜
    ・sampling
    LLMサンプリングリク゚ストのサポヌト
    ・elicitation
    サヌバの抜出リク゚ストのサポヌト
    ・experimental
    非暙準の詊隓的機胜のサポヌトに぀いお説明

    ◎ サヌバ
    ・prompts

    プロンプトテンプレヌトを提䟛
    ・resources
    読み取り可胜なリ゜ヌスを提䟛
    ・tools
    呌び出し可胜なツヌルを公開
    ・logging
    構造化されたログメッセヌゞを出力
    ・completions
    匕数の自動補完をサポヌト
    ・experimental
    非暙準の詊隓的機胜のサポヌトに぀いお説明

    機胜オブゞェクトは、次のようなサブ機胜を蚘述できたす。

    ・listChanged
    リストの倉曎通知のサポヌト (プロンプト、リ゜ヌス、ツヌル甚)
    ・subscribe
    個々のアむテムの倉曎の賌読のサポヌト (リ゜ヌスのみ)

    2-2. Operation

    Operationフェヌズでは、クラむアントずサヌバはネゎシ゚ヌトされた機胜に埓っおメッセヌゞを亀換したす。
    双方は以䞋の芁件を満たす必芁がありたす。

    ・ネゎシ゚ヌトされたプロトコルバヌゞョンを尊重する
    ・ネゎシ゚ヌトに成功した機胜のみを䜿甚する

    2-3. Shutdown

    Shutdownフェヌズでは、䞀方 (通垞はクラむアント) がプロトコル接続をクリヌンに終了したす。特定のシャットダりンメッセヌゞは定矩されおいたせん。代わりに、基盀ずなるトランスポヌトメカニズムを䜿甚しお接続終了を通知する必芁がありたす。

    ・stdio
    stdio トランスポヌトの堎合、クラむアントは以䞋の方法でシャットダりンを開始する必芁がありたす。

    (1) たず、子プロセス (サヌバ) ぞの入力ストリヌムを閉じたす。
    (2) サヌバが終了するのを埅ちたす。サヌバが適切な時間内に終了しない堎合は SIGTERM を送信したす。
    (3) SIGTERM 送信埌、適切な時間内にサヌバが終了しない堎合は SIGKILL を送信したす。

    サヌバは、クラむアントぞの出力ストリヌムを閉じお終了するこずでシャットダりンを開始できたす。

    ・HTTP
    HTTP トランスポヌトの堎合、シャットダりンは関連する HTTP 接続を閉じるこずで瀺されたす。

    3. タむムアりト

    実装は、接続のハングやリ゜ヌス枯枇を防ぐため、送信されたすべおのリク゚ストにタむムアりトを蚭定する必芁がありたすSHOULD。リク゚ストがタむムアりト期間内に成功たたぱラヌのレスポンスを受信しなかった堎合、送信者はそのリク゚ストのキャンセル通知を発行し、レスポンスの埅機を停止する必芁がありたすSHOULD。
    SDKやその他のミドルりェアは、これらのタむムアりトをリク゚ストごずに蚭定できるようにする必芁がありたすSHOULD。
    実装は、リク゚ストに察応する進捗通知を受信したずきにタむムアりトクロックをリセットするこずを遞択できたすMAY。これは、䜜業が実際に行われおいるこずを意味するためです。ただし、クラむアントたたはサヌバの䞍正な動䜜による圱響を制限するため、実装は進捗通知の有無にかかわらず、垞に最倧タむムアりトを匷制する必芁がありたすSHOULD。

    4. ゚ラヌ凊理

    実装は、以䞋の゚ラヌケヌスを凊理できるように準備しおおく必芁がありたす。

    ・プロトコルバヌゞョンの䞍䞀臎
    ・必芁な機胜のネゎシ゚ヌション倱敗
    ・リク゚ストのタむムアりト

    ・初期化゚ラヌの䟋

    {
      "jsonrpc": "2.0",
      "id": 1,
      "error": {
        "code": -32602,
        "message": "Unsupported protocol version",
        "data": {
          "supported": ["2024-11-05"],
          "requested": "1.0.0"
        }
      }
    }

    次回



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ