addResource method

  1. @override
void addResource({
  1. required String uri,
  2. required String name,
  3. required String description,
  4. required String mimeType,
  5. Map<String, dynamic>? uriTemplate,
  6. required ResourceHandler handler,
  7. String? title,
  8. List<Map<String, dynamic>>? icons,
  9. Map<String, dynamic>? meta,
})
override

Add a resource to the server

Implementation

@override
void addResource({
  required String uri,
  required String name,
  required String description,
  required String mimeType,
  Map<String, dynamic>? uriTemplate,
  required ResourceHandler handler,
  String? title,
  List<Map<String, dynamic>>? icons,
  Map<String, dynamic>? meta,
}) {
  if (_resources.containsKey(uri)) {
    throw McpError('Resource with URI "$uri" already exists');
  }

  // Auto-detect template URIs (containing {param} placeholders)
  if (uriTemplate == null && uri.contains('{') && uri.contains('}')) {
    uriTemplate = {'isTemplate': true};
  }

  final resource = Resource(
    uri: uri,
    name: name,
    title: title,
    description: description,
    mimeType: mimeType,
    uriTemplate: uriTemplate,
    icons: icons,
    meta: meta,
  );

  _resources[uri] = resource;
  _resourceHandlers[uri] = handler;

  // Notify clients about resource changes if connected and supported
  if (isConnected && capabilities.hasResources && capabilities.resourcesListChanged) {
    _broadcastNotification('notifications/resources/list_changed', {});
  }

  // Emit change event
  _resourcesChangedController.add(null);
}