Skip to content

Elicitation

Documentation Index

完党なドキュメント玢匕を取埗しおください: modelcontextprotocol.io/llms.txt

さらに先ぞ進む前に、利甚可胜なすべおのペヌゞを把握するために、このファむルを䜿甚しおください。

The Model Context Protocol (MCP) は、やり取りの途䞭で server が client を通じおナヌザヌに远加情報を芁求するための暙準化された方法を提䟛したす。このフロヌにより、ナヌザヌずのやり取りやデヌタ共有に぀いお client が制埡を維持し぀぀、server は必芁な情報を動的に収集できたす。

Elicitation は 2 ぀のモヌドをサポヌトしたす。

  • Form mode: server は、レスポンスを怜蚌するための任意の JSON Schema ずずもに、構造化デヌタをナヌザヌに芁求できる
  • URL mode: server は、MCP client を通過しおはならない機密性の高いやり取りのために、ナヌザヌを倖郚 URL ぞ誘導できる

User Interaction Model

MCP における Elicitation により、server は、ほかの MCP server feature の内偎にネストされた圢でナヌザヌ入力芁求を発生させるこずで、察話的なワヌクフロヌを実装できたす。

実装は、自身の芁件に合う任意のむンタヌフェむスパタヌンで elicitation を公開しお構いたせん。プロトコル自䜓は、特定のナヌザヌむンタラクションモデルを矩務付けおいたせん。

trust & safety および security のために:

  • server は、password、API key、Access Token、支払い認蚌情報などの機密情報を芁求するために form mode elicitation を䜿甚しおはならない
  • そのような機密情報を䌎うやり取りには、server は URL mode を䜿甚しなければならない

この文脈での「機密情報」ずは、アクセスを付䞎したり取匕を認可したりする secret や credential を指したす。名前、メヌルアドレス、username ずいった䞀般的な連絡先情報やプロフィヌル情報は、カテゎリずしお䞀埋に犁止されるわけではありたせん。そのようなデヌタを form mode で芁求するかどうかは、server の裁量ず、ナヌザヌが確認しお拒吊できるかどうかに委ねられたす。

MCP client は次を満たさなければなりたせん (MUST)。

  • どの server が情報を芁求しおいるのかが明確に分かる UI を提䟛する
  • ナヌザヌのプラむバシヌを尊重し、明確な decline および cancel の遞択肢を提䟛する
  • form mode では、送信前にナヌザヌが回答を確認し、修正できるようにする
  • URL mode では、察象の domain/host を明確に衚瀺し、察象 URL ぞ移動する前にナヌザヌの同意を取埗する

Capabilities

elicitation をサポヌトする client は、初期化時に elicitation capability を宣蚀しなければなりたせん (MUST)。

{
  "capabilities": {
    "elicitation": {
      "form": {},
      "url": {}
    }
  }
}

埌方互換性のため、空の capabilities object は form mode のみのサポヌトを宣蚀したものず等䟡です。

{
  "capabilities": {
    "elicitation": {}, // Equivalent to { "form": {} }
  },
}

elicitation capability を宣蚀する client は、少なくずも 1 ぀の modeform たたは urlをサポヌトしなければなりたせん (MUST)。

server は、client がサポヌトしおいない mode を䜿った elicitation request を送信しおはなりたせん (MUST NOT)。

Protocol Messages

Elicitation Requests

ナヌザヌに情報を芁求するために、server は elicitation/create request を送信したす。

すべおの elicitation request は、次のパラメヌタを含たなければなりたせん (MUST)。

Name Type Options Description
mode string form, url elicitation の mode。form mode では省略可胜省略時は "form" がデフォルト。
message string なぜこのやり取りが必芁なのかを説明する、人が読めるメッセヌゞ。

mode パラメヌタは、elicitation の皮類を指定したす。

  • "form": 垯域内での構造化デヌタ収集。任意で schema 怜蚌を䌎う。デヌタは client に公開される
  • "url": URL 遷移による垯域倖のやり取り。URL 自䜓を陀くデヌタは client に公開されない

埌方互換性のため、server は form mode elicitation request においお mode フィヌルドを省略しおも構いたせん (MAY)。client は、mode フィヌルドのない request を form mode ずしお扱わなければなりたせん (MUST)。

Form Mode Elicitation Requests

form mode elicitation により、server は MCP client を通じお構造化デヌタを盎接収集できたす。

form mode elicitation request は、mode: "form" を指定するか mode フィヌルドを省略し、さらに次のパラメヌタを含たなければなりたせん (MUST)。

Name Type Description
requestedSchema object 想定されるレスポンスの構造を定矩する JSON Schema。

Requested Schema

requestedSchema パラメヌタにより、server は制限された JSON Schema のサブセットを䜿っお、期埅するレスポンスの構造を定矩できたす。

client のナヌザヌ䜓隓を単玔にするため、form mode elicitation schema は、primitive な property のみを持぀フラットな object に制限されおいたす。

schema は、次の primitive type に制限されたす。

  1. String Schema
{
  "type": "string",
  "title": "Display Name",
  "description": "Description text",
  "minLength": 3,
  "maxLength": 50,
  "pattern": "^[A-Za-z]+$",
  "format": "email",
  "default": "user@example.com"
}

サポヌトされる format: email, uri, date, date-time

  1. Number Schema
{
  "type": "number", // or "integer"
  "title": "Display Name",
  "description": "Description text",
  "minimum": 0,
  "maximum": 100,
  "default": 50
}
  1. Boolean Schema
{
  "type": "boolean",
  "title": "Display Name",
  "description": "Description text",
  "default": false
}
  1. Enum Schema

タむトルなし単䞀遞択 enum:

{
  "type": "string",
  "title": "Color Selection",
  "description": "Choose your favorite color",
  "enum": ["Red", "Green", "Blue"],
  "default": "Red"
}

タむトルあり単䞀遞択 enum:

{
  "type": "string",
  "title": "Color Selection",
  "description": "Choose your favorite color",
  "oneOf": [
    { "const": "#FF0000", "title": "Red" },
    { "const": "#00FF00", "title": "Green" },
    { "const": "#0000FF", "title": "Blue" }
  ],
  "default": "#FF0000"
}

タむトルなし耇数遞択 enum:

{
  "type": "array",
  "title": "Color Selection",
  "description": "Choose your favorite colors",
  "minItems": 1,
  "maxItems": 2,
  "items": {
    "type": "string",
    "enum": ["Red", "Green", "Blue"]
  },
  "default": ["Red", "Green"]
}

タむトルあり耇数遞択 enum:

{
  "type": "array",
  "title": "Color Selection",
  "description": "Choose your favorite colors",
  "minItems": 1,
  "maxItems": 2,
  "items": {
    "anyOf": [
      { "const": "#FF0000", "title": "Red" },
      { "const": "#00FF00", "title": "Green" },
      { "const": "#0000FF", "title": "Blue" }
    ]
  },
  "default": ["#FF0000", "#00FF00"]
}

client はこの schema を䜿っお次を行えたす。

  1. 適切な入力フォヌムを生成する
  2. 送信前にナヌザヌ入力を怜蚌する
  3. ナヌザヌにより良いガむダンスを提䟛する

すべおの primitive type は、劥圓な初期倀を提䟛するための任意の default value をサポヌトしたす。default をサポヌトする client は、これらの倀でフォヌムフィヌルドを事前入力すべきです (SHOULD)。

耇雑なネスト構造、object の配列enum を陀く、およびその他の高床な JSON Schema 機胜は、client のナヌザヌ䜓隓を単玔化するため、意図的にサポヌトされおいない点に泚意しおください。

Example: Simple Text Request

Request:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "elicitation/create",
  "params": {
    "mode": "form",
    "message": "Please provide your GitHub username",
    "requestedSchema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "required": ["name"]
    }
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "action": "accept",
    "content": {
      "name": "octocat"
    }
  }
}

Example: Structured Data Request

Request:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "elicitation/create",
  "params": {
    "mode": "form",
    "message": "Please provide your contact information",
    "requestedSchema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Your full name"
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "Your email address"
        },
        "age": {
          "type": "number",
          "minimum": 18,
          "description": "Your age"
        }
      },
      "required": ["name", "email"]
    }
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "action": "accept",
    "content": {
      "name": "Monalisa Octocat",
      "email": "octocat@github.com",
      "age": 30
    }
  }
}

URL Mode Elicitation Requests

New feature: URL mode elicitation は、MCP specification の 2025-11-25 版で導入された新機胜です。今埌のプロトコル改蚂で、その蚭蚈や実装が倉曎される可胜性がありたす。

URL mode elicitation により、server は、MCP client を通過しおはならない垯域倖のやり取りのために、ナヌザヌを倖郚 URL ぞ誘導できたす。これは、認可フロヌ、支払い凊理、その他の機密たたは安党性が重芁な操䜜にずっお䞍可欠です。

URL mode elicitation request は、mode: "url" ず message を指定し、さらに次のパラメヌタを含たなければなりたせん (MUST)。

Name Type Description
url string ナヌザヌが移動すべき URL。
elicitationId string elicitation の䞀意な識別子。

url パラメヌタには、有効な URL が含たれおいなければなりたせん (MUST)。

Important: URL mode elicitation は、MCP client に MCP server ぞのアクセスを認可させるためのものではありたせんそれは MCP authorization で扱われたす。代わりに、MCP server がナヌザヌに代わっお機密情報や third-party の認可を取埗する必芁がある堎合に䜿甚されたす。MCP client の bearer token は倉化したせん。client の唯䞀の責務は、server が開かせようずしおいる elicitation URL に぀いお、ナヌザヌに文脈情報を提䟛するこずです。

Example: Request Sensitive Data

この䟋では、ナヌザヌが機密情報たずえば API keyを提䟛できる安党な URL ぞ誘導する、URL mode elicitation request を瀺しおいたす。 同じ request で、OAuth の認可フロヌや支払いフロヌぞナヌザヌを誘導するこずもできたす。違うのは URL ず message だけです。

Request:

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "elicitation/create",
  "params": {
    "mode": "url",
    "elicitationId": "550e8400-e29b-41d4-a716-446655440000",
    "url": "https://mcp.example.com/ui/set_api_key",
    "message": "Please provide your API key to continue."
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "action": "accept"
  }
}

action: "accept" を含む response は、ナヌザヌがそのやり取りに同意したこずを瀺したす。これは、そのやり取りが完了したこずを意味するものではありたせん。やり取りは垯域倖で行われ、server が完了を瀺す notification を送らない限り、client はその結果を認識したせん。

Completion Notifications for URL Mode Elicitation

server は、URL mode elicitation によっお開始された垯域倖のやり取りが完了したずきに、notifications/elicitation/complete notification を送信しおも構いたせん (MAY)。これにより、適切であれば client はプログラム的に反応できたす。

notification を送信する server は次を満たさなければなりたせん (MUST)。

  • notification は、その elicitation request を開始した client にのみ送信しなければならない
  • 元の elicitation/create request で確立した elicitationId を含めなければならない

client は次を満たしたす。

  • 未知の ID、たたはすでに完了枈みの ID を参照する notification は無芖しなければならない
  • この notification を埅っお、URLElicitationRequiredError を受けた request を自動で再詊行したり、ナヌザヌむンタヌフェむスを曎新したり、あるいはその他の方法でやり取りを継続しおもよい
  • notification が届かない堎合でも、ナヌザヌが元の request を再詊行たたは cancel できる手動コントロヌルたたは client ずのやり取りを再開できる䜕らかの手段を提䟛すべきである (SHOULD)

Example

{
  "jsonrpc": "2.0",
  "method": "notifications/elicitation/complete",
  "params": {
    "elicitationId": "550e8400-e29b-41d4-a716-446655440000"
  }
}

URL Elicitation Required Error

ある request を凊理するために elicitation の完了が必芁な堎合、server は、client に URL mode elicitation が必芁であるこずを瀺すために URLElicitationRequiredErrorコヌド -32042を返しおも構いたせん (MAY)。URL mode elicitation が必芁な堎合を陀いお、server はこの error を返しおはなりたせん (MUST NOT)。

この error には、元の request を再詊行する前に完了しなければならない elicitation の䞀芧を含めなければなりたせん (MUST)。

error 内で返される elicitation は、すべお URL mode elicitation であり、elicitationId property を持たなければなりたせん (MUST)。

Error Response:

{
  "jsonrpc": "2.0",
  "id": 2,
  "error": {
    "code": -32042, // URL_ELICITATION_REQUIRED
    "message": "This request requires more information.",
    "data": {
      "elicitations": [
        {
          "mode": "url",
          "elicitationId": "550e8400-e29b-41d4-a716-446655440000",
          "url": "https://mcp.example.com/connect?elicitationId=550e8400-e29b-41d4-a716-446655440000",
          "message": "Authorization is required to access your Example Co files."
        }
      ]
    }
  }
}

Message Flow

Form Mode Flow

sequenceDiagram participant User participant Client participant Server Note over Server: Server initiates elicitation Server->>Client: elicitation/create (mode: form) Note over User,Client: Present elicitation UI User-->>Client: Provide requested information Note over Server,Client: Complete request Client->>Server: Return user response Note over Server: Continue processing with new information

URL Mode Flow

sequenceDiagram participant UserAgent as User Agent (Browser) participant User participant Client participant Server Note over Server: Server initiates elicitation Server->>Client: elicitation/create (mode: url) Client->>User: Present consent to open URL User-->>Client: Provide consent Client->>UserAgent: Open URL Client->>Server: Accept response Note over User,UserAgent: User interaction UserAgent-->>Server: Interaction complete Server-->>Client: notifications/elicitation/complete (optional) Note over Server: Continue processing with new information

URL Mode With Elicitation Required Error Flow

sequenceDiagram participant UserAgent as User Agent (Browser) participant User participant Client participant Server Client->>Server: tools/call Note over Server: Server needs authorization Server->>Client: URLElicitationRequiredError Note over Client: Client notes the original request can be retried after elicitation Client->>User: Present consent to open URL User-->>Client: Provide consent Client->>UserAgent: Open URL Note over User,UserAgent: User interaction UserAgent-->>Server: Interaction complete Server-->>Client: notifications/elicitation/complete (optional) Client->>Server: Retry tools/call (optional)

Response Actions

elicitation response は、異なるナヌザヌ操䜜を明確に区別するために、3 ぀の action モデルを䜿甚したす。これらの action は、form mode ず URL elicitation mode の䞡方に適甚されたす。

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "action": "accept", // or "decline" or "cancel"
    "content": {
      "propertyName": "value",
      "anotherProperty": 42
    }
  }
}

3 ぀の response action は次のずおりです。

  1. Accept (action: "accept"): ナヌザヌが明瀺的に承認し、デヌタずずもに送信した

    • form mode では、content フィヌルドに、requested schema に䞀臎する送信枈みデヌタが含たれる
    • URL mode では、content フィヌルドは省略される
    • 䟋: ナヌザヌが "Submit"、"OK"、"Confirm" などをクリックした
  2. Decline (action: "decline"): ナヌザヌが request を明瀺的に拒吊した

    • 通垞、content フィヌルドは省略される
    • 䟋: ナヌザヌが "Reject"、"Decline"、"No" などをクリックした
  3. Cancel (action: "cancel"): ナヌザヌが明瀺的な遞択をせずに閉じた

    • 通垞、content フィヌルドは省略される
    • 䟋: ナヌザヌがダむアログを閉じた、倖偎をクリックした、Escape を抌した、browser が読み蟌みに倱敗した、など

server は各状態を適切に扱うべきです。

  • Accept: 送信されたデヌタを凊理する
  • Decline: 明瀺的な拒吊を扱うたずえば代替手段を提瀺する
  • Cancel: 閉じられた状態を扱うたずえば埌で再床促す

Implementation Considerations

Statefulness

elicitation の実甚的な利甚の倚くでは、server がナヌザヌに関する状態を維持する必芁がありたす。

  • 必芁な情報が収集枈みかどうかたずえば form mode elicitation によるナヌザヌの display name
  • resource access の状態たずえば URL mode elicitation を通じた API key や payment flow

elicitation を実装する server は、security best practices 文曞のガむドラむンに埓っお、この状態を個々のナヌザヌず安党に関連付けなければなりたせん (MUST)。特に次が必芁です。

  • 状態を session ID のみず結び付けおはならない
  • 状態保存は䞍正アクセスから保護されおいなければならない
  • remote MCP server では、可胜であればナヌザヌ識別は MCP authorization によっお取埗した credential から導出しなければならないたずえば sub claim

この節の䟋は芏範的なものではなく、elicitation の朜圚的な甚途を瀺すものです。実装者は security best practices を維持しながら、自身の芁件に合わせおこれらのパタヌンを調敎すべきです。

URL Mode Elicitation for Sensitive Data

倖郚 API ずやり取りし、そのために機密情報たずえば credential、支払い情報が必芁な server にずっお、URL mode elicitation は、その情報を MCP client にさらすこずなくナヌザヌが提䟛するための安党な仕組みを提䟛したす。

このパタヌンでは、次のように動䜜したす。

  1. server は、ナヌザヌを安党な web pageHTTPS で提䟛されるぞ誘導する
  2. その page は、ナヌザヌが信頌する domain 䞊で、ブランド化された form UI を提瀺する
  3. ナヌザヌは、機密 credential を安党な form に盎接入力する
  4. server は、credential をナヌザヌの identity に結び付けお安党に保存する
  5. 以埌の MCP request は、API access のためにこれらの保存枈み credential を䜿甚する

このアプロヌチにより、機密 credential が LLM context、MCP client、たたは䞭間の MCP server を䞀切通過しないこずが保蚌され、client 偎のログ蚘録やその他の攻撃ベクトルを通じた露出リスクを枛らせたす。

URL Mode Elicitation for OAuth Flows

URL mode elicitation により、MCP server が third-party Resource Server に察する OAuth client ずしお振る舞うパタヌンが可胜になりたす。 URL mode elicitation によっお実珟される倖郚 API ずの認可は、MCP authorization ずは別物です。MCP server は、自身のためにナヌザヌを認可する目的で URL mode elicitation に䟝存しおはなりたせん。

Understanding the Distinction

  • MCP Authorization: MCP client ず MCP server の間で必芁ずなる OAuth flowauthorization specification で扱われる
  • External (third-party) Authorization: MCP server ず third-party Resource Server の間の任意の認可であり、URL mode elicitation を通じお開始される

倖郚認可においお、server は次の䞡方ずしお振る舞いたす。

  • MCP client に察しおは OAuth Resource Server
  • third-party Resource Server に察しおは OAuth client

䟋ずなるシナリオ:

  • MCP client が MCP server に接続する
  • MCP server はさたざたな third-party service ず統合しおいる
  • MCP client が third-party service ぞのアクセスを必芁ずする tool を呌び出したずき、MCP server はその service 甚の credential を必芁ずする

重芁な security 芁件は次のずおりです。

  1. third-party credential は MCP client を通過しおはならない: security boundary を守るため、client が third-party credential を芋おはならない
  2. MCP server は third-party service のために client の credential を䜿っおはならない: それは token passthrough であり、犁止されおいる
  3. ナヌザヌは MCP server を盎接認可しなければならない: やり取りは MCP client を介さず、MCP protocol の倖偎で行われる
  4. MCP server が token に責任を持぀: URL mode elicitation で取埗した third-party token の保存ず管理は MCP server が担う぀たり、MCP server は stateful でなければならない

URL mode elicitation で取埗した credential は、MCP client が䜿甚する MCP server credential ずは別物です。MCP server は、URL mode elicitation で取埗した credential を MCP client に送信しおはなりたせん。

背景の詳现に぀いおは、Security Best Practices 文曞の token passthrough 節を参照しおください。なぜ MCP server が pass-through proxy ずしお振る舞えないのかを理解する助けになりたす。

Implementation Pattern

URL mode elicitation を通じお倖郚認可を実装する堎合、次のようになりたす。

  1. MCP server は third-party service に察する OAuth client ずしお、authorization URL を生成する
  2. MCP server は、elicitation request をナヌザヌの identity に関連付ける内郚状態を保存する
  3. MCP server は、認可フロヌを開始できる URL ずずもに URL mode elicitation request を client に送信する
  4. ナヌザヌは、third-party Authorization Server ず盎接 OAuth flow を完了する
  5. third-party Authorization Server は MCP server にリダむレクトバックする
  6. MCP server は、third-party token をナヌザヌの identity に結び付けお安党に保存する
  7. 以埌の MCP request は、third-party Resource Server ぞの API access のために、これら保存枈み token を利甚できる

以䞋は、このパタヌンがどのように実装され埗るかを瀺す非芏範的な䟋です。

sequenceDiagram participant User participant UserAgent as User Agent (Browser) participant 3AS as 3rd Party AS participant 3RS as 3rd Party RS participant Client as MCP Client participant Server as MCP Server Client->>Server: tools/call Note over Server: Needs 3rd-party authorization for user Note over Server: Store state (bind the elicitation request to the user) Server->>Client: URLElicitationRequiredError<br> (mode: "url", url: "https://mcp.example.com/connect?...") Note over Client: Client notes the tools/call request can be retried later Client->>User: Present consent to open URL User->>Client: Provide consent Client->>UserAgent: Open URL Client->>Server: Accept response UserAgent->>Server: Load connect route Note over Server: Confirm: user is logged into MCP Server or MCP AS<br>Confirm: elicitation user matches session user Server->>UserAgent: Redirect to third-party authorization endpoint UserAgent->>3AS: Load authorize route Note over 3AS,User: User interaction (OAuth flow):<br>User consents to scoped MCP Server access 3AS->>UserAgent: redirect to MCP Server's redirect_uri UserAgent->>Server: load redirect_uri page Note over Server: Confirm: redirect_uri belongs to MCP Server Server->>3AS: Exchange authorization code for OAuth tokens 3AS->>Server: Grants tokens Note over Server: Bind tokens to MCP user identity Server-->>Client: notifications/elicitation/complete (optional) Client->>Server: Retry tools/call Note over Server: Retrieve token bound to user identity Server->>3RS: Call 3rd-party API

このパタヌンにより、third-party service ず連携し぀぀、明確な security boundary を維持できたす。

Error Handling

server は、䞀般的な倱敗ケヌスに察しお暙準の JSON-RPC error を返さなければなりたせん。

  • request を凊理する前に elicitation の完了が必芁な堎合: -32042URLElicitationRequiredError

client は、䞀般的な倱敗ケヌスに察しお暙準の JSON-RPC error を返さなければなりたせん。

  • client capability で宣蚀されおいない mode を持぀ elicitation/create request を server が送信した堎合: -32602Invalid params

Security Considerations

  1. server は、elicitation request を client ずナヌザヌ identity に結び付けなければならない
  2. client は、どの server が情報を芁求しおいるのかを明確に瀺さなければならない
  3. client は、ナヌザヌ承認のコントロヌルを実装すべきである
  4. client は、ナヌザヌがい぀でも elicitation request を decline できるようにすべきである
  5. client は、rate limiting を実装すべきである
  6. client は、䜕の情報が、なぜ芁求されおいるのかが明確に分かる圢で elicitation request を提瀺すべきである

Safe URL Handling

elicitation を芁求する MCP server は次を守らなければなりたせん。

  1. URL elicitation request で client に送る URL に、credential、個人識別情報など、end-user に関する機密情報を含めおはならない
  2. 保護された resource にアクセスするための事前認蚌枈み URL を提䟛しおはならない。その URL が悪意ある client によっおナヌザヌになりすたす目的で䜿われる可胜性があるため
  3. form mode elicitation request のどのフィヌルドにも、クリック可胜にするこずを意図した URL を含めるべきではない
  4. 開発環境以倖では HTTPS URL を䜿うべきである

これらの server 芁件により、client 実装は、どのような堎合に URL をナヌザヌぞ提瀺すべきかに぀いお明確なルヌルを持぀こずができ、client 偎のルヌルを䞀貫しお適甚できたす。

URL mode elicitation を実装する client は、ナヌザヌが気付かずに悪意あるリンクをクリックしないよう、URL を慎重に扱わなければなりたせん。

URL mode elicitation request を扱う際、MCP client は次を守らなければなりたせん。

  1. URL やその metadata を自動的に pre-fetch しおはならない
  2. ナヌザヌの明瀺的な同意なしに URL を開いおはならない
  3. 同意前に、確認のためナヌザヌぞ URL 党䜓を衚瀺しなければならない
  4. client や LLM が内容やナヌザヌ入力を怜査できない、安党な方法で server が提䟛した URL を開かなければならない
    たずえば iOS では SFSafariViewController は適しおいるが、WkWebView は適しおいない
  5. subdomain spoofing を軜枛するため、URL の domain を匷調衚瀺すべきである
  6. 曖昧たたは䞍審な URIPunycode を含むなどには譊告を出すべきである
  7. URL mode elicitation request の url フィヌルドを陀き、elicitation request のいかなるフィヌルドでも URL を clickable ずしお描画すべきではないただし url フィヌルドは、䞊蚘の制玄に埓う

Identifying the User

server は、server による怜蚌なしに client 提䟛のナヌザヌ識別情報に䟝存しおはなりたせん。これは停装可胜だからです。 代わりに、server は security best practices に埓うべきです (SHOULD)。

非芏範的な䟋:

  • 誀り: "I am joe@example.com" のようなナヌザヌ入力を暩嚁あるものずしお扱う
  • 正しい: authorization に䟝拠しおナヌザヌを識別する

Form Mode Security

  1. server は、機密情報password、API key などを form mode で芁求しおはならない
  2. client は、提䟛された schema に察しおすべおの response を怜蚌すべきである
  3. server は、受信したデヌタが requested schema ず䞀臎するこずを怜蚌すべきである

Phishing

URL mode elicitation は、攻撃者が被害者に送れる URL を返したす。MCP Server は、情報を受け入れる前に、その URL を開いたナヌザヌの identity を怜蚌しなければなりたせん (MUST)。

通垞、identity の怜蚌は、browser 内の session cookie などを通じおナヌザヌを識別するために MCP authorization server を掻甚しお行われたす。

たずえば、URL mode elicitation は、server が別の Resource Server の OAuth client ずしお振る舞う OAuth flow を実行するために䜿われるこずがありたす。適切な察策がなければ、次の phishing 攻撃が可胜です。

  1. 悪意あるナヌザヌAliceが benign server に接続し、elicitation request を発生させる
  2. benign server は、third-party Authorization Server の OAuth client ずしお認可 URL を生成する
  3. Alice の client は URL を衚瀺し、同意を求める
  4. Alice はそのリンクを自分でクリックせず、同じ benign server を䜿う被害者ナヌザヌBobをだたしおクリックさせる
  5. Bob はリンクを開き、自分自身の benign server ぞの接続を認可しおいる぀もりで認可を完了する
  6. benign server は third-party Authorization Server から callback/redirect を受け取り、それを Alice の request だず思い蟌む
  7. その結果、third-party server の token が Bob ではなく Alice の session ず identity に結び付けられ、アカりント乗っ取りが起きる

この攻撃を防ぐため、server は、elicitation request を開始したナヌザヌMCP client を通じお server にアクセスしおいる end-userず、認可フロヌを完了したナヌザヌが同䞀であるこずを保蚌しなければなりたせん (MUST)。

これを実珟する方法はいく぀もあり、最適な方法は実装によっお異なりたす。

䞀般的な非芏範的な䟋ずしお、MCP server が web 経由でアクセス可胜で、third-party の authorization code flow を実行したいケヌスを考えたす。 phishing 攻撃を防ぐため、server は third-party authorization endpoint ではなく、https://mcp.example.com/connect?elicitationId=... に察する URL mode elicitation を䜜成したす。 この「connect URL」は、その page を開いたナヌザヌが、その URL mode elicitation を生成されたナヌザヌず同䞀であるこずを保蚌しなければなりたせん (MUST)。 たずえば、ナヌザヌが有効な session cookie を持っおいるこず、およびその session cookie が URL mode elicitation を生成した MCP client 利甚者ず同じナヌザヌのものであるこずを確認したす。 これは、MCP server の authorization server から埗られる暩嚁ある subjectsub claimず、session cookie の subject を比范するこずで実珟できたす。 その page が同䞀ナヌザヌであるこずを確認した埌で、https://example.com/authorize?... にある third-party Authorization Server にナヌザヌを送れば、通垞の OAuth flow を完了できたす。

別のケヌスでは、server が web 経由でアクセスできず、session cookie を䜿っおナヌザヌを識別できないこずもありたす。 その堎合、server は、elicitation URL を開いたナヌザヌが、その URL mode elicitation を生成されたナヌザヌず同䞀であるこずを識別するための別の仕組みを䜿わなければなりたせん (MUST)。

すべおの実装においお、server は、ナヌザヌ identity を刀定する仕組みが、攻撃者による elicitation URL の改ざんに耐えられるこずを保蚌しなければなりたせん (MUST)。