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 ã«å¶éãããŸãã
- 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
- Number Schema
{
"type": "number", // or "integer"
"title": "Display Name",
"description": "Description text",
"minimum": 0,
"maximum": 100,
"default": 50
}
- Boolean Schema
{
"type": "boolean",
"title": "Display Name",
"description": "Description text",
"default": false
}
- 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 ã䜿ã£ãŠæ¬¡ãè¡ããŸãã
- é©åãªå ¥åãã©ãŒã ãçæãã
- éä¿¡åã«ãŠãŒã¶ãŒå ¥åãæ€èšŒãã
- ãŠãŒã¶ãŒã«ããè¯ãã¬ã€ãã³ã¹ãæäŸãã
ãã¹ãŠã® 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/createrequest ã§ç¢ºç«ãã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
URL Mode Flow
URL Mode With Elicitation Required Error Flow
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 ã¯æ¬¡ã®ãšããã§ãã
-
Accept (
action: "accept"): ãŠãŒã¶ãŒãæç€ºçã«æ¿èªããããŒã¿ãšãšãã«éä¿¡ãã- form mode ã§ã¯ã
contentãã£ãŒã«ãã«ãrequested schema ã«äžèŽããéä¿¡æžã¿ããŒã¿ãå«ãŸãã - URL mode ã§ã¯ã
contentãã£ãŒã«ãã¯çç¥ããã - äŸ: ãŠãŒã¶ãŒã "Submit"ã"OK"ã"Confirm" ãªã©ãã¯ãªãã¯ãã
- form mode ã§ã¯ã
-
Decline (
action: "decline"): ãŠãŒã¶ãŒã request ãæç€ºçã«æåŠãã- éåžžã
contentãã£ãŒã«ãã¯çç¥ããã - äŸ: ãŠãŒã¶ãŒã "Reject"ã"Decline"ã"No" ãªã©ãã¯ãªãã¯ãã
- éåžžã
-
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 ããå°åºããªããã°ãªããªãïŒããšãã°
subclaimïŒ
ãã®ç¯ã®äŸã¯èŠç¯çãªãã®ã§ã¯ãªããelicitation ã®æœåšçãªçšéã瀺ããã®ã§ããå®è£ è 㯠security best practices ãç¶æããªãããèªèº«ã®èŠä»¶ã«åãããŠãããã®ãã¿ãŒã³ã調æŽãã¹ãã§ãã
URL Mode Elicitation for Sensitive Data
å€éš API ãšããåããããã®ããã«æ©å¯æ å ±ïŒããšãã° credentialãæ¯æãæ å ±ïŒãå¿ èŠãª server ã«ãšã£ãŠãURL mode elicitation ã¯ããã®æ å ±ã MCP client ã«ãããããšãªããŠãŒã¶ãŒãæäŸããããã®å®å šãªä»çµã¿ãæäŸããŸãã
ãã®ãã¿ãŒã³ã§ã¯ã次ã®ããã«åäœããŸãã
- server ã¯ããŠãŒã¶ãŒãå®å šãª web pageïŒHTTPS ã§æäŸãããïŒãžèªå°ãã
- ãã® page ã¯ããŠãŒã¶ãŒãä¿¡é Œãã domain äžã§ããã©ã³ãåããã form UI ãæç€ºãã
- ãŠãŒã¶ãŒã¯ãæ©å¯ credential ãå®å šãª form ã«çŽæ¥å ¥åãã
- server ã¯ãcredential ããŠãŒã¶ãŒã® identity ã«çµã³ä»ããŠå®å šã«ä¿åãã
- 以åŸã® 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 èŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- third-party credential 㯠MCP client ãééããŠã¯ãªããªã: security boundary ãå®ããããclient ã third-party credential ãèŠãŠã¯ãªããªã
- MCP server 㯠third-party service ã®ããã« client ã® credential ã䜿ã£ãŠã¯ãªããªã: ãã㯠token passthrough ã§ãããçŠæ¢ãããŠãã
- ãŠãŒã¶ãŒã¯ MCP server ãçŽæ¥èªå¯ããªããã°ãªããªã: ããåã㯠MCP client ãä»ãããMCP protocol ã®å€åŽã§è¡ããã
- 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 ãéããŠå€éšèªå¯ãå®è£ ããå Žåãæ¬¡ã®ããã«ãªããŸãã
- MCP server 㯠third-party service ã«å¯Ÿãã OAuth client ãšããŠãauthorization URL ãçæãã
- MCP server ã¯ãelicitation request ããŠãŒã¶ãŒã® identity ã«é¢é£ä»ããå éšç¶æ ãä¿åãã
- MCP server ã¯ãèªå¯ãããŒãéå§ã§ãã URL ãšãšãã« URL mode elicitation request ã client ã«éä¿¡ãã
- ãŠãŒã¶ãŒã¯ãthird-party Authorization Server ãšçŽæ¥ OAuth flow ãå®äºãã
- third-party Authorization Server 㯠MCP server ã«ãªãã€ã¬ã¯ãããã¯ãã
- MCP server ã¯ãthird-party token ããŠãŒã¶ãŒã® identity ã«çµã³ä»ããŠå®å šã«ä¿åãã
- 以åŸã® MCP request ã¯ãthird-party Resource Server ãžã® API access ã®ããã«ããããä¿åæžã¿ token ãå©çšã§ãã
以äžã¯ããã®ãã¿ãŒã³ãã©ã®ããã«å®è£ ããåŸããã瀺ãéèŠç¯çãªäŸã§ãã
ãã®ãã¿ãŒã³ã«ãããthird-party service ãšé£æºãã€ã€ãæç¢ºãª security boundary ãç¶æã§ããŸãã
Error Handling
server ã¯ãäžè¬çãªå€±æã±ãŒã¹ã«å¯ŸããŠæšæºã® JSON-RPC error ãè¿ããªããã°ãªããŸããã
- request ãåŠçããåã« elicitation ã®å®äºãå¿
èŠãªå Žå:
-32042ïŒURLElicitationRequiredErrorïŒ
client ã¯ãäžè¬çãªå€±æã±ãŒã¹ã«å¯ŸããŠæšæºã® JSON-RPC error ãè¿ããªããã°ãªããŸããã
- client capability ã§å®£èšãããŠããªã mode ãæã€
elicitation/createrequest ã server ãéä¿¡ããå Žå:-32602ïŒInvalid paramsïŒ
Security Considerations
- server ã¯ãelicitation request ã client ãšãŠãŒã¶ãŒ identity ã«çµã³ä»ããªããã°ãªããªã
- client ã¯ãã©ã® server ãæ å ±ãèŠæ±ããŠããã®ããæç¢ºã«ç€ºããªããã°ãªããªã
- client ã¯ããŠãŒã¶ãŒæ¿èªã®ã³ã³ãããŒã«ãå®è£ ãã¹ãã§ãã
- client ã¯ããŠãŒã¶ãŒããã€ã§ã elicitation request ã decline ã§ããããã«ãã¹ãã§ãã
- client ã¯ãrate limiting ãå®è£ ãã¹ãã§ãã
- client ã¯ãäœã®æ å ±ãããªãèŠæ±ãããŠããã®ããæç¢ºã«åãã圢㧠elicitation request ãæç€ºãã¹ãã§ãã
Safe URL Handling
elicitation ãèŠæ±ãã MCP server ã¯æ¬¡ãå®ããªããã°ãªããŸããã
- URL elicitation request ã§ client ã«éã URL ã«ãcredentialãå人è奿 å ±ãªã©ãend-user ã«é¢ããæ©å¯æ å ±ãå«ããŠã¯ãªããªã
- ä¿è·ããã resource ã«ã¢ã¯ã»ã¹ããããã®äºåèªèšŒæžã¿ URL ãæäŸããŠã¯ãªããªãããã® URL ãæªæãã client ã«ãã£ãŠãŠãŒã¶ãŒã«ãªãããŸãç®çã§äœ¿ãããå¯èœæ§ããããã
- form mode elicitation request ã®ã©ã®ãã£ãŒã«ãã«ããã¯ãªãã¯å¯èœã«ããããšãæå³ãã URL ãå«ããã¹ãã§ã¯ãªã
- éçºç°å¢ä»¥å€ã§ã¯ HTTPS URL ã䜿ãã¹ãã§ãã
ãããã® server èŠä»¶ã«ãããclient å®è£ ã¯ãã©ã®ãããªå Žåã« URL ããŠãŒã¶ãŒãžæç€ºãã¹ããã«ã€ããŠæç¢ºãªã«ãŒã«ãæã€ããšãã§ããclient åŽã®ã«ãŒã«ãäžè²«ããŠé©çšã§ããŸãã
URL mode elicitation ãå®è£ ãã client ã¯ããŠãŒã¶ãŒãæ°ä»ããã«æªæãããªã³ã¯ãã¯ãªãã¯ããªããããURL ãæ éã«æ±ããªããã°ãªããŸããã
URL mode elicitation request ãæ±ãéãMCP client ã¯æ¬¡ãå®ããªããã°ãªããŸããã
- URL ããã® metadata ãèªåçã« pre-fetch ããŠã¯ãªããªã
- ãŠãŒã¶ãŒã®æç€ºçãªåæãªãã« URL ãéããŠã¯ãªããªã
- åæåã«ã確èªã®ãããŠãŒã¶ãŒãž URL å šäœã衚瀺ããªããã°ãªããªã
- client ã LLM ãå
容ããŠãŒã¶ãŒå
¥åãæ€æ»ã§ããªããå®å
šãªæ¹æ³ã§ server ãæäŸãã URL ãéããªããã°ãªããªã
ããšãã° iOS ã§ã¯ SFSafariViewController ã¯é©ããŠããããWkWebView ã¯é©ããŠããªã - subdomain spoofing ã軜æžãããããURL ã® domain ã匷調衚瀺ãã¹ãã§ãã
- ææ§ãŸãã¯äžå¯©ãª URIïŒPunycode ãå«ããªã©ïŒã«ã¯èŠåãåºãã¹ãã§ãã
- 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
- server ã¯ãæ©å¯æ å ±ïŒpasswordãAPI key ãªã©ïŒã form mode ã§èŠæ±ããŠã¯ãªããªã
- client ã¯ãæäŸããã schema ã«å¯ŸããŠãã¹ãŠã® response ãæ€èšŒãã¹ãã§ãã
- 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 æ»æãå¯èœã§ãã
- æªæãããŠãŒã¶ãŒïŒAliceïŒã benign server ã«æ¥ç¶ããelicitation request ãçºçããã
- benign server ã¯ãthird-party Authorization Server ã® OAuth client ãšããŠèªå¯ URL ãçæãã
- Alice ã® client 㯠URL ã衚瀺ããåæãæ±ãã
- Alice ã¯ãã®ãªã³ã¯ãèªåã§ã¯ãªãã¯ãããåã benign server ã䜿ã被害è ãŠãŒã¶ãŒïŒBobïŒãã ãŸããŠã¯ãªãã¯ããã
- Bob ã¯ãªã³ã¯ãéããèªåèªèº«ã® benign server ãžã®æ¥ç¶ãèªå¯ããŠããã€ããã§èªå¯ãå®äºãã
- benign server 㯠third-party Authorization Server ãã callback/redirect ãåãåããããã Alice ã® request ã ãšæã蟌ã
- ãã®çµæã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)ã