getTools method

Future<List<Tool>> getTools()

Implementation

Future<List<Tool>> getTools() async {
  if (client == null) throw Exception('Client is not initialized');

  final listTools = await client!.listTools();
  final List<Tool> tools = [];

  for (final tool in listTools) {
    final List<Parameter> parameters = [];

    if (tool.inputSchema['type'] == 'object') {
      final properties = tool.inputSchema['properties'];
      for (final property in properties.entries) {
        parameters.add(
          Parameter(
            name: property.key,
            type: property.value['type'],
            description: property.value['description'],
            required: (tool.inputSchema['required'] as List).contains(property.key),
            enumValues: property.value['enum'],
          ),
        );
      }
    }

    tools.add(
      Tool(
        name: tool.name,
        description: tool.description,
        parameters: parameters,
        function: (Map<String, dynamic> arguments) async {
          final result = await client!.callTool(tool.name, arguments);
          return (result.content.first as TextContent).text;
        },
      ),
    );
  }

  return tools;
}