From 387098c32786a3202861c4fa120b2db7f113e833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Barthelet?= Date: Wed, 30 Jul 2025 14:14:07 +0200 Subject: [PATCH 1/2] Update tools/call input validation errors to be JSONResponse --- src/server/mcp.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/server/mcp.ts b/src/server/mcp.ts index 791facef1..818c45cb3 100644 --- a/src/server/mcp.ts +++ b/src/server/mcp.ts @@ -162,10 +162,15 @@ export class McpServer { request.params.arguments, ); if (!parseResult.success) { - throw new McpError( - ErrorCode.InvalidParams, - `Invalid arguments for tool ${request.params.name}: ${parseResult.error.message}`, - ); + return { + content: [ + { + type: "text", + text: `Invalid arguments for tool ${request.params.name}: ${parseResult.error.message}`, + }, + ], + isError: true, + }; } const args = parseResult.data; From b1bb52809d7c01f063c4e53ac8b9dd457a7d7729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Barthelet?= Date: Wed, 30 Jul 2025 14:47:29 +0200 Subject: [PATCH 2/2] Update test --- src/server/mcp.test.ts | 40 +++++++--------------------------------- 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/src/server/mcp.test.ts b/src/server/mcp.test.ts index 10e550df4..4a7b2bb9d 100644 --- a/src/server/mcp.test.ts +++ b/src/server/mcp.test.ts @@ -937,24 +937,6 @@ describe("tool()", () => { }), ); - mcpServer.registerTool( - "test (new api)", - { - inputSchema: { - name: z.string(), - value: z.number(), - }, - }, - async ({ name, value }) => ({ - content: [ - { - type: "text", - text: `${name}: ${value}`, - }, - ], - }) - ); - const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair(); @@ -977,23 +959,15 @@ describe("tool()", () => { }, CallToolResultSchema, ), - ).rejects.toThrow(/Invalid arguments/); - - await expect( - client.request( + ).resolves.toStrictEqual({ + content: [ { - method: "tools/call", - params: { - name: "test (new api)", - arguments: { - name: "test", - value: "not a number", - }, - }, + type: "text", + text: expect.stringMatching(/Invalid arguments for tool test/), }, - CallToolResultSchema, - ), - ).rejects.toThrow(/Invalid arguments/); + ], + isError: true, + }); }); /***