From 49af7a8b0d2f7fe5b3bd72a90e4da35e2cd87ad0 Mon Sep 17 00:00:00 2001 From: jubnl Date: Mon, 20 Apr 2026 07:57:40 +0200 Subject: [PATCH] fix(mcp): fix z.record() Zod v4 API compat in transport tool schemas Zod v4 changed z.record(valueType) to z.record(keyType, valueType). The single-arg form now sets keyType, leaving valueType as undefined. This caused tools/list to throw 'Cannot read properties of undefined (reading _zod)' when the SDK tried to serialize the metadata field to JSON Schema, silently returning an error for every tools/list call and making all MCP tools invisible in claude.ai. --- server/src/mcp/tools/transports.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/mcp/tools/transports.ts b/server/src/mcp/tools/transports.ts index c6e44812..535ab7bc 100644 --- a/server/src/mcp/tools/transports.ts +++ b/server/src/mcp/tools/transports.ts @@ -44,7 +44,7 @@ export function registerTransportTools(server: McpServer, userId: number, scopes reservation_end_time: z.string().optional().describe('ISO 8601 datetime or time string for arrival'), confirmation_number: z.string().max(100).optional(), notes: z.string().max(1000).optional(), - metadata: z.record(z.string()).optional().describe('Type-specific metadata: flights → { airline, flight_number, departure_airport, arrival_airport }; trains → { train_number, platform, seat }'), + metadata: z.record(z.string(), z.string()).optional().describe('Type-specific metadata: flights → { airline, flight_number, departure_airport, arrival_airport }; trains → { train_number, platform, seat }'), endpoints: endpointSchema, needs_review: z.boolean().optional(), }, @@ -95,7 +95,7 @@ export function registerTransportTools(server: McpServer, userId: number, scopes reservation_end_time: z.string().optional().describe('ISO 8601 datetime or time string for arrival'), confirmation_number: z.string().max(100).optional(), notes: z.string().max(1000).optional(), - metadata: z.record(z.string()).optional().describe('Type-specific metadata: flights → { airline, flight_number, departure_airport, arrival_airport }; trains → { train_number, platform, seat }'), + metadata: z.record(z.string(), z.string()).optional().describe('Type-specific metadata: flights → { airline, flight_number, departure_airport, arrival_airport }; trains → { train_number, platform, seat }'), endpoints: endpointSchema, needs_review: z.boolean().optional(), },