From 3cdb4bd744ec6180550510523c0757e740cc6afc Mon Sep 17 00:00:00 2001 From: Jean-Marc Le Roux Date: Sat, 30 Aug 2025 14:45:29 +0200 Subject: [PATCH] fix: return undefined for optional arrays instead of empty arrays - Update generateDefaultValue to return undefined for optional array parameters - Add comprehensive tests for required vs non-required arrays - Fixes issue where MCP Inspector sends empty arrays [] for optional parameters - Resolves compatibility issues with OpenAPI servers expecting omitted optionals Refs #771 --- client/src/utils/__tests__/schemaUtils.test.ts | 18 ++++++++++++++---- client/src/utils/schemaUtils.ts | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/client/src/utils/__tests__/schemaUtils.test.ts b/client/src/utils/__tests__/schemaUtils.test.ts index 0ecd8075..50337532 100644 --- a/client/src/utils/__tests__/schemaUtils.test.ts +++ b/client/src/utils/__tests__/schemaUtils.test.ts @@ -39,8 +39,8 @@ describe("generateDefaultValue", () => { ).toBe(false); }); - test("generates default array", () => { - expect(generateDefaultValue({ type: "array" })).toEqual([]); + test("generates undefined for optional array", () => { + expect(generateDefaultValue({ type: "array" })).toBe(undefined); }); test("generates default empty object", () => { @@ -52,8 +52,18 @@ describe("generateDefaultValue", () => { expect(generateDefaultValue({ type: "unknown" })).toBe(undefined); }); - test("generates empty array for non-required array", () => { - expect(generateDefaultValue({ type: "array" })).toEqual([]); + test("generates empty array for required array", () => { + const parentSchema = { required: ["testArray"] }; + expect( + generateDefaultValue({ type: "array" }, "testArray", parentSchema), + ).toEqual([]); + }); + + test("generates undefined for non-required array", () => { + const parentSchema = { required: ["otherField"] }; + expect( + generateDefaultValue({ type: "array" }, "testArray", parentSchema), + ).toBe(undefined); }); test("generates empty object for non-required object", () => { diff --git a/client/src/utils/schemaUtils.ts b/client/src/utils/schemaUtils.ts index 7a175142..02603d0e 100644 --- a/client/src/utils/schemaUtils.ts +++ b/client/src/utils/schemaUtils.ts @@ -109,7 +109,7 @@ export function generateDefaultValue( case "boolean": return isRequired ? false : undefined; case "array": - return []; + return isRequired ? [] : undefined; case "object": { if (!schema.properties) return {};