addTool method

  1. @override
void addTool({
  1. required String name,
  2. required String description,
  3. required Map<String, dynamic> inputSchema,
  4. required ToolHandler handler,
  5. String? title,
  6. Map<String, dynamic>? outputSchema,
  7. List<Map<String, dynamic>>? icons,
  8. Map<String, dynamic>? meta,
})
override

Add a tool to the server

Implementation

@override
void addTool({
  required String name,
  required String description,
  required Map<String, dynamic> inputSchema,
  required ToolHandler handler,
  String? title,
  Map<String, dynamic>? outputSchema,
  List<Map<String, dynamic>>? icons,
  Map<String, dynamic>? meta,
}) {
  _logger.debug('Adding tool: $name');

  if (_tools.containsKey(name)) {
    _logger.debug('Tool with name "$name" already exists');
    throw McpError('Tool with name "$name" already exists');
  }

  final tool = Tool(
    name: name,
    title: title,
    description: description,
    inputSchema: inputSchema,
    outputSchema: outputSchema,
    icons: icons,
    meta: meta,
  );

  _tools[name] = tool;
  _toolHandlers[name] = handler;

  _logger.debug('Tool added successfully: $name');
  _logger.debug('Total tools: ${_tools.length}');

  // Notify clients about tool changes if connected and supported
  if (isConnected && capabilities.hasTools && capabilities.toolsListChanged) {
    _broadcastNotification('notifications/tools/list_changed', {});
  }

  // Emit change event
  _toolsChangedController.add(null);

  // Update metrics
  _updateResourceMetrics();
}