From 16606975882b548e662f775ce4811b82d217492e Mon Sep 17 00:00:00 2001 From: Joan Xie Date: Wed, 29 Oct 2025 17:01:04 -0700 Subject: [PATCH] refactor: remove legacy mcpb-manifest.schema.json Removed the non-versioned mcpb-manifest.schema.json from schemas/ directory. All schemas are now explicitly versioned. Available schemas: - mcpb-manifest-v0.1.schema.json - mcpb-manifest-v0.2.schema.json - mcpb-manifest-v0.3.schema.json - mcpb-manifest-latest.schema.json Consumers should use -latest or specific version to be explicit about which schema version they're validating against. --- schemas/mcpb-manifest.schema.json | 376 ------------------------------ scripts/build-mcpb-schema.js | 23 +- 2 files changed, 7 insertions(+), 392 deletions(-) delete mode 100644 schemas/mcpb-manifest.schema.json diff --git a/schemas/mcpb-manifest.schema.json b/schemas/mcpb-manifest.schema.json deleted file mode 100644 index a2dc082..0000000 --- a/schemas/mcpb-manifest.schema.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "type": "object", - "properties": { - "$schema": { - "type": "string" - }, - "dxt_version": { - "type": "string", - "const": "0.3", - "description": "@deprecated Use manifest_version instead" - }, - "manifest_version": { - "type": "string", - "const": "0.3" - }, - "name": { - "type": "string" - }, - "display_name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "description": { - "type": "string" - }, - "long_description": { - "type": "string" - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string", - "format": "email" - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "name" - ], - "additionalProperties": false - }, - "repository": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "type", - "url" - ], - "additionalProperties": false - }, - "homepage": { - "type": "string", - "format": "uri" - }, - "documentation": { - "type": "string", - "format": "uri" - }, - "support": { - "type": "string", - "format": "uri" - }, - "icon": { - "type": "string" - }, - "icons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "src": { - "type": "string" - }, - "sizes": { - "type": "string", - "pattern": "^\\d+x\\d+$" - }, - "theme": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "src", - "sizes" - ], - "additionalProperties": false - } - }, - "screenshots": { - "type": "array", - "items": { - "type": "string" - } - }, - "localization": { - "type": "object", - "properties": { - "resources": { - "type": "string", - "pattern": "\\$\\{locale\\}" - }, - "default_locale": { - "type": "string", - "pattern": "^[A-Za-z0-9]{2,8}(?:-[A-Za-z0-9]{1,8})*$" - } - }, - "required": [ - "resources", - "default_locale" - ], - "additionalProperties": false - }, - "server": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "python", - "node", - "binary" - ] - }, - "entry_point": { - "type": "string" - }, - "mcp_config": { - "type": "object", - "properties": { - "command": { - "type": "string" - }, - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "env": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "platform_overrides": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "command": { - "$ref": "#/properties/server/properties/mcp_config/properties/command" - }, - "args": { - "$ref": "#/properties/server/properties/mcp_config/properties/args" - }, - "env": { - "$ref": "#/properties/server/properties/mcp_config/properties/env" - } - }, - "additionalProperties": false - } - } - }, - "required": [ - "command" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "entry_point", - "mcp_config" - ], - "additionalProperties": false - }, - "tools": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": [ - "name" - ], - "additionalProperties": false - } - }, - "tools_generated": { - "type": "boolean" - }, - "prompts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "arguments": { - "type": "array", - "items": { - "type": "string" - } - }, - "text": { - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "additionalProperties": false - } - }, - "prompts_generated": { - "type": "boolean" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "license": { - "type": "string" - }, - "privacy_policies": { - "type": "array", - "items": { - "type": "string", - "format": "uri" - } - }, - "compatibility": { - "type": "object", - "properties": { - "claude_desktop": { - "type": "string" - }, - "platforms": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "darwin", - "win32", - "linux" - ] - } - }, - "runtimes": { - "type": "object", - "properties": { - "python": { - "type": "string" - }, - "node": { - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "user_config": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string", - "number", - "boolean", - "directory", - "file" - ] - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "required": { - "type": "boolean" - }, - "default": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "multiple": { - "type": "boolean" - }, - "sensitive": { - "type": "boolean" - }, - "min": { - "type": "number" - }, - "max": { - "type": "number" - } - }, - "required": [ - "type", - "title", - "description" - ], - "additionalProperties": false - } - }, - "_meta": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": {} - } - } - }, - "required": [ - "name", - "version", - "description", - "author", - "server" - ], - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" -} \ No newline at end of file diff --git a/scripts/build-mcpb-schema.js b/scripts/build-mcpb-schema.js index c669528..a62fcdb 100644 --- a/scripts/build-mcpb-schema.js +++ b/scripts/build-mcpb-schema.js @@ -12,7 +12,7 @@ import path from "node:path"; const distDir = path.join(import.meta.dirname, "../dist"); const schemasDir = path.join(import.meta.dirname, "../schemas"); -// Versioned manifest schemas (for both dist/ and schemas/) +// Versioned manifest schemas const versionedManifestSchemas = { "mcpb-manifest-v0.1": McpbManifestSchema_v0_1, "mcpb-manifest-v0.2": McpbManifestSchema_v0_2, @@ -20,22 +20,16 @@ const versionedManifestSchemas = { "mcpb-manifest-latest": McpbManifestSchemaLatest, }; -// Legacy alias (only for schemas/ directory, not exported from package) -const schemasOnlyAliases = { - "mcpb-manifest": McpbManifestSchemaLatest, -}; - // Other schemas const otherSchemas = { "mcpb-signature-info": McpbSignatureInfoSchema, }; -// Generate versioned schemas and other schemas to dist/ +const allSchemas = { ...versionedManifestSchemas, ...otherSchemas }; + +// Generate all schemas to dist/ await fs.mkdir(distDir, { recursive: true }); -for (const [key, schema] of Object.entries({ - ...versionedManifestSchemas, - ...otherSchemas, -})) { +for (const [key, schema] of Object.entries(allSchemas)) { const jsonSchema = zodToJsonSchema(schema); const filePath = path.join(distDir, `${key}.schema.json`); await fs.writeFile(filePath, JSON.stringify(jsonSchema, null, 2), { @@ -43,12 +37,9 @@ for (const [key, schema] of Object.entries({ }); } -// Generate all manifest schemas to schemas/ (including legacy alias) +// Generate all versioned manifest schemas to schemas/ await fs.mkdir(schemasDir, { recursive: true }); -for (const [key, schema] of Object.entries({ - ...versionedManifestSchemas, - ...schemasOnlyAliases, -})) { +for (const [key, schema] of Object.entries(versionedManifestSchemas)) { const jsonSchema = zodToJsonSchema(schema); const filePath = path.join(schemasDir, `${key}.schema.json`); await fs.writeFile(filePath, JSON.stringify(jsonSchema, null, 2), {