import { Tool, ToolHandler } from '../types/index.js';
import { EchoTool, AddNumbersTool, GetCurrentTimeTool, FlightStatusTool } from './index.js';
export class ToolRegistry {
private tools: Map<string, ToolHandler> = new Map();
private toolDefinitions: Map<string, Tool> = new Map();
constructor() {
this.registerTools();
}
private registerTools() {
// Register Echo tool
this.tools.set('echo', new EchoTool());
this.toolDefinitions.set('echo', {
name: 'echo',
description: 'Echo back the input text',
inputSchema: {
type: 'object',
properties: {
text: {
type: 'string',
description: 'Text to echo back',
},
},
required: ['text'],
},
});
// Register Add Numbers tool
this.tools.set('add_numbers', new AddNumbersTool());
this.toolDefinitions.set('add_numbers', {
name: 'add_numbers',
description: 'Add two numbers together',
inputSchema: {
type: 'object',
properties: {
a: {
type: 'number',
description: 'First number',
},
b: {
type: 'number',
description: 'Second number',
},
},
required: ['a', 'b'],
},
});
// Register Get Current Time tool
this.tools.set('get_current_time', new GetCurrentTimeTool());
this.toolDefinitions.set('get_current_time', {
name: 'get_current_time',
description: 'Get the current date and time',
inputSchema: {
type: 'object',
properties: {},
},
});
// Register Flight Status tool
this.tools.set('get_flight_status', new FlightStatusTool());
this.toolDefinitions.set('get_flight_status', {
name: 'get_flight_status',
description: 'Get the latest status of a flight using flight number',
inputSchema: {
type: 'object',
properties: {
flightNumber: {
type: 'string',
description: 'Flight number (e.g., "1234")',
},
airlineIata: {
type: 'string',
description: 'Optional airline IATA code (e.g., "AA" for American Airlines)',
},
},
required: ['flightNumber'],
},
});
}
getTool(name: string): ToolHandler | undefined {
return this.tools.get(name);
}
getToolDefinition(name: string): Tool | undefined {
return this.toolDefinitions.get(name);
}
getAllTools(): Tool[] {
return Array.from(this.toolDefinitions.values());
}
hasTools(): boolean {
return this.tools.size > 0;
}
registerTool(name: string, handler: ToolHandler, definition: Tool): void {
this.tools.set(name, handler);
this.toolDefinitions.set(name, definition);
}
}