POST /mcp (Client → Server)
Request #1 — tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "deploy_app",
    "arguments": { "env": "production" }
  }
}
Response #1 — incomplete (dependent_requests)
{
  "jsonrpc": "2.0",
  "id": 1,
  "dependent_requests": {
    "confirm": {
      "method": "elicitation/create",
      "params": { "message": "Confirm deploy?", "requestedSchema": { "type": "object" } }
    }
  }
}
Request #2 — retry (elicitation response)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "deploy_app",
    "arguments": { "env": "production" }
  },
  "dependent_responses": {
    "confirm": { "result": { "action": "accept", "content": { "confirmed": true } } }
  }
}
Response #2 — sampling request (dependent_requests)
{
  "jsonrpc": "2.0",
  "id": 2,
  "dependent_requests": {
    "summary": {
      "method": "sampling/createMessage",
      "params": { "messages": [ "..." ], "maxTokens": 120 }
    }
  }
}
Request #3 — retry (sampling response added)
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "deploy_app",
    "arguments": { "env": "production" }
  },
  "dependent_responses": {
    "confirm": { "result": { "action": "accept", "content": { "confirmed": true } } },
    "summary": { "result": { "role": "assistant", "content": { "type": "text", "text": "Deploy summary..." }, "model": "claude-3-sonnet", "stopReason": "endTurn" } }
  }
}
Response #3 — CallToolResult
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [ { "type": "text", "text": "Deployment queued." } ],
    "isError": false
  }
}