@@ -123,6 +123,29 @@ export class DoitMCP extends McpAgent<Env, State, Props> {
123123 return this . props . bearerToken ;
124124 }
125125
126+ // Generic callback factory for tools
127+ private createToolCallback ( toolName : string ) {
128+ return async ( args : any ) => {
129+ const token = this . getToken ( ) ;
130+ return await executeToolHandler (
131+ toolName ,
132+ args ,
133+ token ,
134+ convertToMcpResponse
135+ ) ;
136+ } ;
137+ }
138+
139+ // Generic tool registration helper
140+ private registerTool ( tool : any , schema : any ) {
141+ ( this . server . tool as any ) (
142+ tool . name ,
143+ tool . description ,
144+ zodSchemaToMcpTool ( schema ) ,
145+ this . createToolCallback ( tool . name )
146+ ) ;
147+ }
148+
126149 async init ( ) {
127150 if ( this . props . customerContext ) {
128151 process . env . CUSTOMER_CONTEXT = this . props . customerContext ;
@@ -144,221 +167,32 @@ export class DoitMCP extends McpAgent<Env, State, Props> {
144167 } ) ;
145168
146169 // Cloud Incidents tools
147- this . server . tool (
148- cloudIncidentsTool . name ,
149- cloudIncidentsTool . description ,
150- zodSchemaToMcpTool ( CloudIncidentsArgumentsSchema ) ,
151- async ( args ) => {
152- const token = this . getToken ( ) ;
153- return await executeToolHandler (
154- cloudIncidentsTool . name ,
155- args ,
156- token ,
157- convertToMcpResponse
158- ) ;
159- }
160- ) ;
161-
162- this . server . tool (
163- cloudIncidentTool . name ,
164- cloudIncidentTool . description ,
165- zodSchemaToMcpTool ( CloudIncidentArgumentsSchema ) ,
166- async ( args ) => {
167- const token = this . getToken ( ) ;
168- return await executeToolHandler (
169- cloudIncidentTool . name ,
170- args ,
171- token ,
172- convertToMcpResponse
173- ) ;
174- }
175- ) ;
170+ this . registerTool ( cloudIncidentsTool , CloudIncidentsArgumentsSchema ) ;
171+ this . registerTool ( cloudIncidentTool , CloudIncidentArgumentsSchema ) ;
176172
177173 // Anomalies tools
178- this . server . tool (
179- anomaliesTool . name ,
180- anomaliesTool . description ,
181- zodSchemaToMcpTool ( AnomaliesArgumentsSchema ) ,
182- async ( args ) => {
183- const token = this . getToken ( ) ;
184- return await executeToolHandler (
185- anomaliesTool . name ,
186- args ,
187- token ,
188- convertToMcpResponse
189- ) ;
190- }
191- ) ;
192-
193- this . server . tool (
194- anomalyTool . name ,
195- anomalyTool . description ,
196- zodSchemaToMcpTool ( AnomalyArgumentsSchema ) ,
197- async ( args ) => {
198- const token = this . getToken ( ) ;
199- return await executeToolHandler (
200- anomalyTool . name ,
201- args ,
202- token ,
203- convertToMcpResponse
204- ) ;
205- }
206- ) ;
174+ this . registerTool ( anomaliesTool , AnomaliesArgumentsSchema ) ;
175+ this . registerTool ( anomalyTool , AnomalyArgumentsSchema ) ;
207176
208177 // Reports tools
209- this . server . tool (
210- reportsTool . name ,
211- reportsTool . description ,
212- zodSchemaToMcpTool ( ReportsArgumentsSchema ) ,
213- async ( args ) => {
214- const token = this . getToken ( ) ;
215- return await executeToolHandler (
216- reportsTool . name ,
217- args ,
218- token ,
219- convertToMcpResponse
220- ) ;
221- }
222- ) ;
223-
224- this . server . tool (
225- runQueryTool . name ,
226- runQueryTool . description ,
227- zodSchemaToMcpTool ( RunQueryArgumentsSchema ) ,
228- async ( args ) => {
229- const token = this . getToken ( ) ;
230- return await executeToolHandler (
231- runQueryTool . name ,
232- args ,
233- token ,
234- convertToMcpResponse
235- ) ;
236- }
237- ) ;
238-
239- this . server . tool (
240- getReportResultsTool . name ,
241- getReportResultsTool . description ,
242- zodSchemaToMcpTool ( GetReportResultsArgumentsSchema ) ,
243- async ( args ) => {
244- const token = this . getToken ( ) ;
245- return await executeToolHandler (
246- getReportResultsTool . name ,
247- args ,
248- token ,
249- convertToMcpResponse
250- ) ;
251- }
252- ) ;
178+ this . registerTool ( reportsTool , ReportsArgumentsSchema ) ;
179+ this . registerTool ( runQueryTool , RunQueryArgumentsSchema ) ;
180+ this . registerTool ( getReportResultsTool , GetReportResultsArgumentsSchema ) ;
253181
254182 // Validation tool
255- this . server . tool (
256- validateUserTool . name ,
257- validateUserTool . description ,
258- zodSchemaToMcpTool ( ValidateUserArgumentsSchema ) ,
259- async ( args ) => {
260- const token = this . getToken ( ) ;
261- return await executeToolHandler (
262- validateUserTool . name ,
263- args ,
264- token ,
265- convertToMcpResponse
266- ) ;
267- }
268- ) ;
183+ this . registerTool ( validateUserTool , ValidateUserArgumentsSchema ) ;
269184
270185 // Dimensions tools
271- this . server . tool (
272- dimensionsTool . name ,
273- dimensionsTool . description ,
274- zodSchemaToMcpTool ( DimensionsArgumentsSchema ) ,
275- async ( args ) => {
276- const token = this . getToken ( ) ;
277- return await executeToolHandler (
278- dimensionsTool . name ,
279- args ,
280- token ,
281- convertToMcpResponse
282- ) ;
283- }
284- ) ;
285-
286- this . server . tool (
287- dimensionTool . name ,
288- dimensionTool . description ,
289- zodSchemaToMcpTool ( DimensionArgumentsSchema ) ,
290- async ( args ) => {
291- const token = this . getToken ( ) ;
292- return await executeToolHandler (
293- dimensionTool . name ,
294- args ,
295- token ,
296- convertToMcpResponse
297- ) ;
298- }
299- ) ;
186+ this . registerTool ( dimensionsTool , DimensionsArgumentsSchema ) ;
187+ this . registerTool ( dimensionTool , DimensionArgumentsSchema ) ;
300188
301189 // Tickets tools
302- this . server . tool (
303- listTicketsTool . name ,
304- listTicketsTool . description ,
305- zodSchemaToMcpTool ( ListTicketsArgumentsSchema ) ,
306- async ( args ) => {
307- const token = this . getToken ( ) ;
308- return await executeToolHandler (
309- listTicketsTool . name ,
310- args ,
311- token ,
312- convertToMcpResponse
313- ) ;
314- }
315- ) ;
316-
317- this . server . tool (
318- createTicketTool . name ,
319- createTicketTool . description ,
320- zodSchemaToMcpTool ( CreateTicketArgumentsSchema ) ,
321- async ( args ) => {
322- const token = this . getToken ( ) ;
323- return await executeToolHandler (
324- createTicketTool . name ,
325- args ,
326- token ,
327- convertToMcpResponse
328- ) ;
329- }
330- ) ;
190+ this . registerTool ( listTicketsTool , ListTicketsArgumentsSchema ) ;
191+ this . registerTool ( createTicketTool , CreateTicketArgumentsSchema ) ;
331192
332193 // Invoices tools
333- this . server . tool (
334- listInvoicesTool . name ,
335- listInvoicesTool . description ,
336- zodSchemaToMcpTool ( ListInvoicesArgumentsSchema ) ,
337- async ( args ) => {
338- const token = this . getToken ( ) ;
339- return await executeToolHandler (
340- listInvoicesTool . name ,
341- args ,
342- token ,
343- convertToMcpResponse
344- ) ;
345- }
346- ) ;
347-
348- this . server . tool (
349- getInvoiceTool . name ,
350- getInvoiceTool . description ,
351- zodSchemaToMcpTool ( GetInvoiceArgumentsSchema ) ,
352- async ( args ) => {
353- const token = this . getToken ( ) ;
354- return await executeToolHandler (
355- getInvoiceTool . name ,
356- args ,
357- token ,
358- convertToMcpResponse
359- ) ;
360- }
361- ) ;
194+ this . registerTool ( listInvoicesTool , ListInvoicesArgumentsSchema ) ;
195+ this . registerTool ( getInvoiceTool , GetInvoiceArgumentsSchema ) ;
362196 }
363197}
364198
0 commit comments