From ca977811cc973206e4ffb33b1c40546d5e8096ab Mon Sep 17 00:00:00 2001 From: Caitie McCaffrey Date: Mon, 11 May 2026 16:00:24 -0700 Subject: [PATCH] update generation scripts and readme --- README.md | 18 ++++++++++++++++-- scripts/generate-schemas.ts | 7 +++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2aa171a..0dd6a3d 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,22 @@ Tasks are useful for: The full specification for Tasks as defined in the `2025-11-25` MCP protocol version can be found at: - **Specification:** [`docs/specification/2025-11-25/tasks.mdx`](docs/specification/2025-11-25/tasks.mdx) -- **Schema (TypeScript):** [`schema/draft/2025-11-25/schema.ts`](schema/draft/2025-11-25/schema.ts) -- **Schema (JSON):** [`schema/draft/2025-11-25/schema.json`](schema/draft/2025-11-25/schema.json) +- **Schema (TypeScript):** [`schema/2025-11-25/schema.ts`](schema/2025-11-25/schema.ts) +- **Schema (JSON):** [`schema/2025-11-25/schema.json`](schema/2025-11-25/schema.json) + +## Development + +### Schema Generation + +The JSON Schema is auto-generated from the TypeScript type definitions using [ts-to-zod](https://github.com/fabien0102/ts-to-zod) and Zod's `toJSONSchema()`. Do not hand-edit `schema.json` or `generated/schema.ts`. + +```bash +# Generate Zod schemas and JSON Schema from schema.ts +npm run generate:schemas + +# Verify TypeScript compiles and generated files are up to date +npm run check:schema +``` ## SEPs diff --git a/scripts/generate-schemas.ts b/scripts/generate-schemas.ts index 3329cbb..860bd77 100644 --- a/scripts/generate-schemas.ts +++ b/scripts/generate-schemas.ts @@ -23,7 +23,7 @@ * @see https://github.com/fabien0102/ts-to-zod */ -import { readFileSync, writeFileSync, existsSync } from "node:fs"; +import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs"; import { dirname, join, relative } from "node:path"; import { fileURLToPath } from "node:url"; import { generate } from "ts-to-zod"; @@ -33,7 +33,7 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const PROJECT_ROOT = join(__dirname, ".."); -const SCHEMA_DIR = join(PROJECT_ROOT, "schema", "draft", "2025-11-25"); +const SCHEMA_DIR = join(PROJECT_ROOT, "schema", "2025-11-25"); const SPEC_TYPES_FILE = join(SCHEMA_DIR, "schema.ts"); const GENERATED_DIR = join(SCHEMA_DIR, "generated"); const SCHEMA_OUTPUT_FILE = join(GENERATED_DIR, "schema.ts"); @@ -164,6 +164,9 @@ async function main() { return; } + // Ensure generated directory exists + mkdirSync(GENERATED_DIR, { recursive: true }); + // Write Zod schemas writeFileSync(SCHEMA_OUTPUT_FILE, schemasContent, "utf-8"); console.log(`✅ Written: ${SCHEMA_OUTPUT_FILE}`);