Skip to content

Commit c20a47a

Browse files
committed
small fixes
1 parent e76faf6 commit c20a47a

File tree

2 files changed

+53
-57
lines changed

2 files changed

+53
-57
lines changed

src/server/mcp.test.ts

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,72 +1203,68 @@ describe("tool()", () => {
12031203
}),
12041204
).rejects.toThrow(/Tool test has an output schema but no structured content was provided/);
12051205
});
1206-
1207-
/***
1206+
/***
12081207
* Test: Tool with Output Schema Must Provide Structured Content
12091208
*/
1210-
test("should not throw error when tool with outputSchema returns no structuredContent and isError is true", async () => {
1211-
const mcpServer = new McpServer({
1212-
name: "test server",
1213-
version: "1.0",
1214-
});
1215-
1216-
const client = new Client({
1217-
name: "test client",
1218-
version: "1.0",
1219-
});
1220-
1221-
// Register a tool with outputSchema that returns only content without structuredContent
1222-
mcpServer.registerTool(
1223-
"test",
1224-
{
1225-
description: "Test tool with output schema but missing structured content",
1226-
inputSchema: {
1227-
input: z.string(),
1228-
},
1229-
outputSchema: {
1230-
processedInput: z.string(),
1231-
resultType: z.string(),
1232-
},
1209+
test("should skip outputSchema validation when isError is true", async () => {
1210+
const mcpServer = new McpServer({
1211+
name: "test server",
1212+
version: "1.0",
1213+
});
1214+
1215+
const client = new Client({
1216+
name: "test client",
1217+
version: "1.0",
1218+
});
1219+
1220+
mcpServer.registerTool(
1221+
"test",
1222+
{
1223+
description: "Test tool with output schema but missing structured content",
1224+
inputSchema: {
1225+
input: z.string(),
12331226
},
1234-
async ({ input }) => ({
1235-
// Only return content without structuredContent
1236-
content: [
1237-
{
1238-
type: "text",
1239-
text: `Processed: ${input}`,
1240-
},
1241-
],
1242-
isError: true,
1243-
})
1244-
);
1245-
1246-
const [clientTransport, serverTransport] =
1247-
InMemoryTransport.createLinkedPair();
1248-
1249-
await Promise.all([
1250-
client.connect(clientTransport),
1251-
mcpServer.server.connect(serverTransport),
1252-
]);
1253-
1254-
// Call the tool and expect it to not throw an error
1255-
await expect(
1256-
client.callTool({
1257-
name: "test",
1258-
arguments: {
1259-
input: "hello",
1260-
},
1261-
}),
1262-
).resolves.toStrictEqual({
1227+
outputSchema: {
1228+
processedInput: z.string(),
1229+
resultType: z.string(),
1230+
},
1231+
},
1232+
async ({ input }) => ({
12631233
content: [
12641234
{
12651235
type: "text",
1266-
text: `Processed: hello`,
1236+
text: `Processed: ${input}`,
12671237
},
12681238
],
12691239
isError: true,
1270-
});
1240+
})
1241+
);
1242+
1243+
const [clientTransport, serverTransport] =
1244+
InMemoryTransport.createLinkedPair();
1245+
1246+
await Promise.all([
1247+
client.connect(clientTransport),
1248+
mcpServer.server.connect(serverTransport),
1249+
]);
1250+
1251+
await expect(
1252+
client.callTool({
1253+
name: "test",
1254+
arguments: {
1255+
input: "hello",
1256+
},
1257+
}),
1258+
).resolves.toStrictEqual({
1259+
content: [
1260+
{
1261+
type: "text",
1262+
text: `Processed: hello`,
1263+
},
1264+
],
1265+
isError: true,
12711266
});
1267+
});
12721268

12731269
/***
12741270
* Test: Schema Validation Failure for Invalid Structured Content

src/server/mcp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ export class McpServer {
200200
}
201201
}
202202

203-
if (tool.outputSchema && (result.isError !== true)) {
203+
if (tool.outputSchema && !result.isError) {
204204
if (!result.structuredContent) {
205205
throw new McpError(
206206
ErrorCode.InvalidParams,

0 commit comments

Comments
 (0)