getTools method
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;
}