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
This commit is contained in:
Jean-Marc Le Roux 2025-08-30 14:45:29 +02:00
commit 3cdb4bd744
2 changed files with 15 additions and 5 deletions

View file

@ -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", () => {

View file

@ -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 {};