requestClientRoots method
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();
}