Skip to content

Commit 746e8a6

Browse files
committed
feat(mcp): register tools
1 parent 6e0c96f commit 746e8a6

File tree

1 file changed

+37
-203
lines changed

1 file changed

+37
-203
lines changed

sse/src/index.ts

Lines changed: 37 additions & 203 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)