///|
/// Configure explicit capabilities after registering the corresponding handlers.
/// Advertising input support without its handler is rejected before any request.
pub fn MCPClient::with_capabilities(
  self : MCPClient,
  capabilities : @types.ClientCapabilities,
) -> MCPClient raise @types.MCPError {
  let capabilities = @types.ClientCapabilities::from_json(
    capabilities.to_json(),
  )
  if capabilities.roots is Some(_) && self.roots_handler is None {
    raise @types.InvalidParams("roots capability requires an on_roots handler")
  }
  if capabilities.sampling is Some(_) && self.sampling_handler is None {
    raise @types.InvalidParams(
      "sampling capability requires an on_sampling handler",
    )
  }
  if capabilities.elicitation is Some(_) && self.elicitation_handler is None {
    raise @types.InvalidParams(
      "elicitation capability requires an on_elicitation handler",
    )
  }
  { ..self, capabilities, }
}