requestClientElicitation method

Future<Map<String, dynamic>> requestClientElicitation(
  1. String sessionId,
  2. Map<String, dynamic> params, {
  3. Duration timeout = const Duration(seconds: 120),
})

Server-initiated request: ask the connected client to elicit input from the user (spec 2025-06-18 elicitation/create).

params follows the spec ElicitRequest.params shape: message (string) + requestedSchema (restricted JSON Schema — flat object, primitive properties only).

Returns the spec ElicitResult map: action (accept / decline / cancel) plus content when accepted.

Client must advertise the elicitation capability.

Implementation

Future<Map<String, dynamic>> requestClientElicitation(
  String sessionId,
  Map<String, dynamic> params, {
  Duration timeout = const Duration(seconds: 120),
}) async {
  final session = _sessions[sessionId];
  if (session == null) {
    throw StateError('Unknown sessionId: $sessionId');
  }
  final clientHasElicitation = session.capabilities?['elicitation'] != null;
  if (!clientHasElicitation) {
    throw McpError(
      'Client does not advertise the `elicitation` capability',
      code: ErrorCode.methodNotFound,
    );
  }
  final result = await _sendRequestToClient(
      sessionId, 'elicitation/create', params, timeout: timeout);
  return result is Map<String, dynamic>
      ? result
      : Map<String, dynamic>.from(result as Map);
}