discover method
2026-07-28 stateless core: fetch the server's supported versions,
capabilities, and optional instructions via server/discover.
Servers MUST implement server/discover; clients MAY call it (version
negotiation can also happen inline via per-request _meta). Callable
without a prior handshake. As a side effect the parsed
ServerCapabilities and server info are cached on this client
(serverCapabilities / serverInfo).
Implementation
Future<DiscoverResult> discover({RequestOptions? options}) async {
if (!isConnected) {
throw McpError('Client is not connected to a transport');
}
final response = await _sendRequest('server/discover', {}, options);
if (response == null) {
throw McpError('server/discover returned no result');
}
final map = Map<String, dynamic>.from(response as Map);
final result = DiscoverResult.fromJson(map);
final capsData = map['capabilities'];
_serverCapabilities = ServerCapabilities.fromJson(
capsData is Map ? Map<String, dynamic>.from(capsData) : {},
);
// ResultMetaObject may carry `serverInfo` (2026-07-28).
final serverInfo = McpRequestMeta.readServerInfo(map['_meta']);
if (serverInfo != null) {
_serverInfo = serverInfo;
}
return result;
}