fix(tools): address review findings on error codes, registerTool assertions, and strict typing

This commit is contained in:
Lucas Winther
2026-09-06 01:03:40 +02:00
parent bb321bfdbe
commit 43eeee2e04
3 changed files with 82 additions and 18 deletions
+12 -6
View File
@@ -53,25 +53,31 @@ export function formatToolError(error: unknown): McpToolResponse {
/**
* Definition interface for OpenProject MCP tools.
*/
export interface ToolDefinition<TShape extends ZodRawShape = ZodRawShape> {
export interface ToolDefinition<
TShape extends ZodRawShape = ZodRawShape,
TArgs = Record<string, unknown>,
> {
name: string;
description: string;
parameters?: TShape;
readOnly: boolean;
execute: (args: any) => Promise<McpToolResponse>;
execute: (args: TArgs) => Promise<McpToolResponse>;
}
/**
* Registers a ToolDefinition instance on an McpServer instance.
*/
export function registerTool(server: McpServer, tool: ToolDefinition<any>): void {
export function registerTool<
TShape extends ZodRawShape = ZodRawShape,
TArgs = Record<string, unknown>,
>(server: McpServer, tool: ToolDefinition<TShape, TArgs>): void {
if (tool.parameters) {
server.tool(tool.name, tool.description, tool.parameters, async (args: any) => {
return tool.execute(args);
server.tool(tool.name, tool.description, tool.parameters, async (args) => {
return tool.execute(args as unknown as TArgs);
});
} else {
server.tool(tool.name, tool.description, async () => {
return tool.execute({});
return tool.execute({} as unknown as TArgs);
});
}
}