| import { Request, Response } from 'express'; |
| import { ApiResponse } from '../types/index.js'; |
| import { handleCallToolRequest } from '../services/mcpService.js'; |
|
|
| |
| |
| |
| export interface ToolCallRequest { |
| toolName: string; |
| arguments?: Record<string, any>; |
| } |
|
|
| |
| |
| |
| export interface ToolSearchRequest { |
| query: string; |
| limit?: number; |
| } |
|
|
| |
| |
| |
| interface ToolCallResult { |
| content?: Array<{ |
| type: string; |
| text?: string; |
| [key: string]: any; |
| }>; |
| isError?: boolean; |
| [key: string]: any; |
| } |
|
|
| |
| |
| |
| export const callTool = async (req: Request, res: Response): Promise<void> => { |
| try { |
| const { server } = req.params; |
| const { toolName, arguments: toolArgs = {} } = req.body as ToolCallRequest; |
|
|
| if (!toolName) { |
| res.status(400).json({ |
| success: false, |
| message: 'toolName is required', |
| }); |
| return; |
| } |
|
|
| |
| const mockRequest = { |
| params: { |
| name: 'call_tool', |
| arguments: { |
| toolName, |
| arguments: toolArgs, |
| }, |
| }, |
| }; |
|
|
| const extra = { |
| sessionId: req.headers['x-session-id'] || 'api-session', |
| server: server || undefined, |
| }; |
|
|
| const result = (await handleCallToolRequest(mockRequest, extra)) as ToolCallResult; |
|
|
| const response: ApiResponse = { |
| success: true, |
| data: { |
| content: result.content || [], |
| toolName, |
| arguments: toolArgs, |
| }, |
| }; |
|
|
| res.json(response); |
| } catch (error) { |
| console.error('Error calling tool:', error); |
| res.status(500).json({ |
| success: false, |
| message: 'Failed to call tool', |
| error: error instanceof Error ? error.message : 'Unknown error occurred', |
| }); |
| } |
| }; |
|
|