Skip to content

Commit bccf053

Browse files
Update tools/call input validation errors to be JSONResponse
1 parent e0de082 commit bccf053

File tree

2 files changed

+17
-38
lines changed

2 files changed

+17
-38
lines changed

src/server/mcp.test.ts

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -875,24 +875,6 @@ describe('tool()', () => {
875875
})
876876
);
877877

878-
mcpServer.registerTool(
879-
'test (new api)',
880-
{
881-
inputSchema: {
882-
name: z.string(),
883-
value: z.number()
884-
}
885-
},
886-
async ({ name, value }) => ({
887-
content: [
888-
{
889-
type: 'text',
890-
text: `${name}: ${value}`
891-
}
892-
]
893-
})
894-
);
895-
896878
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
897879

898880
await Promise.all([client.connect(clientTransport), mcpServer.server.connect(serverTransport)]);
@@ -911,23 +893,15 @@ describe('tool()', () => {
911893
},
912894
CallToolResultSchema
913895
)
914-
).rejects.toThrow(/Invalid arguments/);
915-
916-
await expect(
917-
client.request(
896+
).resolves.toStrictEqual({
897+
content: [
918898
{
919-
method: 'tools/call',
920-
params: {
921-
name: 'test (new api)',
922-
arguments: {
923-
name: 'test',
924-
value: 'not a number'
925-
}
926-
}
927-
},
928-
CallToolResultSchema
929-
)
930-
).rejects.toThrow(/Invalid arguments/);
899+
type: 'text',
900+
text: expect.stringMatching(/Invalid arguments for tool test/)
901+
}
902+
],
903+
isError: true
904+
});
931905
});
932906

933907
/***

src/server/mcp.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,15 @@ export class McpServer {
137137
if (tool.inputSchema) {
138138
const parseResult = await tool.inputSchema.safeParseAsync(request.params.arguments);
139139
if (!parseResult.success) {
140-
throw new McpError(
141-
ErrorCode.InvalidParams,
142-
`Invalid arguments for tool ${request.params.name}: ${parseResult.error.message}`
143-
);
140+
return {
141+
content: [
142+
{
143+
type: 'text',
144+
text: `Invalid arguments for tool ${request.params.name}: ${parseResult.error.message}`
145+
}
146+
],
147+
isError: true
148+
};
144149
}
145150

146151
const args = parseResult.data;

0 commit comments

Comments
 (0)