File size: 1,921 Bytes
eb846d0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
import { Request, Response } from 'express';
import { ApiResponse } from '../types/index.js';
import { handleCallToolRequest } from '../services/mcpService.js';
/**
* Interface for tool call request
*/
export interface ToolCallRequest {
toolName: string;
arguments?: Record<string, any>;
}
/**
* Interface for tool search request
*/
export interface ToolSearchRequest {
query: string;
limit?: number;
}
/**
* Interface for tool call result
*/
interface ToolCallResult {
content?: Array<{
type: string;
text?: string;
[key: string]: any;
}>;
isError?: boolean;
[key: string]: any;
}
/**
* Call a specific tool with given arguments
*/
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;
}
// Create a mock request structure for handleCallToolRequest
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',
});
}
};
|