requestClientRoots method

Future<List<Root>> requestClientRoots(
  1. String sessionId, {
  2. Duration timeout = const Duration(seconds: 30),
})

Server-initiated request: ask the connected client for its current list of filesystem / URI roots (spec roots/list).

Client must advertise the roots capability.

Implementation

Future<List<Root>> requestClientRoots(
  String sessionId, {
  Duration timeout = const Duration(seconds: 30),
}) async {
  final session = _sessions[sessionId];
  if (session == null) {
    throw StateError('Unknown sessionId: $sessionId');
  }
  final clientHasRoots = session.capabilities?['roots'] != null;
  if (!clientHasRoots) {
    throw McpError(
      'Client does not advertise the `roots` capability',
      code: ErrorCode.methodNotFound,
    );
  }
  final result = await _sendRequestToClient(
    sessionId,
    'roots/list',
    const {},
    timeout: timeout,
  );
  final list =
      result is Map ? (result['roots'] as List?) ?? const [] : const [];
  return list
      .map((e) => Root.fromJson(Map<String, Object?>.from(e as Map)))
      .toList();
}