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(
            uri: (e as Map)['uri'] as String,
            name: e['name'] as String? ?? '',
            description: e['description'] as String?,
          ))
      .toList();
}