import type { DroydClient } from '../client.js';
// Import tools and handlers
import { chatTool, handleChat } from './chat.js';
import { searchContentTool, handleSearchContent } from './search.js';
import {
searchProjectsTool,
filterProjectsTool,
watchlistTool,
handleSearchProjects,
handleFilterProjects,
handleGetWatchlist,
} from './projects.js';
import {
openTradeTool,
manageTradeTool,
getPositionsTool,
handleOpenTrade,
handleManageTrade,
handleGetPositions,
} from './trading.js';
// =============================================================================
// Tool Registry
// =============================================================================
/**
* All available MCP tools
*/
export const allTools = [
// Agent
chatTool,
// Search
searchContentTool,
// Projects
searchProjectsTool,
filterProjectsTool,
watchlistTool,
// Trading
openTradeTool,
manageTradeTool,
getPositionsTool,
];
// =============================================================================
// Tool Router
// =============================================================================
/**
* Handle a tool call by routing to the appropriate handler
*/
export async function handleToolCall(
client: DroydClient,
name: string,
args: Record<string, unknown>
): Promise<{ content: Array<{ type: 'text'; text: string }>; isError?: boolean }> {
try {
let result: unknown;
switch (name) {
// Agent
case 'droyd_chat':
result = await handleChat(client, args);
break;
// Search
case 'droyd_search_content':
result = await handleSearchContent(client, args);
break;
// Projects
case 'droyd_search_projects':
result = await handleSearchProjects(client, args);
break;
case 'droyd_filter_projects':
result = await handleFilterProjects(client, args);
break;
case 'droyd_get_watchlist':
result = await handleGetWatchlist(client, args);
break;
// Trading
case 'droyd_open_trade':
result = await handleOpenTrade(client, args);
break;
case 'droyd_manage_trade':
result = await handleManageTrade(client, args);
break;
case 'droyd_get_positions':
result = await handleGetPositions(client, args);
break;
default:
return {
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
isError: true,
};
}
return {
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
};
} catch (error) {
const message = error instanceof Error ? error.message : 'Unknown error';
return {
content: [{ type: 'text', text: `Error: ${message}` }],
isError: true,
};
}
}
// Re-export individual tools for convenience
export {
chatTool,
searchContentTool,
searchProjectsTool,
filterProjectsTool,
watchlistTool,
openTradeTool,
manageTradeTool,
getPositionsTool,
};