addTool method
void
addTool({
- required String name,
- required String description,
- required Map<
String, dynamic> inputSchema, - required ToolHandler handler,
- String? title,
- Map<
String, dynamic> ? outputSchema, - List<
Map< ? icons,String, dynamic> > - 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();
}