diff --git a/src/schemas/0.1.ts b/src/schemas/0.1.ts index f478c3e..093a0ed 100644 --- a/src/schemas/0.1.ts +++ b/src/schemas/0.1.ts @@ -34,18 +34,16 @@ export const McpbManifestServerSchema = z.strictObject({ mcp_config: McpbManifestMcpConfigSchema, }); -export const McpbManifestCompatibilitySchema = z - .strictObject({ - claude_desktop: z.string().optional(), - platforms: z.array(z.enum(["darwin", "win32", "linux"])).optional(), - runtimes: z - .strictObject({ - python: z.string().optional(), - node: z.string().optional(), - }) - .optional(), - }) - .passthrough(); +export const McpbManifestCompatibilitySchema = z.strictObject({ + claude_desktop: z.string().optional(), + platforms: z.array(z.enum(["darwin", "win32", "linux"])).optional(), + runtimes: z + .strictObject({ + python: z.string().optional(), + node: z.string().optional(), + }) + .optional(), +}); export const McpbManifestToolSchema = z.strictObject({ name: z.string(), @@ -81,11 +79,8 @@ export const McpbUserConfigValuesSchema = z.record( export const McpbManifestSchema = z .strictObject({ $schema: z.string().optional(), - dxt_version: z - .string() - .optional() - .describe("@deprecated Use manifest_version instead"), - manifest_version: z.string().optional(), + dxt_version: z.literal("0.1").optional(), + manifest_version: z.literal("0.1").optional(), name: z.string(), display_name: z.string().optional(), version: z.string(), @@ -105,7 +100,6 @@ export const McpbManifestSchema = z prompts_generated: z.boolean().optional(), keywords: z.array(z.string()).optional(), license: z.string().optional(), - privacy_policies: z.array(z.string()).optional(), compatibility: McpbManifestCompatibilitySchema.optional(), user_config: z .record(z.string(), McpbUserConfigurationOptionSchema) diff --git a/src/schemas/0.2.ts b/src/schemas/0.2.ts index 86332bd..1669ff9 100644 --- a/src/schemas/0.2.ts +++ b/src/schemas/0.2.ts @@ -8,13 +8,13 @@ export const McpServerConfigSchema = z.strictObject({ env: z.record(z.string(), z.string()).optional(), }); -export const McpbManifestAuthorSchema = z.object({ +export const McpbManifestAuthorSchema = z.strictObject({ name: z.string(), email: z.string().email().optional(), url: z.string().url().optional(), }); -export const McpbManifestRepositorySchema = z.object({ +export const McpbManifestRepositorySchema = z.strictObject({ type: z.string(), url: z.string().url(), }); @@ -28,38 +28,36 @@ export const McpbManifestMcpConfigSchema = McpServerConfigSchema.extend({ .optional(), }); -export const McpbManifestServerSchema = z.object({ +export const McpbManifestServerSchema = z.strictObject({ type: z.enum(["python", "node", "binary"]), entry_point: z.string(), mcp_config: McpbManifestMcpConfigSchema, }); -export const McpbManifestCompatibilitySchema = z - .object({ - claude_desktop: z.string().optional(), - platforms: z.array(z.enum(["darwin", "win32", "linux"])).optional(), - runtimes: z - .object({ - python: z.string().optional(), - node: z.string().optional(), - }) - .optional(), - }) - .passthrough(); +export const McpbManifestCompatibilitySchema = z.strictObject({ + claude_desktop: z.string().optional(), + platforms: z.array(z.enum(["darwin", "win32", "linux"])).optional(), + runtimes: z + .strictObject({ + python: z.string().optional(), + node: z.string().optional(), + }) + .optional(), +}); -export const McpbManifestToolSchema = z.object({ +export const McpbManifestToolSchema = z.strictObject({ name: z.string(), description: z.string().optional(), }); -export const McpbManifestPromptSchema = z.object({ +export const McpbManifestPromptSchema = z.strictObject({ name: z.string(), description: z.string().optional(), arguments: z.array(z.string()).optional(), text: z.string(), }); -export const McpbUserConfigurationOptionSchema = z.object({ +export const McpbUserConfigurationOptionSchema = z.strictObject({ type: z.enum(["string", "number", "boolean", "directory", "file"]), title: z.string(), description: z.string(), @@ -78,44 +76,36 @@ export const McpbUserConfigValuesSchema = z.record( z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]), ); -export const McpbManifestSchema = z - .object({ - $schema: z.string().optional(), - dxt_version: z - .string() - .optional() - .describe("@deprecated Use manifest_version instead"), - manifest_version: z.string().optional(), - name: z.string(), - display_name: z.string().optional(), - version: z.string(), - description: z.string(), - long_description: z.string().optional(), - author: McpbManifestAuthorSchema, - repository: McpbManifestRepositorySchema.optional(), - homepage: z.string().url().optional(), - documentation: z.string().url().optional(), - support: z.string().url().optional(), - icon: z.string().optional(), - screenshots: z.array(z.string()).optional(), - server: McpbManifestServerSchema, - tools: z.array(McpbManifestToolSchema).optional(), - tools_generated: z.boolean().optional(), - prompts: z.array(McpbManifestPromptSchema).optional(), - prompts_generated: z.boolean().optional(), - keywords: z.array(z.string()).optional(), - license: z.string().optional(), - compatibility: McpbManifestCompatibilitySchema.optional(), - user_config: z - .record(z.string(), McpbUserConfigurationOptionSchema) - .optional(), - }) - .refine((data) => !!(data.dxt_version || data.manifest_version), { - message: - "Either 'dxt_version' (deprecated) or 'manifest_version' must be provided", - }); +export const McpbManifestSchema = z.strictObject({ + $schema: z.string().optional(), + manifest_version: z.literal("0.2"), + name: z.string(), + display_name: z.string().optional(), + version: z.string(), + description: z.string(), + long_description: z.string().optional(), + author: McpbManifestAuthorSchema, + repository: McpbManifestRepositorySchema.optional(), + homepage: z.string().url().optional(), + documentation: z.string().url().optional(), + support: z.string().url().optional(), + icon: z.string().optional(), + screenshots: z.array(z.string()).optional(), + server: McpbManifestServerSchema, + tools: z.array(McpbManifestToolSchema).optional(), + tools_generated: z.boolean().optional(), + prompts: z.array(McpbManifestPromptSchema).optional(), + prompts_generated: z.boolean().optional(), + keywords: z.array(z.string()).optional(), + license: z.string().optional(), + privacy_policies: z.array(z.string().url()).optional(), + compatibility: McpbManifestCompatibilitySchema.optional(), + user_config: z + .record(z.string(), McpbUserConfigurationOptionSchema) + .optional(), +}); -export const McpbSignatureInfoSchema = z.object({ +export const McpbSignatureInfoSchema = z.strictObject({ status: z.enum(["signed", "unsigned", "self-signed"]), publisher: z.string().optional(), issuer: z.string().optional(),