From e99517d75cd10d69e578956bb247d95e24930d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Barthelet?= Date: Fri, 28 Nov 2025 14:37:41 +0100 Subject: [PATCH] Implement BYO zod v3 or v4 Following recommendations from https://zod.dev/library-authors --- docs/quickstart.md | 2 +- examples/basic-host/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- .../customer-segmentation-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- package-lock.json | 43 ++++++++----------- package.json | 9 ++-- scripts/generate-schemas.ts | 8 ++-- src/app-bridge.ts | 10 ++--- src/generated/schema.json | 20 ++++----- src/generated/schema.test.ts | 2 +- src/generated/schema.ts | 2 +- 18 files changed, 57 insertions(+), 59 deletions(-) diff --git a/docs/quickstart.md b/docs/quickstart.md index 3f586eaf..f5134f52 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -102,7 +102,7 @@ import cors from "cors"; import express from "express"; import fs from "node:fs/promises"; import path from "node:path"; -import { z } from "zod"; +import * as z from "zod"; const server = new McpServer({ name: "My MCP App Server", diff --git a/examples/basic-host/package.json b/examples/basic-host/package.json index 6a686b64..7615eb15 100644 --- a/examples/basic-host/package.json +++ b/examples/basic-host/package.json @@ -15,7 +15,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/express": "^5.0.0", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 77823841..35aa9f35 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -15,7 +15,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index c19ecec3..a44e65d1 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -13,7 +13,7 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index e2160e86..80cacc9e 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index a22effb5..32e6cbf1 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -18,7 +18,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index f207cf73..23083964 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 2de3b609..a1e073f3 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -19,7 +19,7 @@ "chart.js": "^4.4.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 861d7d20..21455742 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -18,7 +18,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", "systeminformation": "^5.27.11", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 06f47a8c..d691c8aa 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -19,7 +19,7 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "three": "^0.181.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index e48d26c7..4468d586 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -17,7 +17,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "cheerio": "^1.0.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", diff --git a/package-lock.json b/package-lock.json index e7c93883..e99ca0fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,7 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.24.3", "react": "^19.2.0", - "react-dom": "^19.2.0", - "zod": "^3.25" + "react-dom": "^19.2.0" }, "devDependencies": { "@types/bun": "^1.3.2", @@ -32,7 +31,8 @@ "ts-to-zod": "^5.1.0", "tsx": "^4.21.0", "typedoc": "^0.28.14", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "zod": "^4.1.13" }, "optionalDependencies": { "@rollup/rollup-darwin-arm64": "^4.53.3", @@ -40,6 +40,9 @@ "@rollup/rollup-linux-arm64-gnu": "^4.53.3", "@rollup/rollup-linux-x64-gnu": "^4.53.3", "@rollup/rollup-win32-x64-msvc": "^4.53.3" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" } }, "examples/basic-host": { @@ -50,7 +53,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/express": "^5.0.0", @@ -84,7 +87,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -115,7 +118,7 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -144,7 +147,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -174,7 +177,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -206,7 +209,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -237,7 +240,7 @@ "chart.js": "^4.4.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -270,7 +273,7 @@ "@modelcontextprotocol/sdk": "^1.22.0", "chart.js": "^4.4.0", "systeminformation": "^5.27.11", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -301,7 +304,7 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "three": "^0.181.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -334,7 +337,7 @@ "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.22.0", "cheerio": "^1.0.0", - "zod": "^3.25.0" + "zod": "^4.1.13" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -5696,16 +5699,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/ts-to-zod/node_modules/zod": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/tslib": { "version": "2.8.1", "dev": true, @@ -6329,7 +6322,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 59758669..5dd48d7a 100644 --- a/package.json +++ b/package.json @@ -64,13 +64,16 @@ "ts-to-zod": "^5.1.0", "tsx": "^4.21.0", "typedoc": "^0.28.14", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "zod": "^4.1.13" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.24.3", "react": "^19.2.0", - "react-dom": "^19.2.0", - "zod": "^3.25" + "react-dom": "^19.2.0" }, "optionalDependencies": { "@rollup/rollup-darwin-arm64": "^4.53.3", diff --git a/scripts/generate-schemas.ts b/scripts/generate-schemas.ts index 87bf5168..a7d1347e 100644 --- a/scripts/generate-schemas.ts +++ b/scripts/generate-schemas.ts @@ -181,14 +181,14 @@ function postProcess(content: string): string { // 1. Update import to use zod/v4 content = content.replace( 'import { z } from "zod";', - 'import { z } from "zod/v4";', + 'import * as z from "zod/v4";', ); // 2. Add MCP SDK schema imports const mcpImports = EXTERNAL_TYPE_SCHEMAS.join(",\n "); content = content.replace( - 'import { z } from "zod/v4";', - `import { z } from "zod/v4"; + 'import * as z from "zod/v4";', + `import * as z from "zod/v4"; import { ${mcpImports}, } from "@modelcontextprotocol/sdk/types.js";`, @@ -262,7 +262,7 @@ function replaceRecordAndWithLooseObject(content: string): string { function postProcessTests(content: string): string { content = content.replace( 'import { z } from "zod";', - 'import { z } from "zod/v4";', + 'import * as z from "zod/v4";', ); content = content.replace( diff --git a/src/app-bridge.ts b/src/app-bridge.ts index c8e3b304..4979ac6f 100644 --- a/src/app-bridge.ts +++ b/src/app-bridge.ts @@ -1,5 +1,5 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { ZodLiteral, ZodObject } from "zod/v4"; +import * as z from "zod/v4/core"; import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; import { @@ -838,10 +838,10 @@ export class AppBridge extends Protocol { } private forwardRequest< - Req extends ZodObject<{ - method: ZodLiteral; + Req extends z.$ZodObject<{ + method: z.$ZodLiteral; }>, - Res extends ZodObject<{}>, + Res extends z.$ZodObject<{}>, >(requestSchema: Req, resultSchema: Res) { this.setRequestHandler(requestSchema, async (request, extra) => { console.log(`Forwarding request ${request.method} from MCP UI client`); @@ -851,7 +851,7 @@ export class AppBridge extends Protocol { }); } private forwardNotification< - N extends ZodObject<{ method: ZodLiteral }>, + N extends z.$ZodObject<{ method: z.$ZodLiteral }>, >(notificationSchema: N) { this.setNotificationHandler(notificationSchema, async (notification) => { console.log( diff --git a/src/generated/schema.json b/src/generated/schema.json index f3c1b180..4d4ae53b 100644 --- a/src/generated/schema.json +++ b/src/generated/schema.json @@ -1212,7 +1212,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1259,7 +1259,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1306,7 +1306,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1380,7 +1380,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1473,7 +1473,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1871,7 +1871,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1918,7 +1918,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -1965,7 +1965,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -2039,7 +2039,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false @@ -2132,7 +2132,7 @@ "lastModified": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-]\\d{2}:\\d{2})))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false diff --git a/src/generated/schema.test.ts b/src/generated/schema.test.ts index 1751067e..051ac8e5 100644 --- a/src/generated/schema.test.ts +++ b/src/generated/schema.test.ts @@ -1,7 +1,7 @@ // Generated by ts-to-zod // Integration tests verifying schemas match TypeScript types // Run: npm run generate:schemas -import { z } from "zod/v4"; +import * as z from "zod/v4"; import * as spec from "../spec.types.js"; import * as generated from "./schema.js"; diff --git a/src/generated/schema.ts b/src/generated/schema.ts index 8cc87fde..2fa4a13f 100644 --- a/src/generated/schema.ts +++ b/src/generated/schema.ts @@ -1,7 +1,7 @@ // Generated by ts-to-zod // Post-processed for Zod v4 and MCP SDK compatibility // Run: npm run generate:schemas -import { z } from "zod/v4"; +import * as z from "zod/v4"; import { ContentBlockSchema, CallToolResultSchema,