/**
* Tool Registry
* Central registry of all available tools and handlers
*/
import { MCPTool, ToolHandler } from "../types/index.js";
import { pingTool, pingToolDefinition } from "./ping.js";
import { systemInfoTool, systemInfoToolDefinition } from "./system_info.js";
import { gitStatusTool, gitStatusToolDefinition } from "./git_status.js";
import { fileReaderTool, fileReaderToolDefinition } from "./file_reader.js";
interface ToolRegistry {
[key: string]: {
definition: MCPTool;
handler: ToolHandler;
};
}
const registry: ToolRegistry = {
ping: {
definition: pingToolDefinition,
handler: pingTool,
},
system_info: {
definition: systemInfoToolDefinition,
handler: systemInfoTool,
},
git_status: {
definition: gitStatusToolDefinition,
handler: gitStatusTool,
},
file_reader: {
definition: fileReaderToolDefinition,
handler: fileReaderTool,
},
};
/**
* Get all registered tool definitions
*/
export function getToolDefinitions(): MCPTool[] {
return Object.values(registry).map((tool) => tool.definition);
}
/**
* Call a tool handler by name
*/
export async function callTool(
toolName: string,
args: Record<string, unknown>
): Promise<string | Record<string, unknown>> {
const tool = registry[toolName];
if (!tool) {
throw new Error(`Tool "${toolName}" not found`);
}
return tool.handler(args);
}
/**
* Check if a tool exists
*/
export function toolExists(toolName: string): boolean {
return toolName in registry;
}