Skip to content

Commit 6e0c96f

Browse files
committed
feat(mcp): update tools handler
1 parent 7d8637a commit 6e0c96f

File tree

3 files changed

+210
-270
lines changed

3 files changed

+210
-270
lines changed

src/index.ts

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import {
4242
formatZodError,
4343
handleGeneralError,
4444
} from "./utils/util.js";
45+
import { executeToolHandler } from "./utils/toolsHandler.js";
4546

4647
import { prompts } from "./utils/prompts.js";
4748
import {
@@ -121,45 +122,7 @@ function createServer() {
121122
return createErrorResponse("Unauthorized");
122123
}
123124

124-
try {
125-
switch (name) {
126-
case "get_cloud_incidents":
127-
return await handleCloudIncidentsRequest(args, token);
128-
case "get_cloud_incident":
129-
return await handleCloudIncidentRequest(args, token);
130-
case "get_anomalies":
131-
return await handleAnomaliesRequest(args, token);
132-
case "get_anomaly":
133-
return await handleAnomalyRequest(args, token);
134-
case "list_reports":
135-
return await handleReportsRequest(args, token);
136-
case "run_query":
137-
return await handleRunQueryRequest(args, token);
138-
case "get_report_results":
139-
return await handleGetReportResultsRequest(args, token);
140-
case "validate_user":
141-
return await handleValidateUserRequest(args, token);
142-
case "list_dimensions":
143-
return await handleDimensionsRequest(args, token);
144-
case "get_dimension":
145-
return await handleDimensionRequest(args, token);
146-
case "list_tickets":
147-
return await handleListTicketsRequest(args, token);
148-
case "create_ticket":
149-
return await handleCreateTicketRequest(args, token);
150-
case "list_invoices":
151-
return await handleListInvoicesRequest(args, token);
152-
case "get_invoice":
153-
return await handleGetInvoiceRequest(args, token);
154-
default:
155-
return createErrorResponse(`Unknown tool: ${name}`);
156-
}
157-
} catch (error) {
158-
if (error instanceof z.ZodError) {
159-
return createErrorResponse(formatZodError(error));
160-
}
161-
return handleGeneralError(error, "handling tool request");
162-
}
125+
return await executeToolHandler(name, args, token);
163126
});
164127

165128
// Handle initialize method

src/utils/toolsHandler.ts

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { z } from "zod";
2+
import {
3+
createErrorResponse,
4+
formatZodError,
5+
handleGeneralError,
6+
} from "./util.js";
7+
8+
// Import all tool handlers
9+
import {
10+
handleCloudIncidentsRequest,
11+
handleCloudIncidentRequest,
12+
} from "../tools/cloudIncidents.js";
13+
import {
14+
handleAnomaliesRequest,
15+
handleAnomalyRequest,
16+
} from "../tools/anomalies.js";
17+
import {
18+
handleReportsRequest,
19+
handleRunQueryRequest,
20+
handleGetReportResultsRequest,
21+
} from "../tools/reports.js";
22+
import { handleValidateUserRequest } from "../tools/validateUser.js";
23+
import { handleDimensionsRequest } from "../tools/dimensions.js";
24+
import { handleDimensionRequest } from "../tools/dimension.js";
25+
import {
26+
handleListTicketsRequest,
27+
handleCreateTicketRequest,
28+
} from "../tools/tickets.js";
29+
import {
30+
handleListInvoicesRequest,
31+
handleGetInvoiceRequest,
32+
} from "../tools/invoices.js";
33+
34+
/**
35+
* Executes a tool handler with proper error handling
36+
* @param toolName - The name of the tool to execute
37+
* @param args - The arguments to pass to the tool handler
38+
* @param token - The API token to use
39+
* @param convertResponse - Optional function to convert the response format
40+
* @returns The tool execution result
41+
*/
42+
export async function executeToolHandler(
43+
toolName: string,
44+
args: any,
45+
token: string,
46+
convertResponse?: (response: any) => any
47+
): Promise<any> {
48+
try {
49+
let result: any;
50+
51+
switch (toolName) {
52+
case "get_cloud_incidents":
53+
result = await handleCloudIncidentsRequest(args, token);
54+
break;
55+
case "get_cloud_incident":
56+
result = await handleCloudIncidentRequest(args, token);
57+
break;
58+
case "get_anomalies":
59+
result = await handleAnomaliesRequest(args, token);
60+
break;
61+
case "get_anomaly":
62+
result = await handleAnomalyRequest(args, token);
63+
break;
64+
case "list_reports":
65+
result = await handleReportsRequest(args, token);
66+
break;
67+
case "run_query":
68+
result = await handleRunQueryRequest(args, token);
69+
break;
70+
case "get_report_results":
71+
result = await handleGetReportResultsRequest(args, token);
72+
break;
73+
case "validate_user":
74+
result = await handleValidateUserRequest(args, token);
75+
break;
76+
case "list_dimensions":
77+
result = await handleDimensionsRequest(args, token);
78+
break;
79+
case "get_dimension":
80+
result = await handleDimensionRequest(args, token);
81+
break;
82+
case "list_tickets":
83+
result = await handleListTicketsRequest(args, token);
84+
break;
85+
case "create_ticket":
86+
result = await handleCreateTicketRequest(args, token);
87+
break;
88+
case "list_invoices":
89+
result = await handleListInvoicesRequest(args, token);
90+
break;
91+
case "get_invoice":
92+
result = await handleGetInvoiceRequest(args, token);
93+
break;
94+
default:
95+
return createErrorResponse(`Unknown tool: ${toolName}`);
96+
}
97+
98+
// Apply response conversion if provided
99+
return convertResponse ? convertResponse(result) : result;
100+
} catch (error) {
101+
if (error instanceof z.ZodError) {
102+
const errorResult = createErrorResponse(formatZodError(error));
103+
return convertResponse ? convertResponse(errorResult) : errorResult;
104+
}
105+
const errorResult = handleGeneralError(error, "handling tool request");
106+
return convertResponse ? convertResponse(errorResult) : errorResult;
107+
}
108+
}

0 commit comments

Comments
 (0)