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