@famgia/omnify-mcp 0.0.65 → 0.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -81,6 +81,7 @@ var CreateSchemaInputSchema = import_zod.z.object({
81
81
  properties: import_zod.z.record(import_zod.z.object({
82
82
  type: PropertyTypeEnum,
83
83
  displayName: LocalizedStringSchema.optional(),
84
+ placeholder: LocalizedStringSchema.optional().describe("Placeholder text for form inputs (string or locale map)"),
84
85
  nullable: import_zod.z.boolean().optional(),
85
86
  unique: import_zod.z.boolean().optional(),
86
87
  default: import_zod.z.unknown().optional(),
@@ -93,7 +94,14 @@ var CreateSchemaInputSchema = import_zod.z.object({
93
94
  target: import_zod.z.string().optional(),
94
95
  onDelete: ReferentialActionEnum.optional(),
95
96
  joinTable: import_zod.z.string().optional(),
96
- multiple: import_zod.z.boolean().optional()
97
+ multiple: import_zod.z.boolean().optional(),
98
+ fields: import_zod.z.record(import_zod.z.object({
99
+ nullable: import_zod.z.boolean().optional(),
100
+ hidden: import_zod.z.boolean().optional(),
101
+ fillable: import_zod.z.boolean().optional(),
102
+ length: import_zod.z.number().optional(),
103
+ placeholder: LocalizedStringSchema.optional()
104
+ })).optional().describe("Per-field overrides for compound types")
97
105
  })).optional(),
98
106
  values: import_zod.z.array(import_zod.z.union([
99
107
  import_zod.z.string(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Omnify MCP Server\n *\n * Provides tools for AI assistants to create and validate Omnify schemas.\n * Supports Claude Code and other MCP-compatible AI tools.\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport * as yaml from 'yaml';\n\n// ============================================================================\n// Schema Definitions for Tools\n// ============================================================================\n\nconst PropertyTypeEnum = z.enum([\n 'String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean',\n 'Text', 'LongText', 'Date', 'Time', 'Timestamp',\n 'Json', 'Email', 'Password', 'File', 'Point', 'Coordinates',\n 'Enum', 'EnumRef', 'Association',\n]);\n\nconst RelationTypeEnum = z.enum([\n 'OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany',\n 'MorphTo', 'MorphOne', 'MorphMany', 'MorphToMany', 'MorphedByMany',\n]);\n\nconst ReferentialActionEnum = z.enum([\n 'CASCADE', 'SET NULL', 'SET DEFAULT', 'RESTRICT', 'NO ACTION',\n]);\n\nconst LocalizedStringSchema = z.union([\n z.string(),\n z.record(z.string()),\n]);\n\nconst CreateSchemaInputSchema = z.object({\n name: z.string().describe('Schema name in PascalCase (e.g., User, BlogPost)'),\n kind: z.enum(['object', 'enum']).default('object').describe('Schema kind'),\n displayName: LocalizedStringSchema.optional().describe('Human-readable name (string or locale map)'),\n group: z.string().optional().describe('Schema group for organization'),\n properties: z.record(z.object({\n type: PropertyTypeEnum,\n displayName: LocalizedStringSchema.optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.unknown().optional(),\n length: z.number().optional(),\n unsigned: z.boolean().optional(),\n precision: z.number().optional(),\n scale: z.number().optional(),\n enum: z.union([z.string(), z.array(z.unknown())]).optional(),\n relation: RelationTypeEnum.optional(),\n target: z.string().optional(),\n onDelete: ReferentialActionEnum.optional(),\n joinTable: z.string().optional(),\n multiple: z.boolean().optional(),\n })).optional(),\n values: z.array(z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: LocalizedStringSchema.optional(),\n }),\n ])).optional().describe('Enum values (only for kind: enum)'),\n options: z.object({\n softDelete: z.boolean().optional(),\n timestamps: z.boolean().optional(),\n authenticatable: z.boolean().optional(),\n tableName: z.string().optional(),\n idType: z.enum(['BigInt', 'Int', 'Uuid', 'String']).optional(),\n }).optional(),\n});\n\n// ============================================================================\n// Tool Implementations\n// ============================================================================\n\nfunction getPropertyTypes(): string {\n return `# Omnify Property Types\n\n## Primitive Types\n- **String**: VARCHAR(255) - short text, use \\`length\\` for custom size\n- **Int**: INTEGER - 32-bit integer\n- **BigInt**: BIGINT - 64-bit integer (default for IDs)\n- **Float**: FLOAT - floating point number\n- **Decimal**: DECIMAL(precision, scale) - exact decimal, use for money\n- **Boolean**: BOOLEAN - true/false\n\n## Text Types\n- **Text**: TEXT (~65KB) - medium text content\n- **LongText**: LONGTEXT (~4GB) - large text content\n\n## Date/Time Types\n- **Date**: DATE - date only (YYYY-MM-DD)\n- **Time**: TIME - time only (HH:MM:SS)\n- **Timestamp**: TIMESTAMP - date and time\n\n## Special Types\n- **Email**: VARCHAR(255) - validated email format\n- **Password**: VARCHAR(255) - hashed password (auto-hidden)\n- **Json**: JSON - structured data\n- **File**: Polymorphic file attachment\n\n## Enum Types\n- **Enum**: Inline enum values\n- **EnumRef**: Reference to shared enum schema\n\n## Association Types (Relations)\n- **Association**: Relationship to another schema\n - relation: OneToOne, OneToMany, ManyToOne, ManyToMany\n - relation: MorphTo, MorphOne, MorphMany (polymorphic)\n - target: Target schema name\n - onDelete: CASCADE, SET NULL, RESTRICT\n`;\n}\n\nfunction getRelationshipGuide(): string {\n return `# Omnify Relationship Guide\n\n## Standard Relations\n\n### ManyToOne (belongs to)\nMost common - creates foreign key column.\n\\`\\`\\`yaml\nauthor:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n\\`\\`\\`\n\n### OneToMany (has many)\nInverse of ManyToOne - no column created.\n\\`\\`\\`yaml\nposts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n### ManyToMany\nCreates pivot table automatically.\n\\`\\`\\`yaml\ntags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags # optional custom name\n\\`\\`\\`\n\n### OneToOne\nUnique foreign key relationship.\n\\`\\`\\`yaml\nprofile:\n type: Association\n relation: OneToOne\n target: UserProfile\n\\`\\`\\`\n\n## Polymorphic Relations\n\n### MorphTo (owning side)\nCreates {name}_type and {name}_id columns.\n\\`\\`\\`yaml\ncommentable:\n type: Association\n relation: MorphTo\n\\`\\`\\`\n\n### MorphMany (inverse side)\nNo columns - defines inverse relationship.\n\\`\\`\\`yaml\ncomments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n`;\n}\n\nfunction getExampleSchemas(): string {\n return `# Omnify Schema Examples\n\n## User Schema (with authentication)\n\\`\\`\\`yaml\nname: User\ndisplayName:\n ja: ユーザー\n en: User\noptions:\n softDelete: true\n authenticatable: true\nproperties:\n name:\n type: String\n displayName:\n ja: 氏名\n en: Full Name\n email:\n type: Email\n unique: true\n displayName:\n ja: メールアドレス\n en: Email Address\n password:\n type: Password\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n## Post Schema (with relations)\n\\`\\`\\`yaml\nname: Post\ndisplayName:\n ja: 投稿\n en: Post\noptions:\n softDelete: true\n indexes:\n - columns: [published_at]\n - columns: [status, published_at]\nproperties:\n title:\n type: String\n displayName:\n ja: タイトル\n en: Title\n slug:\n type: String\n unique: true\n content:\n type: LongText\n displayName:\n ja: 本文\n en: Content\n status:\n type: EnumRef\n enum: PostStatus\n default: draft\n published_at:\n type: Timestamp\n nullable: true\n author:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n category:\n type: Association\n relation: ManyToOne\n target: Category\n tags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags\n comments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n\n## Enum Schema\n\\`\\`\\`yaml\nname: PostStatus\nkind: enum\ndisplayName:\n ja: 投稿ステータス\n en: Post Status\nvalues:\n - value: draft\n label:\n ja: 下書き\n en: Draft\n - value: pending\n label:\n ja: 審査中\n en: Pending Review\n - value: published\n label:\n ja: 公開済み\n en: Published\n - value: archived\n label:\n ja: アーカイブ\n en: Archived\n\\`\\`\\`\n\n## Category Schema (self-referencing)\n\\`\\`\\`yaml\nname: Category\ndisplayName:\n ja: カテゴリ\n en: Category\nproperties:\n name:\n type: String\n length: 100\n slug:\n type: String\n unique: true\n description:\n type: Text\n nullable: true\n parent:\n type: Association\n relation: ManyToOne\n target: Category\n nullable: true\n children:\n type: Association\n relation: OneToMany\n target: Category\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n`;\n}\n\nfunction createSchema(input: z.infer<typeof CreateSchemaInputSchema>): string {\n const schema: Record<string, unknown> = {\n name: input.name,\n };\n\n if (input.kind && input.kind !== 'object') {\n schema.kind = input.kind;\n }\n\n if (input.displayName) {\n schema.displayName = input.displayName;\n }\n\n if (input.group) {\n schema.group = input.group;\n }\n\n if (input.options && Object.keys(input.options).length > 0) {\n schema.options = input.options;\n }\n\n if (input.properties && Object.keys(input.properties).length > 0) {\n schema.properties = input.properties;\n }\n\n if (input.values && input.values.length > 0) {\n schema.values = input.values;\n }\n\n return yaml.stringify(schema);\n}\n\nfunction validateSchemaYaml(yamlContent: string): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n const schema = yaml.parse(yamlContent);\n\n // Check required fields\n if (!schema.name) {\n errors.push('Missing required field: name');\n }\n\n // Check kind\n if (schema.kind && !['object', 'enum'].includes(schema.kind)) {\n errors.push(`Invalid kind: ${schema.kind}. Must be 'object' or 'enum'`);\n }\n\n // Validate enum schema\n if (schema.kind === 'enum') {\n if (!schema.values || schema.values.length === 0) {\n errors.push('Enum schema must have values array');\n }\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n warnings.push('Enum schemas should not have properties');\n }\n }\n\n // Validate object schema\n if (schema.kind !== 'enum') {\n if (schema.values && schema.values.length > 0) {\n warnings.push('Object schemas should not have values (use kind: enum for enums)');\n }\n\n // Validate properties\n if (schema.properties) {\n for (const [propName, propDef] of Object.entries(schema.properties)) {\n const prop = propDef as Record<string, unknown>;\n\n if (!prop.type) {\n errors.push(`Property '${propName}' missing required field: type`);\n }\n\n // Validate Association\n if (prop.type === 'Association') {\n if (!prop.relation) {\n errors.push(`Property '${propName}' (Association) missing required field: relation`);\n }\n if (prop.relation !== 'MorphTo' && !prop.target) {\n errors.push(`Property '${propName}' (Association) missing required field: target`);\n }\n }\n\n // Validate EnumRef\n if (prop.type === 'EnumRef' && !prop.enum) {\n errors.push(`Property '${propName}' (EnumRef) missing required field: enum`);\n }\n\n // Validate Enum\n if (prop.type === 'Enum' && !prop.enum) {\n errors.push(`Property '${propName}' (Enum) missing required field: enum`);\n }\n }\n }\n }\n\n return { valid: errors.length === 0, errors, warnings };\n } catch (e) {\n return {\n valid: false,\n errors: [`Invalid YAML: ${e instanceof Error ? e.message : 'Unknown error'}`],\n warnings: [],\n };\n }\n}\n\n// ============================================================================\n// MCP Server Setup\n// ============================================================================\n\nconst server = new Server(\n {\n name: 'omnify-mcp',\n version: '0.0.1',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n);\n\n// List available tools\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'omnify_create_schema',\n description: 'Create an Omnify schema YAML file. Use this to generate database models with Laravel and TypeScript support.',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'Schema name in PascalCase (e.g., User, BlogPost)',\n },\n kind: {\n type: 'string',\n enum: ['object', 'enum'],\n default: 'object',\n description: 'Schema kind - object for tables, enum for enumeration types',\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n description: 'Human-readable name. Can be string or locale map like { ja: \"日本語\", en: \"English\" }',\n },\n group: {\n type: 'string',\n description: 'Schema group for organization (e.g., auth, blog, shop)',\n },\n properties: {\n type: 'object',\n description: 'Property definitions. Each property has type and optional modifiers.',\n additionalProperties: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean', 'Text', 'LongText', 'Date', 'Time', 'Timestamp', 'Json', 'Email', 'Password', 'File', 'Enum', 'EnumRef', 'Association'],\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n },\n nullable: { type: 'boolean' },\n unique: { type: 'boolean' },\n default: {},\n length: { type: 'number' },\n enum: { oneOf: [{ type: 'string' }, { type: 'array' }] },\n relation: { type: 'string', enum: ['OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany', 'MorphTo', 'MorphOne', 'MorphMany'] },\n target: { type: 'string' },\n onDelete: { type: 'string', enum: ['CASCADE', 'SET NULL', 'RESTRICT'] },\n joinTable: { type: 'string' },\n },\n },\n },\n values: {\n type: 'array',\n description: 'Enum values (only for kind: enum)',\n items: {\n oneOf: [\n { type: 'string' },\n { type: 'object', properties: { value: { type: 'string' }, label: {} } },\n ],\n },\n },\n options: {\n type: 'object',\n properties: {\n softDelete: { type: 'boolean', description: 'Enable soft deletes' },\n timestamps: { type: 'boolean', description: 'Add created_at/updated_at' },\n authenticatable: { type: 'boolean', description: 'Enable for User model' },\n tableName: { type: 'string', description: 'Custom table name' },\n idType: { type: 'string', enum: ['BigInt', 'Int', 'Uuid', 'String'] },\n },\n },\n },\n required: ['name'],\n },\n },\n {\n name: 'omnify_validate_schema',\n description: 'Validate an Omnify schema YAML content. Returns validation errors and warnings.',\n inputSchema: {\n type: 'object',\n properties: {\n yaml_content: {\n type: 'string',\n description: 'YAML content to validate',\n },\n },\n required: ['yaml_content'],\n },\n },\n {\n name: 'omnify_get_types',\n description: 'Get documentation for all Omnify property types and their options.',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_relationships',\n description: 'Get documentation for Omnify relationship types (OneToMany, ManyToOne, ManyToMany, polymorphic, etc.)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_examples',\n description: 'Get example Omnify schemas for common use cases (User, Post, Category, Enum)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n ],\n };\n});\n\n// Handle tool calls\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n switch (name) {\n case 'omnify_create_schema': {\n try {\n const input = CreateSchemaInputSchema.parse(args);\n const yamlContent = createSchema(input);\n return {\n content: [\n {\n type: 'text',\n text: `# Generated Schema: ${input.name}\\n\\n\\`\\`\\`yaml\\n${yamlContent}\\`\\`\\`\\n\\nSave this to: schemas/${input.group || 'default'}/${input.name}.yaml`,\n },\n ],\n };\n } catch (e) {\n return {\n content: [\n {\n type: 'text',\n text: `Error creating schema: ${e instanceof Error ? e.message : 'Unknown error'}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'omnify_validate_schema': {\n const yamlContent = (args as { yaml_content: string }).yaml_content;\n const result = validateSchemaYaml(yamlContent);\n\n let response = result.valid ? '✅ Schema is valid!\\n\\n' : '❌ Schema has errors:\\n\\n';\n\n if (result.errors.length > 0) {\n response += '**Errors:**\\n' + result.errors.map(e => `- ${e}`).join('\\n') + '\\n\\n';\n }\n\n if (result.warnings.length > 0) {\n response += '**Warnings:**\\n' + result.warnings.map(w => `- ${w}`).join('\\n');\n }\n\n return {\n content: [{ type: 'text', text: response }],\n };\n }\n\n case 'omnify_get_types': {\n return {\n content: [{ type: 'text', text: getPropertyTypes() }],\n };\n }\n\n case 'omnify_get_relationships': {\n return {\n content: [{ type: 'text', text: getRelationshipGuide() }],\n };\n }\n\n case 'omnify_get_examples': {\n return {\n content: [{ type: 'text', text: getExampleSchemas() }],\n };\n }\n\n default:\n return {\n content: [{ type: 'text', text: `Unknown tool: ${name}` }],\n isError: true,\n };\n }\n});\n\n// List resources\nserver.setRequestHandler(ListResourcesRequestSchema, async () => {\n return {\n resources: [\n {\n uri: 'omnify://schema/json-schema',\n name: 'Omnify JSON Schema',\n description: 'JSON Schema for validating Omnify schema files',\n mimeType: 'application/json',\n },\n {\n uri: 'omnify://docs/types',\n name: 'Property Types Documentation',\n description: 'Documentation for all Omnify property types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://docs/relationships',\n name: 'Relationships Documentation',\n description: 'Documentation for Omnify relationship types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://examples/all',\n name: 'Schema Examples',\n description: 'Example schemas for common use cases',\n mimeType: 'text/markdown',\n },\n ],\n };\n});\n\n// Read resources\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n switch (uri) {\n case 'omnify://docs/types':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getPropertyTypes() }],\n };\n case 'omnify://docs/relationships':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getRelationshipGuide() }],\n };\n case 'omnify://examples/all':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getExampleSchemas() }],\n };\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n});\n\n// Start server\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Omnify MCP Server running on stdio');\n}\n\nmain().catch(console.error);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,oBAAuB;AACvB,mBAAqC;AACrC,mBAKO;AACP,iBAAkB;AAClB,WAAsB;AAMtB,IAAM,mBAAmB,aAAE,KAAK;AAAA,EAC9B;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAW;AAAA,EAC/C;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACpC;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAC9C;AAAA,EAAQ;AAAA,EAAW;AACrB,CAAC;AAED,IAAM,mBAAmB,aAAE,KAAK;AAAA,EAC9B;AAAA,EAAY;AAAA,EAAa;AAAA,EAAa;AAAA,EACtC;AAAA,EAAW;AAAA,EAAY;AAAA,EAAa;AAAA,EAAe;AACrD,CAAC;AAED,IAAM,wBAAwB,aAAE,KAAK;AAAA,EACnC;AAAA,EAAW;AAAA,EAAY;AAAA,EAAe;AAAA,EAAY;AACpD,CAAC;AAED,IAAM,wBAAwB,aAAE,MAAM;AAAA,EACpC,aAAE,OAAO;AAAA,EACT,aAAE,OAAO,aAAE,OAAO,CAAC;AACrB,CAAC;AAED,IAAM,0BAA0B,aAAE,OAAO;AAAA,EACvC,MAAM,aAAE,OAAO,EAAE,SAAS,kDAAkD;AAAA,EAC5E,MAAM,aAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,QAAQ,QAAQ,EAAE,SAAS,aAAa;AAAA,EACzE,aAAa,sBAAsB,SAAS,EAAE,SAAS,4CAA4C;AAAA,EACnG,OAAO,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,EACrE,YAAY,aAAE,OAAO,aAAE,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN,aAAa,sBAAsB,SAAS;AAAA,IAC5C,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,IAC7B,SAAS,aAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,WAAW,aAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,MAAM,aAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC3D,UAAU,iBAAiB,SAAS;AAAA,IACpC,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,UAAU,sBAAsB,SAAS;AAAA,IACzC,WAAW,aAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,CAAC,CAAC,EAAE,SAAS;AAAA,EACb,QAAQ,aAAE,MAAM,aAAE,MAAM;AAAA,IACtB,aAAE,OAAO;AAAA,IACT,aAAE,OAAO;AAAA,MACP,OAAO,aAAE,OAAO;AAAA,MAChB,OAAO,sBAAsB,SAAS;AAAA,IACxC,CAAC;AAAA,EACH,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC3D,SAAS,aAAE,OAAO;AAAA,IAChB,YAAY,aAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,YAAY,aAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,iBAAiB,aAAE,QAAQ,EAAE,SAAS;AAAA,IACtC,WAAW,aAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,QAAQ,aAAE,KAAK,CAAC,UAAU,OAAO,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC/D,CAAC,EAAE,SAAS;AACd,CAAC;AAMD,SAAS,mBAA2B;AAClC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCT;AAEA,SAAS,uBAA+B;AACtC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DT;AAEA,SAAS,oBAA4B;AACnC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4IT;AAEA,SAAS,aAAa,OAAwD;AAC5E,QAAM,SAAkC;AAAA,IACtC,MAAM,MAAM;AAAA,EACd;AAEA,MAAI,MAAM,QAAQ,MAAM,SAAS,UAAU;AACzC,WAAO,OAAO,MAAM;AAAA,EACtB;AAEA,MAAI,MAAM,aAAa;AACrB,WAAO,cAAc,MAAM;AAAA,EAC7B;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,QAAQ,MAAM;AAAA,EACvB;AAEA,MAAI,MAAM,WAAW,OAAO,KAAK,MAAM,OAAO,EAAE,SAAS,GAAG;AAC1D,WAAO,UAAU,MAAM;AAAA,EACzB;AAEA,MAAI,MAAM,cAAc,OAAO,KAAK,MAAM,UAAU,EAAE,SAAS,GAAG;AAChE,WAAO,aAAa,MAAM;AAAA,EAC5B;AAEA,MAAI,MAAM,UAAU,MAAM,OAAO,SAAS,GAAG;AAC3C,WAAO,SAAS,MAAM;AAAA,EACxB;AAEA,SAAY,eAAU,MAAM;AAC9B;AAEA,SAAS,mBAAmB,aAA+E;AACzG,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAE5B,MAAI;AACF,UAAM,SAAc,WAAM,WAAW;AAGrC,QAAI,CAAC,OAAO,MAAM;AAChB,aAAO,KAAK,8BAA8B;AAAA,IAC5C;AAGA,QAAI,OAAO,QAAQ,CAAC,CAAC,UAAU,MAAM,EAAE,SAAS,OAAO,IAAI,GAAG;AAC5D,aAAO,KAAK,iBAAiB,OAAO,IAAI,8BAA8B;AAAA,IACxE;AAGA,QAAI,OAAO,SAAS,QAAQ;AAC1B,UAAI,CAAC,OAAO,UAAU,OAAO,OAAO,WAAW,GAAG;AAChD,eAAO,KAAK,oCAAoC;AAAA,MAClD;AACA,UAAI,OAAO,cAAc,OAAO,KAAK,OAAO,UAAU,EAAE,SAAS,GAAG;AAClE,iBAAS,KAAK,yCAAyC;AAAA,MACzD;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,QAAQ;AAC1B,UAAI,OAAO,UAAU,OAAO,OAAO,SAAS,GAAG;AAC7C,iBAAS,KAAK,kEAAkE;AAAA,MAClF;AAGA,UAAI,OAAO,YAAY;AACrB,mBAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AACnE,gBAAM,OAAO;AAEb,cAAI,CAAC,KAAK,MAAM;AACd,mBAAO,KAAK,aAAa,QAAQ,gCAAgC;AAAA,UACnE;AAGA,cAAI,KAAK,SAAS,eAAe;AAC/B,gBAAI,CAAC,KAAK,UAAU;AAClB,qBAAO,KAAK,aAAa,QAAQ,kDAAkD;AAAA,YACrF;AACA,gBAAI,KAAK,aAAa,aAAa,CAAC,KAAK,QAAQ;AAC/C,qBAAO,KAAK,aAAa,QAAQ,gDAAgD;AAAA,YACnF;AAAA,UACF;AAGA,cAAI,KAAK,SAAS,aAAa,CAAC,KAAK,MAAM;AACzC,mBAAO,KAAK,aAAa,QAAQ,0CAA0C;AAAA,UAC7E;AAGA,cAAI,KAAK,SAAS,UAAU,CAAC,KAAK,MAAM;AACtC,mBAAO,KAAK,aAAa,QAAQ,uCAAuC;AAAA,UAC1E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AAAA,EACxD,SAAS,GAAG;AACV,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,iBAAiB,aAAa,QAAQ,EAAE,UAAU,eAAe,EAAE;AAAA,MAC5E,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAMA,IAAM,SAAS,IAAI;AAAA,EACjB;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,cAAc;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,WAAW,CAAC;AAAA,IACd;AAAA,EACF;AACF;AAGA,OAAO,kBAAkB,qCAAwB,YAAY;AAC3D,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,MAAM,CAAC,UAAU,MAAM;AAAA,cACvB,SAAS;AAAA,cACT,aAAa;AAAA,YACf;AAAA,YACA,aAAa;AAAA,cACX,OAAO;AAAA,gBACL,EAAE,MAAM,SAAS;AAAA,gBACjB,EAAE,MAAM,UAAU,sBAAsB,EAAE,MAAM,SAAS,EAAE;AAAA,cAC7D;AAAA,cACA,aAAa;AAAA,YACf;AAAA,YACA,OAAO;AAAA,cACL,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,YAAY;AAAA,cACV,MAAM;AAAA,cACN,aAAa;AAAA,cACb,sBAAsB;AAAA,gBACpB,MAAM;AAAA,gBACN,YAAY;AAAA,kBACV,MAAM;AAAA,oBACJ,MAAM;AAAA,oBACN,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS,WAAW,WAAW,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAQ,SAAS,YAAY,QAAQ,QAAQ,WAAW,aAAa;AAAA,kBACzL;AAAA,kBACA,aAAa;AAAA,oBACX,OAAO;AAAA,sBACL,EAAE,MAAM,SAAS;AAAA,sBACjB,EAAE,MAAM,UAAU,sBAAsB,EAAE,MAAM,SAAS,EAAE;AAAA,oBAC7D;AAAA,kBACF;AAAA,kBACA,UAAU,EAAE,MAAM,UAAU;AAAA,kBAC5B,QAAQ,EAAE,MAAM,UAAU;AAAA,kBAC1B,SAAS,CAAC;AAAA,kBACV,QAAQ,EAAE,MAAM,SAAS;AAAA,kBACzB,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAS,GAAG,EAAE,MAAM,QAAQ,CAAC,EAAE;AAAA,kBACvD,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,aAAa,aAAa,cAAc,WAAW,YAAY,WAAW,EAAE;AAAA,kBAC3H,QAAQ,EAAE,MAAM,SAAS;AAAA,kBACzB,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,YAAY,UAAU,EAAE;AAAA,kBACtE,WAAW,EAAE,MAAM,SAAS;AAAA,gBAC9B;AAAA,cACF;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,aAAa;AAAA,cACb,OAAO;AAAA,gBACL,OAAO;AAAA,kBACL,EAAE,MAAM,SAAS;AAAA,kBACjB,EAAE,MAAM,UAAU,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE;AAAA,gBACzE;AAAA,cACF;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,YAAY,EAAE,MAAM,WAAW,aAAa,sBAAsB;AAAA,gBAClE,YAAY,EAAE,MAAM,WAAW,aAAa,4BAA4B;AAAA,gBACxE,iBAAiB,EAAE,MAAM,WAAW,aAAa,wBAAwB;AAAA,gBACzE,WAAW,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,gBAC9D,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,OAAO,QAAQ,QAAQ,EAAE;AAAA,cACtE;AAAA,YACF;AAAA,UACF;AAAA,UACA,UAAU,CAAC,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,UACF;AAAA,UACA,UAAU,CAAC,cAAc;AAAA,QAC3B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO,kBAAkB,oCAAuB,OAAO,YAAY;AACjE,QAAM,EAAE,MAAM,WAAW,KAAK,IAAI,QAAQ;AAE1C,UAAQ,MAAM;AAAA,IACZ,KAAK,wBAAwB;AAC3B,UAAI;AACF,cAAM,QAAQ,wBAAwB,MAAM,IAAI;AAChD,cAAM,cAAc,aAAa,KAAK;AACtC,eAAO;AAAA,UACL,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,uBAAuB,MAAM,IAAI;AAAA;AAAA;AAAA,EAAmB,WAAW;AAAA;AAAA,wBAAmC,MAAM,SAAS,SAAS,IAAI,MAAM,IAAI;AAAA,YAChJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,eAAO;AAAA,UACL,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,0BAA0B,aAAa,QAAQ,EAAE,UAAU,eAAe;AAAA,YAClF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,0BAA0B;AAC7B,YAAM,cAAe,KAAkC;AACvD,YAAM,SAAS,mBAAmB,WAAW;AAE7C,UAAI,WAAW,OAAO,QAAQ,gCAA2B;AAEzD,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,oBAAY,kBAAkB,OAAO,OAAO,IAAI,OAAK,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI;AAAA,MAC9E;AAEA,UAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,oBAAY,oBAAoB,OAAO,SAAS,IAAI,OAAK,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,MAC9E;AAEA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,KAAK,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,iBAAiB,EAAE,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IAEA,KAAK,4BAA4B;AAC/B,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,IAEA,KAAK,uBAAuB;AAC1B,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,kBAAkB,EAAE,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IAEA;AACE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,iBAAiB,IAAI,GAAG,CAAC;AAAA,QACzD,SAAS;AAAA,MACX;AAAA,EACJ;AACF,CAAC;AAGD,OAAO,kBAAkB,yCAA4B,YAAY;AAC/D,SAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO,kBAAkB,wCAA2B,OAAO,YAAY;AACrE,QAAM,EAAE,IAAI,IAAI,QAAQ;AAExB,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,iBAAiB,EAAE,CAAC;AAAA,MACzE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAC7E;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,kBAAkB,EAAE,CAAC;AAAA,MAC1E;AAAA,IACF;AACE,YAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE;AAAA,EAC9C;AACF,CAAC;AAGD,eAAe,OAAO;AACpB,QAAM,YAAY,IAAI,kCAAqB;AAC3C,QAAM,OAAO,QAAQ,SAAS;AAC9B,UAAQ,MAAM,oCAAoC;AACpD;AAEA,KAAK,EAAE,MAAM,QAAQ,KAAK;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Omnify MCP Server\n *\n * Provides tools for AI assistants to create and validate Omnify schemas.\n * Supports Claude Code and other MCP-compatible AI tools.\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport * as yaml from 'yaml';\n\n// ============================================================================\n// Schema Definitions for Tools\n// ============================================================================\n\nconst PropertyTypeEnum = z.enum([\n 'String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean',\n 'Text', 'LongText', 'Date', 'Time', 'Timestamp',\n 'Json', 'Email', 'Password', 'File', 'Point', 'Coordinates',\n 'Enum', 'EnumRef', 'Association',\n]);\n\nconst RelationTypeEnum = z.enum([\n 'OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany',\n 'MorphTo', 'MorphOne', 'MorphMany', 'MorphToMany', 'MorphedByMany',\n]);\n\nconst ReferentialActionEnum = z.enum([\n 'CASCADE', 'SET NULL', 'SET DEFAULT', 'RESTRICT', 'NO ACTION',\n]);\n\nconst LocalizedStringSchema = z.union([\n z.string(),\n z.record(z.string()),\n]);\n\nconst CreateSchemaInputSchema = z.object({\n name: z.string().describe('Schema name in PascalCase (e.g., User, BlogPost)'),\n kind: z.enum(['object', 'enum']).default('object').describe('Schema kind'),\n displayName: LocalizedStringSchema.optional().describe('Human-readable name (string or locale map)'),\n group: z.string().optional().describe('Schema group for organization'),\n properties: z.record(z.object({\n type: PropertyTypeEnum,\n displayName: LocalizedStringSchema.optional(),\n placeholder: LocalizedStringSchema.optional().describe('Placeholder text for form inputs (string or locale map)'),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.unknown().optional(),\n length: z.number().optional(),\n unsigned: z.boolean().optional(),\n precision: z.number().optional(),\n scale: z.number().optional(),\n enum: z.union([z.string(), z.array(z.unknown())]).optional(),\n relation: RelationTypeEnum.optional(),\n target: z.string().optional(),\n onDelete: ReferentialActionEnum.optional(),\n joinTable: z.string().optional(),\n multiple: z.boolean().optional(),\n fields: z.record(z.object({\n nullable: z.boolean().optional(),\n hidden: z.boolean().optional(),\n fillable: z.boolean().optional(),\n length: z.number().optional(),\n placeholder: LocalizedStringSchema.optional(),\n })).optional().describe('Per-field overrides for compound types'),\n })).optional(),\n values: z.array(z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: LocalizedStringSchema.optional(),\n }),\n ])).optional().describe('Enum values (only for kind: enum)'),\n options: z.object({\n softDelete: z.boolean().optional(),\n timestamps: z.boolean().optional(),\n authenticatable: z.boolean().optional(),\n tableName: z.string().optional(),\n idType: z.enum(['BigInt', 'Int', 'Uuid', 'String']).optional(),\n }).optional(),\n});\n\n// ============================================================================\n// Tool Implementations\n// ============================================================================\n\nfunction getPropertyTypes(): string {\n return `# Omnify Property Types\n\n## Primitive Types\n- **String**: VARCHAR(255) - short text, use \\`length\\` for custom size\n- **Int**: INTEGER - 32-bit integer\n- **BigInt**: BIGINT - 64-bit integer (default for IDs)\n- **Float**: FLOAT - floating point number\n- **Decimal**: DECIMAL(precision, scale) - exact decimal, use for money\n- **Boolean**: BOOLEAN - true/false\n\n## Text Types\n- **Text**: TEXT (~65KB) - medium text content\n- **LongText**: LONGTEXT (~4GB) - large text content\n\n## Date/Time Types\n- **Date**: DATE - date only (YYYY-MM-DD)\n- **Time**: TIME - time only (HH:MM:SS)\n- **Timestamp**: TIMESTAMP - date and time\n\n## Special Types\n- **Email**: VARCHAR(255) - validated email format\n- **Password**: VARCHAR(255) - hashed password (auto-hidden)\n- **Json**: JSON - structured data\n- **File**: Polymorphic file attachment\n\n## Enum Types\n- **Enum**: Inline enum values\n- **EnumRef**: Reference to shared enum schema\n\n## Association Types (Relations)\n- **Association**: Relationship to another schema\n - relation: OneToOne, OneToMany, ManyToOne, ManyToMany\n - relation: MorphTo, MorphOne, MorphMany (polymorphic)\n - target: Target schema name\n - onDelete: CASCADE, SET NULL, RESTRICT\n`;\n}\n\nfunction getRelationshipGuide(): string {\n return `# Omnify Relationship Guide\n\n## Standard Relations\n\n### ManyToOne (belongs to)\nMost common - creates foreign key column.\n\\`\\`\\`yaml\nauthor:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n\\`\\`\\`\n\n### OneToMany (has many)\nInverse of ManyToOne - no column created.\n\\`\\`\\`yaml\nposts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n### ManyToMany\nCreates pivot table automatically.\n\\`\\`\\`yaml\ntags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags # optional custom name\n\\`\\`\\`\n\n### OneToOne\nUnique foreign key relationship.\n\\`\\`\\`yaml\nprofile:\n type: Association\n relation: OneToOne\n target: UserProfile\n\\`\\`\\`\n\n## Polymorphic Relations\n\n### MorphTo (owning side)\nCreates {name}_type and {name}_id columns.\n\\`\\`\\`yaml\ncommentable:\n type: Association\n relation: MorphTo\n\\`\\`\\`\n\n### MorphMany (inverse side)\nNo columns - defines inverse relationship.\n\\`\\`\\`yaml\ncomments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n`;\n}\n\nfunction getExampleSchemas(): string {\n return `# Omnify Schema Examples\n\n## User Schema (with authentication)\n\\`\\`\\`yaml\nname: User\ndisplayName:\n ja: ユーザー\n en: User\noptions:\n softDelete: true\n authenticatable: true\nproperties:\n name:\n type: String\n displayName:\n ja: 氏名\n en: Full Name\n email:\n type: Email\n unique: true\n displayName:\n ja: メールアドレス\n en: Email Address\n password:\n type: Password\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n## Post Schema (with relations)\n\\`\\`\\`yaml\nname: Post\ndisplayName:\n ja: 投稿\n en: Post\noptions:\n softDelete: true\n indexes:\n - columns: [published_at]\n - columns: [status, published_at]\nproperties:\n title:\n type: String\n displayName:\n ja: タイトル\n en: Title\n slug:\n type: String\n unique: true\n content:\n type: LongText\n displayName:\n ja: 本文\n en: Content\n status:\n type: EnumRef\n enum: PostStatus\n default: draft\n published_at:\n type: Timestamp\n nullable: true\n author:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n category:\n type: Association\n relation: ManyToOne\n target: Category\n tags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags\n comments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n\n## Enum Schema\n\\`\\`\\`yaml\nname: PostStatus\nkind: enum\ndisplayName:\n ja: 投稿ステータス\n en: Post Status\nvalues:\n - value: draft\n label:\n ja: 下書き\n en: Draft\n - value: pending\n label:\n ja: 審査中\n en: Pending Review\n - value: published\n label:\n ja: 公開済み\n en: Published\n - value: archived\n label:\n ja: アーカイブ\n en: Archived\n\\`\\`\\`\n\n## Category Schema (self-referencing)\n\\`\\`\\`yaml\nname: Category\ndisplayName:\n ja: カテゴリ\n en: Category\nproperties:\n name:\n type: String\n length: 100\n slug:\n type: String\n unique: true\n description:\n type: Text\n nullable: true\n parent:\n type: Association\n relation: ManyToOne\n target: Category\n nullable: true\n children:\n type: Association\n relation: OneToMany\n target: Category\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n`;\n}\n\nfunction createSchema(input: z.infer<typeof CreateSchemaInputSchema>): string {\n const schema: Record<string, unknown> = {\n name: input.name,\n };\n\n if (input.kind && input.kind !== 'object') {\n schema.kind = input.kind;\n }\n\n if (input.displayName) {\n schema.displayName = input.displayName;\n }\n\n if (input.group) {\n schema.group = input.group;\n }\n\n if (input.options && Object.keys(input.options).length > 0) {\n schema.options = input.options;\n }\n\n if (input.properties && Object.keys(input.properties).length > 0) {\n schema.properties = input.properties;\n }\n\n if (input.values && input.values.length > 0) {\n schema.values = input.values;\n }\n\n return yaml.stringify(schema);\n}\n\nfunction validateSchemaYaml(yamlContent: string): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n const schema = yaml.parse(yamlContent);\n\n // Check required fields\n if (!schema.name) {\n errors.push('Missing required field: name');\n }\n\n // Check kind\n if (schema.kind && !['object', 'enum'].includes(schema.kind)) {\n errors.push(`Invalid kind: ${schema.kind}. Must be 'object' or 'enum'`);\n }\n\n // Validate enum schema\n if (schema.kind === 'enum') {\n if (!schema.values || schema.values.length === 0) {\n errors.push('Enum schema must have values array');\n }\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n warnings.push('Enum schemas should not have properties');\n }\n }\n\n // Validate object schema\n if (schema.kind !== 'enum') {\n if (schema.values && schema.values.length > 0) {\n warnings.push('Object schemas should not have values (use kind: enum for enums)');\n }\n\n // Validate properties\n if (schema.properties) {\n for (const [propName, propDef] of Object.entries(schema.properties)) {\n const prop = propDef as Record<string, unknown>;\n\n if (!prop.type) {\n errors.push(`Property '${propName}' missing required field: type`);\n }\n\n // Validate Association\n if (prop.type === 'Association') {\n if (!prop.relation) {\n errors.push(`Property '${propName}' (Association) missing required field: relation`);\n }\n if (prop.relation !== 'MorphTo' && !prop.target) {\n errors.push(`Property '${propName}' (Association) missing required field: target`);\n }\n }\n\n // Validate EnumRef\n if (prop.type === 'EnumRef' && !prop.enum) {\n errors.push(`Property '${propName}' (EnumRef) missing required field: enum`);\n }\n\n // Validate Enum\n if (prop.type === 'Enum' && !prop.enum) {\n errors.push(`Property '${propName}' (Enum) missing required field: enum`);\n }\n }\n }\n }\n\n return { valid: errors.length === 0, errors, warnings };\n } catch (e) {\n return {\n valid: false,\n errors: [`Invalid YAML: ${e instanceof Error ? e.message : 'Unknown error'}`],\n warnings: [],\n };\n }\n}\n\n// ============================================================================\n// MCP Server Setup\n// ============================================================================\n\nconst server = new Server(\n {\n name: 'omnify-mcp',\n version: '0.0.1',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n);\n\n// List available tools\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'omnify_create_schema',\n description: 'Create an Omnify schema YAML file. Use this to generate database models with Laravel and TypeScript support.',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'Schema name in PascalCase (e.g., User, BlogPost)',\n },\n kind: {\n type: 'string',\n enum: ['object', 'enum'],\n default: 'object',\n description: 'Schema kind - object for tables, enum for enumeration types',\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n description: 'Human-readable name. Can be string or locale map like { ja: \"日本語\", en: \"English\" }',\n },\n group: {\n type: 'string',\n description: 'Schema group for organization (e.g., auth, blog, shop)',\n },\n properties: {\n type: 'object',\n description: 'Property definitions. Each property has type and optional modifiers.',\n additionalProperties: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean', 'Text', 'LongText', 'Date', 'Time', 'Timestamp', 'Json', 'Email', 'Password', 'File', 'Enum', 'EnumRef', 'Association'],\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n },\n nullable: { type: 'boolean' },\n unique: { type: 'boolean' },\n default: {},\n length: { type: 'number' },\n enum: { oneOf: [{ type: 'string' }, { type: 'array' }] },\n relation: { type: 'string', enum: ['OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany', 'MorphTo', 'MorphOne', 'MorphMany'] },\n target: { type: 'string' },\n onDelete: { type: 'string', enum: ['CASCADE', 'SET NULL', 'RESTRICT'] },\n joinTable: { type: 'string' },\n },\n },\n },\n values: {\n type: 'array',\n description: 'Enum values (only for kind: enum)',\n items: {\n oneOf: [\n { type: 'string' },\n { type: 'object', properties: { value: { type: 'string' }, label: {} } },\n ],\n },\n },\n options: {\n type: 'object',\n properties: {\n softDelete: { type: 'boolean', description: 'Enable soft deletes' },\n timestamps: { type: 'boolean', description: 'Add created_at/updated_at' },\n authenticatable: { type: 'boolean', description: 'Enable for User model' },\n tableName: { type: 'string', description: 'Custom table name' },\n idType: { type: 'string', enum: ['BigInt', 'Int', 'Uuid', 'String'] },\n },\n },\n },\n required: ['name'],\n },\n },\n {\n name: 'omnify_validate_schema',\n description: 'Validate an Omnify schema YAML content. Returns validation errors and warnings.',\n inputSchema: {\n type: 'object',\n properties: {\n yaml_content: {\n type: 'string',\n description: 'YAML content to validate',\n },\n },\n required: ['yaml_content'],\n },\n },\n {\n name: 'omnify_get_types',\n description: 'Get documentation for all Omnify property types and their options.',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_relationships',\n description: 'Get documentation for Omnify relationship types (OneToMany, ManyToOne, ManyToMany, polymorphic, etc.)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_examples',\n description: 'Get example Omnify schemas for common use cases (User, Post, Category, Enum)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n ],\n };\n});\n\n// Handle tool calls\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n switch (name) {\n case 'omnify_create_schema': {\n try {\n const input = CreateSchemaInputSchema.parse(args);\n const yamlContent = createSchema(input);\n return {\n content: [\n {\n type: 'text',\n text: `# Generated Schema: ${input.name}\\n\\n\\`\\`\\`yaml\\n${yamlContent}\\`\\`\\`\\n\\nSave this to: schemas/${input.group || 'default'}/${input.name}.yaml`,\n },\n ],\n };\n } catch (e) {\n return {\n content: [\n {\n type: 'text',\n text: `Error creating schema: ${e instanceof Error ? e.message : 'Unknown error'}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'omnify_validate_schema': {\n const yamlContent = (args as { yaml_content: string }).yaml_content;\n const result = validateSchemaYaml(yamlContent);\n\n let response = result.valid ? '✅ Schema is valid!\\n\\n' : '❌ Schema has errors:\\n\\n';\n\n if (result.errors.length > 0) {\n response += '**Errors:**\\n' + result.errors.map(e => `- ${e}`).join('\\n') + '\\n\\n';\n }\n\n if (result.warnings.length > 0) {\n response += '**Warnings:**\\n' + result.warnings.map(w => `- ${w}`).join('\\n');\n }\n\n return {\n content: [{ type: 'text', text: response }],\n };\n }\n\n case 'omnify_get_types': {\n return {\n content: [{ type: 'text', text: getPropertyTypes() }],\n };\n }\n\n case 'omnify_get_relationships': {\n return {\n content: [{ type: 'text', text: getRelationshipGuide() }],\n };\n }\n\n case 'omnify_get_examples': {\n return {\n content: [{ type: 'text', text: getExampleSchemas() }],\n };\n }\n\n default:\n return {\n content: [{ type: 'text', text: `Unknown tool: ${name}` }],\n isError: true,\n };\n }\n});\n\n// List resources\nserver.setRequestHandler(ListResourcesRequestSchema, async () => {\n return {\n resources: [\n {\n uri: 'omnify://schema/json-schema',\n name: 'Omnify JSON Schema',\n description: 'JSON Schema for validating Omnify schema files',\n mimeType: 'application/json',\n },\n {\n uri: 'omnify://docs/types',\n name: 'Property Types Documentation',\n description: 'Documentation for all Omnify property types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://docs/relationships',\n name: 'Relationships Documentation',\n description: 'Documentation for Omnify relationship types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://examples/all',\n name: 'Schema Examples',\n description: 'Example schemas for common use cases',\n mimeType: 'text/markdown',\n },\n ],\n };\n});\n\n// Read resources\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n switch (uri) {\n case 'omnify://docs/types':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getPropertyTypes() }],\n };\n case 'omnify://docs/relationships':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getRelationshipGuide() }],\n };\n case 'omnify://examples/all':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getExampleSchemas() }],\n };\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n});\n\n// Start server\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Omnify MCP Server running on stdio');\n}\n\nmain().catch(console.error);\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -63,6 +63,7 @@ var CreateSchemaInputSchema = z.object({
63
63
  properties: z.record(z.object({
64
64
  type: PropertyTypeEnum,
65
65
  displayName: LocalizedStringSchema.optional(),
66
+ placeholder: LocalizedStringSchema.optional().describe("Placeholder text for form inputs (string or locale map)"),
66
67
  nullable: z.boolean().optional(),
67
68
  unique: z.boolean().optional(),
68
69
  default: z.unknown().optional(),
@@ -75,7 +76,14 @@ var CreateSchemaInputSchema = z.object({
75
76
  target: z.string().optional(),
76
77
  onDelete: ReferentialActionEnum.optional(),
77
78
  joinTable: z.string().optional(),
78
- multiple: z.boolean().optional()
79
+ multiple: z.boolean().optional(),
80
+ fields: z.record(z.object({
81
+ nullable: z.boolean().optional(),
82
+ hidden: z.boolean().optional(),
83
+ fillable: z.boolean().optional(),
84
+ length: z.number().optional(),
85
+ placeholder: LocalizedStringSchema.optional()
86
+ })).optional().describe("Per-field overrides for compound types")
79
87
  })).optional(),
80
88
  values: z.array(z.union([
81
89
  z.string(),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Omnify MCP Server\n *\n * Provides tools for AI assistants to create and validate Omnify schemas.\n * Supports Claude Code and other MCP-compatible AI tools.\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport * as yaml from 'yaml';\n\n// ============================================================================\n// Schema Definitions for Tools\n// ============================================================================\n\nconst PropertyTypeEnum = z.enum([\n 'String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean',\n 'Text', 'LongText', 'Date', 'Time', 'Timestamp',\n 'Json', 'Email', 'Password', 'File', 'Point', 'Coordinates',\n 'Enum', 'EnumRef', 'Association',\n]);\n\nconst RelationTypeEnum = z.enum([\n 'OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany',\n 'MorphTo', 'MorphOne', 'MorphMany', 'MorphToMany', 'MorphedByMany',\n]);\n\nconst ReferentialActionEnum = z.enum([\n 'CASCADE', 'SET NULL', 'SET DEFAULT', 'RESTRICT', 'NO ACTION',\n]);\n\nconst LocalizedStringSchema = z.union([\n z.string(),\n z.record(z.string()),\n]);\n\nconst CreateSchemaInputSchema = z.object({\n name: z.string().describe('Schema name in PascalCase (e.g., User, BlogPost)'),\n kind: z.enum(['object', 'enum']).default('object').describe('Schema kind'),\n displayName: LocalizedStringSchema.optional().describe('Human-readable name (string or locale map)'),\n group: z.string().optional().describe('Schema group for organization'),\n properties: z.record(z.object({\n type: PropertyTypeEnum,\n displayName: LocalizedStringSchema.optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.unknown().optional(),\n length: z.number().optional(),\n unsigned: z.boolean().optional(),\n precision: z.number().optional(),\n scale: z.number().optional(),\n enum: z.union([z.string(), z.array(z.unknown())]).optional(),\n relation: RelationTypeEnum.optional(),\n target: z.string().optional(),\n onDelete: ReferentialActionEnum.optional(),\n joinTable: z.string().optional(),\n multiple: z.boolean().optional(),\n })).optional(),\n values: z.array(z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: LocalizedStringSchema.optional(),\n }),\n ])).optional().describe('Enum values (only for kind: enum)'),\n options: z.object({\n softDelete: z.boolean().optional(),\n timestamps: z.boolean().optional(),\n authenticatable: z.boolean().optional(),\n tableName: z.string().optional(),\n idType: z.enum(['BigInt', 'Int', 'Uuid', 'String']).optional(),\n }).optional(),\n});\n\n// ============================================================================\n// Tool Implementations\n// ============================================================================\n\nfunction getPropertyTypes(): string {\n return `# Omnify Property Types\n\n## Primitive Types\n- **String**: VARCHAR(255) - short text, use \\`length\\` for custom size\n- **Int**: INTEGER - 32-bit integer\n- **BigInt**: BIGINT - 64-bit integer (default for IDs)\n- **Float**: FLOAT - floating point number\n- **Decimal**: DECIMAL(precision, scale) - exact decimal, use for money\n- **Boolean**: BOOLEAN - true/false\n\n## Text Types\n- **Text**: TEXT (~65KB) - medium text content\n- **LongText**: LONGTEXT (~4GB) - large text content\n\n## Date/Time Types\n- **Date**: DATE - date only (YYYY-MM-DD)\n- **Time**: TIME - time only (HH:MM:SS)\n- **Timestamp**: TIMESTAMP - date and time\n\n## Special Types\n- **Email**: VARCHAR(255) - validated email format\n- **Password**: VARCHAR(255) - hashed password (auto-hidden)\n- **Json**: JSON - structured data\n- **File**: Polymorphic file attachment\n\n## Enum Types\n- **Enum**: Inline enum values\n- **EnumRef**: Reference to shared enum schema\n\n## Association Types (Relations)\n- **Association**: Relationship to another schema\n - relation: OneToOne, OneToMany, ManyToOne, ManyToMany\n - relation: MorphTo, MorphOne, MorphMany (polymorphic)\n - target: Target schema name\n - onDelete: CASCADE, SET NULL, RESTRICT\n`;\n}\n\nfunction getRelationshipGuide(): string {\n return `# Omnify Relationship Guide\n\n## Standard Relations\n\n### ManyToOne (belongs to)\nMost common - creates foreign key column.\n\\`\\`\\`yaml\nauthor:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n\\`\\`\\`\n\n### OneToMany (has many)\nInverse of ManyToOne - no column created.\n\\`\\`\\`yaml\nposts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n### ManyToMany\nCreates pivot table automatically.\n\\`\\`\\`yaml\ntags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags # optional custom name\n\\`\\`\\`\n\n### OneToOne\nUnique foreign key relationship.\n\\`\\`\\`yaml\nprofile:\n type: Association\n relation: OneToOne\n target: UserProfile\n\\`\\`\\`\n\n## Polymorphic Relations\n\n### MorphTo (owning side)\nCreates {name}_type and {name}_id columns.\n\\`\\`\\`yaml\ncommentable:\n type: Association\n relation: MorphTo\n\\`\\`\\`\n\n### MorphMany (inverse side)\nNo columns - defines inverse relationship.\n\\`\\`\\`yaml\ncomments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n`;\n}\n\nfunction getExampleSchemas(): string {\n return `# Omnify Schema Examples\n\n## User Schema (with authentication)\n\\`\\`\\`yaml\nname: User\ndisplayName:\n ja: ユーザー\n en: User\noptions:\n softDelete: true\n authenticatable: true\nproperties:\n name:\n type: String\n displayName:\n ja: 氏名\n en: Full Name\n email:\n type: Email\n unique: true\n displayName:\n ja: メールアドレス\n en: Email Address\n password:\n type: Password\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n## Post Schema (with relations)\n\\`\\`\\`yaml\nname: Post\ndisplayName:\n ja: 投稿\n en: Post\noptions:\n softDelete: true\n indexes:\n - columns: [published_at]\n - columns: [status, published_at]\nproperties:\n title:\n type: String\n displayName:\n ja: タイトル\n en: Title\n slug:\n type: String\n unique: true\n content:\n type: LongText\n displayName:\n ja: 本文\n en: Content\n status:\n type: EnumRef\n enum: PostStatus\n default: draft\n published_at:\n type: Timestamp\n nullable: true\n author:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n category:\n type: Association\n relation: ManyToOne\n target: Category\n tags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags\n comments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n\n## Enum Schema\n\\`\\`\\`yaml\nname: PostStatus\nkind: enum\ndisplayName:\n ja: 投稿ステータス\n en: Post Status\nvalues:\n - value: draft\n label:\n ja: 下書き\n en: Draft\n - value: pending\n label:\n ja: 審査中\n en: Pending Review\n - value: published\n label:\n ja: 公開済み\n en: Published\n - value: archived\n label:\n ja: アーカイブ\n en: Archived\n\\`\\`\\`\n\n## Category Schema (self-referencing)\n\\`\\`\\`yaml\nname: Category\ndisplayName:\n ja: カテゴリ\n en: Category\nproperties:\n name:\n type: String\n length: 100\n slug:\n type: String\n unique: true\n description:\n type: Text\n nullable: true\n parent:\n type: Association\n relation: ManyToOne\n target: Category\n nullable: true\n children:\n type: Association\n relation: OneToMany\n target: Category\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n`;\n}\n\nfunction createSchema(input: z.infer<typeof CreateSchemaInputSchema>): string {\n const schema: Record<string, unknown> = {\n name: input.name,\n };\n\n if (input.kind && input.kind !== 'object') {\n schema.kind = input.kind;\n }\n\n if (input.displayName) {\n schema.displayName = input.displayName;\n }\n\n if (input.group) {\n schema.group = input.group;\n }\n\n if (input.options && Object.keys(input.options).length > 0) {\n schema.options = input.options;\n }\n\n if (input.properties && Object.keys(input.properties).length > 0) {\n schema.properties = input.properties;\n }\n\n if (input.values && input.values.length > 0) {\n schema.values = input.values;\n }\n\n return yaml.stringify(schema);\n}\n\nfunction validateSchemaYaml(yamlContent: string): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n const schema = yaml.parse(yamlContent);\n\n // Check required fields\n if (!schema.name) {\n errors.push('Missing required field: name');\n }\n\n // Check kind\n if (schema.kind && !['object', 'enum'].includes(schema.kind)) {\n errors.push(`Invalid kind: ${schema.kind}. Must be 'object' or 'enum'`);\n }\n\n // Validate enum schema\n if (schema.kind === 'enum') {\n if (!schema.values || schema.values.length === 0) {\n errors.push('Enum schema must have values array');\n }\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n warnings.push('Enum schemas should not have properties');\n }\n }\n\n // Validate object schema\n if (schema.kind !== 'enum') {\n if (schema.values && schema.values.length > 0) {\n warnings.push('Object schemas should not have values (use kind: enum for enums)');\n }\n\n // Validate properties\n if (schema.properties) {\n for (const [propName, propDef] of Object.entries(schema.properties)) {\n const prop = propDef as Record<string, unknown>;\n\n if (!prop.type) {\n errors.push(`Property '${propName}' missing required field: type`);\n }\n\n // Validate Association\n if (prop.type === 'Association') {\n if (!prop.relation) {\n errors.push(`Property '${propName}' (Association) missing required field: relation`);\n }\n if (prop.relation !== 'MorphTo' && !prop.target) {\n errors.push(`Property '${propName}' (Association) missing required field: target`);\n }\n }\n\n // Validate EnumRef\n if (prop.type === 'EnumRef' && !prop.enum) {\n errors.push(`Property '${propName}' (EnumRef) missing required field: enum`);\n }\n\n // Validate Enum\n if (prop.type === 'Enum' && !prop.enum) {\n errors.push(`Property '${propName}' (Enum) missing required field: enum`);\n }\n }\n }\n }\n\n return { valid: errors.length === 0, errors, warnings };\n } catch (e) {\n return {\n valid: false,\n errors: [`Invalid YAML: ${e instanceof Error ? e.message : 'Unknown error'}`],\n warnings: [],\n };\n }\n}\n\n// ============================================================================\n// MCP Server Setup\n// ============================================================================\n\nconst server = new Server(\n {\n name: 'omnify-mcp',\n version: '0.0.1',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n);\n\n// List available tools\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'omnify_create_schema',\n description: 'Create an Omnify schema YAML file. Use this to generate database models with Laravel and TypeScript support.',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'Schema name in PascalCase (e.g., User, BlogPost)',\n },\n kind: {\n type: 'string',\n enum: ['object', 'enum'],\n default: 'object',\n description: 'Schema kind - object for tables, enum for enumeration types',\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n description: 'Human-readable name. Can be string or locale map like { ja: \"日本語\", en: \"English\" }',\n },\n group: {\n type: 'string',\n description: 'Schema group for organization (e.g., auth, blog, shop)',\n },\n properties: {\n type: 'object',\n description: 'Property definitions. Each property has type and optional modifiers.',\n additionalProperties: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean', 'Text', 'LongText', 'Date', 'Time', 'Timestamp', 'Json', 'Email', 'Password', 'File', 'Enum', 'EnumRef', 'Association'],\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n },\n nullable: { type: 'boolean' },\n unique: { type: 'boolean' },\n default: {},\n length: { type: 'number' },\n enum: { oneOf: [{ type: 'string' }, { type: 'array' }] },\n relation: { type: 'string', enum: ['OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany', 'MorphTo', 'MorphOne', 'MorphMany'] },\n target: { type: 'string' },\n onDelete: { type: 'string', enum: ['CASCADE', 'SET NULL', 'RESTRICT'] },\n joinTable: { type: 'string' },\n },\n },\n },\n values: {\n type: 'array',\n description: 'Enum values (only for kind: enum)',\n items: {\n oneOf: [\n { type: 'string' },\n { type: 'object', properties: { value: { type: 'string' }, label: {} } },\n ],\n },\n },\n options: {\n type: 'object',\n properties: {\n softDelete: { type: 'boolean', description: 'Enable soft deletes' },\n timestamps: { type: 'boolean', description: 'Add created_at/updated_at' },\n authenticatable: { type: 'boolean', description: 'Enable for User model' },\n tableName: { type: 'string', description: 'Custom table name' },\n idType: { type: 'string', enum: ['BigInt', 'Int', 'Uuid', 'String'] },\n },\n },\n },\n required: ['name'],\n },\n },\n {\n name: 'omnify_validate_schema',\n description: 'Validate an Omnify schema YAML content. Returns validation errors and warnings.',\n inputSchema: {\n type: 'object',\n properties: {\n yaml_content: {\n type: 'string',\n description: 'YAML content to validate',\n },\n },\n required: ['yaml_content'],\n },\n },\n {\n name: 'omnify_get_types',\n description: 'Get documentation for all Omnify property types and their options.',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_relationships',\n description: 'Get documentation for Omnify relationship types (OneToMany, ManyToOne, ManyToMany, polymorphic, etc.)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_examples',\n description: 'Get example Omnify schemas for common use cases (User, Post, Category, Enum)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n ],\n };\n});\n\n// Handle tool calls\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n switch (name) {\n case 'omnify_create_schema': {\n try {\n const input = CreateSchemaInputSchema.parse(args);\n const yamlContent = createSchema(input);\n return {\n content: [\n {\n type: 'text',\n text: `# Generated Schema: ${input.name}\\n\\n\\`\\`\\`yaml\\n${yamlContent}\\`\\`\\`\\n\\nSave this to: schemas/${input.group || 'default'}/${input.name}.yaml`,\n },\n ],\n };\n } catch (e) {\n return {\n content: [\n {\n type: 'text',\n text: `Error creating schema: ${e instanceof Error ? e.message : 'Unknown error'}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'omnify_validate_schema': {\n const yamlContent = (args as { yaml_content: string }).yaml_content;\n const result = validateSchemaYaml(yamlContent);\n\n let response = result.valid ? '✅ Schema is valid!\\n\\n' : '❌ Schema has errors:\\n\\n';\n\n if (result.errors.length > 0) {\n response += '**Errors:**\\n' + result.errors.map(e => `- ${e}`).join('\\n') + '\\n\\n';\n }\n\n if (result.warnings.length > 0) {\n response += '**Warnings:**\\n' + result.warnings.map(w => `- ${w}`).join('\\n');\n }\n\n return {\n content: [{ type: 'text', text: response }],\n };\n }\n\n case 'omnify_get_types': {\n return {\n content: [{ type: 'text', text: getPropertyTypes() }],\n };\n }\n\n case 'omnify_get_relationships': {\n return {\n content: [{ type: 'text', text: getRelationshipGuide() }],\n };\n }\n\n case 'omnify_get_examples': {\n return {\n content: [{ type: 'text', text: getExampleSchemas() }],\n };\n }\n\n default:\n return {\n content: [{ type: 'text', text: `Unknown tool: ${name}` }],\n isError: true,\n };\n }\n});\n\n// List resources\nserver.setRequestHandler(ListResourcesRequestSchema, async () => {\n return {\n resources: [\n {\n uri: 'omnify://schema/json-schema',\n name: 'Omnify JSON Schema',\n description: 'JSON Schema for validating Omnify schema files',\n mimeType: 'application/json',\n },\n {\n uri: 'omnify://docs/types',\n name: 'Property Types Documentation',\n description: 'Documentation for all Omnify property types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://docs/relationships',\n name: 'Relationships Documentation',\n description: 'Documentation for Omnify relationship types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://examples/all',\n name: 'Schema Examples',\n description: 'Example schemas for common use cases',\n mimeType: 'text/markdown',\n },\n ],\n };\n});\n\n// Read resources\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n switch (uri) {\n case 'omnify://docs/types':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getPropertyTypes() }],\n };\n case 'omnify://docs/relationships':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getRelationshipGuide() }],\n };\n case 'omnify://examples/all':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getExampleSchemas() }],\n };\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n});\n\n// Start server\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Omnify MCP Server running on stdio');\n}\n\nmain().catch(console.error);\n"],"mappings":";;;AAOA,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,SAAS;AAClB,YAAY,UAAU;AAMtB,IAAM,mBAAmB,EAAE,KAAK;AAAA,EAC9B;AAAA,EAAU;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAW;AAAA,EAC/C;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACpC;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAC9C;AAAA,EAAQ;AAAA,EAAW;AACrB,CAAC;AAED,IAAM,mBAAmB,EAAE,KAAK;AAAA,EAC9B;AAAA,EAAY;AAAA,EAAa;AAAA,EAAa;AAAA,EACtC;AAAA,EAAW;AAAA,EAAY;AAAA,EAAa;AAAA,EAAe;AACrD,CAAC;AAED,IAAM,wBAAwB,EAAE,KAAK;AAAA,EACnC;AAAA,EAAW;AAAA,EAAY;AAAA,EAAe;AAAA,EAAY;AACpD,CAAC;AAED,IAAM,wBAAwB,EAAE,MAAM;AAAA,EACpC,EAAE,OAAO;AAAA,EACT,EAAE,OAAO,EAAE,OAAO,CAAC;AACrB,CAAC;AAED,IAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,MAAM,EAAE,OAAO,EAAE,SAAS,kDAAkD;AAAA,EAC5E,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,QAAQ,QAAQ,EAAE,SAAS,aAAa;AAAA,EACzE,aAAa,sBAAsB,SAAS,EAAE,SAAS,4CAA4C;AAAA,EACnG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,EACrE,YAAY,EAAE,OAAO,EAAE,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN,aAAa,sBAAsB,SAAS;AAAA,IAC5C,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC7B,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC3D,UAAU,iBAAiB,SAAS;AAAA,IACpC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,UAAU,sBAAsB,SAAS;AAAA,IACzC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,CAAC,CAAC,EAAE,SAAS;AAAA,EACb,QAAQ,EAAE,MAAM,EAAE,MAAM;AAAA,IACtB,EAAE,OAAO;AAAA,IACT,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,OAAO,sBAAsB,SAAS;AAAA,IACxC,CAAC;AAAA,EACH,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC3D,SAAS,EAAE,OAAO;AAAA,IAChB,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAAA,IACtC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,QAAQ,EAAE,KAAK,CAAC,UAAU,OAAO,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC/D,CAAC,EAAE,SAAS;AACd,CAAC;AAMD,SAAS,mBAA2B;AAClC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCT;AAEA,SAAS,uBAA+B;AACtC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DT;AAEA,SAAS,oBAA4B;AACnC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4IT;AAEA,SAAS,aAAa,OAAwD;AAC5E,QAAM,SAAkC;AAAA,IACtC,MAAM,MAAM;AAAA,EACd;AAEA,MAAI,MAAM,QAAQ,MAAM,SAAS,UAAU;AACzC,WAAO,OAAO,MAAM;AAAA,EACtB;AAEA,MAAI,MAAM,aAAa;AACrB,WAAO,cAAc,MAAM;AAAA,EAC7B;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,QAAQ,MAAM;AAAA,EACvB;AAEA,MAAI,MAAM,WAAW,OAAO,KAAK,MAAM,OAAO,EAAE,SAAS,GAAG;AAC1D,WAAO,UAAU,MAAM;AAAA,EACzB;AAEA,MAAI,MAAM,cAAc,OAAO,KAAK,MAAM,UAAU,EAAE,SAAS,GAAG;AAChE,WAAO,aAAa,MAAM;AAAA,EAC5B;AAEA,MAAI,MAAM,UAAU,MAAM,OAAO,SAAS,GAAG;AAC3C,WAAO,SAAS,MAAM;AAAA,EACxB;AAEA,SAAY,eAAU,MAAM;AAC9B;AAEA,SAAS,mBAAmB,aAA+E;AACzG,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAE5B,MAAI;AACF,UAAM,SAAc,WAAM,WAAW;AAGrC,QAAI,CAAC,OAAO,MAAM;AAChB,aAAO,KAAK,8BAA8B;AAAA,IAC5C;AAGA,QAAI,OAAO,QAAQ,CAAC,CAAC,UAAU,MAAM,EAAE,SAAS,OAAO,IAAI,GAAG;AAC5D,aAAO,KAAK,iBAAiB,OAAO,IAAI,8BAA8B;AAAA,IACxE;AAGA,QAAI,OAAO,SAAS,QAAQ;AAC1B,UAAI,CAAC,OAAO,UAAU,OAAO,OAAO,WAAW,GAAG;AAChD,eAAO,KAAK,oCAAoC;AAAA,MAClD;AACA,UAAI,OAAO,cAAc,OAAO,KAAK,OAAO,UAAU,EAAE,SAAS,GAAG;AAClE,iBAAS,KAAK,yCAAyC;AAAA,MACzD;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,QAAQ;AAC1B,UAAI,OAAO,UAAU,OAAO,OAAO,SAAS,GAAG;AAC7C,iBAAS,KAAK,kEAAkE;AAAA,MAClF;AAGA,UAAI,OAAO,YAAY;AACrB,mBAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AACnE,gBAAM,OAAO;AAEb,cAAI,CAAC,KAAK,MAAM;AACd,mBAAO,KAAK,aAAa,QAAQ,gCAAgC;AAAA,UACnE;AAGA,cAAI,KAAK,SAAS,eAAe;AAC/B,gBAAI,CAAC,KAAK,UAAU;AAClB,qBAAO,KAAK,aAAa,QAAQ,kDAAkD;AAAA,YACrF;AACA,gBAAI,KAAK,aAAa,aAAa,CAAC,KAAK,QAAQ;AAC/C,qBAAO,KAAK,aAAa,QAAQ,gDAAgD;AAAA,YACnF;AAAA,UACF;AAGA,cAAI,KAAK,SAAS,aAAa,CAAC,KAAK,MAAM;AACzC,mBAAO,KAAK,aAAa,QAAQ,0CAA0C;AAAA,UAC7E;AAGA,cAAI,KAAK,SAAS,UAAU,CAAC,KAAK,MAAM;AACtC,mBAAO,KAAK,aAAa,QAAQ,uCAAuC;AAAA,UAC1E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AAAA,EACxD,SAAS,GAAG;AACV,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,iBAAiB,aAAa,QAAQ,EAAE,UAAU,eAAe,EAAE;AAAA,MAC5E,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAMA,IAAM,SAAS,IAAI;AAAA,EACjB;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,cAAc;AAAA,MACZ,OAAO,CAAC;AAAA,MACR,WAAW,CAAC;AAAA,IACd;AAAA,EACF;AACF;AAGA,OAAO,kBAAkB,wBAAwB,YAAY;AAC3D,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,MAAM,CAAC,UAAU,MAAM;AAAA,cACvB,SAAS;AAAA,cACT,aAAa;AAAA,YACf;AAAA,YACA,aAAa;AAAA,cACX,OAAO;AAAA,gBACL,EAAE,MAAM,SAAS;AAAA,gBACjB,EAAE,MAAM,UAAU,sBAAsB,EAAE,MAAM,SAAS,EAAE;AAAA,cAC7D;AAAA,cACA,aAAa;AAAA,YACf;AAAA,YACA,OAAO;AAAA,cACL,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,YAAY;AAAA,cACV,MAAM;AAAA,cACN,aAAa;AAAA,cACb,sBAAsB;AAAA,gBACpB,MAAM;AAAA,gBACN,YAAY;AAAA,kBACV,MAAM;AAAA,oBACJ,MAAM;AAAA,oBACN,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS,WAAW,WAAW,QAAQ,YAAY,QAAQ,QAAQ,aAAa,QAAQ,SAAS,YAAY,QAAQ,QAAQ,WAAW,aAAa;AAAA,kBACzL;AAAA,kBACA,aAAa;AAAA,oBACX,OAAO;AAAA,sBACL,EAAE,MAAM,SAAS;AAAA,sBACjB,EAAE,MAAM,UAAU,sBAAsB,EAAE,MAAM,SAAS,EAAE;AAAA,oBAC7D;AAAA,kBACF;AAAA,kBACA,UAAU,EAAE,MAAM,UAAU;AAAA,kBAC5B,QAAQ,EAAE,MAAM,UAAU;AAAA,kBAC1B,SAAS,CAAC;AAAA,kBACV,QAAQ,EAAE,MAAM,SAAS;AAAA,kBACzB,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAS,GAAG,EAAE,MAAM,QAAQ,CAAC,EAAE;AAAA,kBACvD,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,aAAa,aAAa,cAAc,WAAW,YAAY,WAAW,EAAE;AAAA,kBAC3H,QAAQ,EAAE,MAAM,SAAS;AAAA,kBACzB,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,YAAY,UAAU,EAAE;AAAA,kBACtE,WAAW,EAAE,MAAM,SAAS;AAAA,gBAC9B;AAAA,cACF;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,aAAa;AAAA,cACb,OAAO;AAAA,gBACL,OAAO;AAAA,kBACL,EAAE,MAAM,SAAS;AAAA,kBACjB,EAAE,MAAM,UAAU,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE;AAAA,gBACzE;AAAA,cACF;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,YAAY,EAAE,MAAM,WAAW,aAAa,sBAAsB;AAAA,gBAClE,YAAY,EAAE,MAAM,WAAW,aAAa,4BAA4B;AAAA,gBACxE,iBAAiB,EAAE,MAAM,WAAW,aAAa,wBAAwB;AAAA,gBACzE,WAAW,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,gBAC9D,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,OAAO,QAAQ,QAAQ,EAAE;AAAA,cACtE;AAAA,YACF;AAAA,UACF;AAAA,UACA,UAAU,CAAC,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,UACF;AAAA,UACA,UAAU,CAAC,cAAc;AAAA,QAC3B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,QAAM,EAAE,MAAM,WAAW,KAAK,IAAI,QAAQ;AAE1C,UAAQ,MAAM;AAAA,IACZ,KAAK,wBAAwB;AAC3B,UAAI;AACF,cAAM,QAAQ,wBAAwB,MAAM,IAAI;AAChD,cAAM,cAAc,aAAa,KAAK;AACtC,eAAO;AAAA,UACL,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,uBAAuB,MAAM,IAAI;AAAA;AAAA;AAAA,EAAmB,WAAW;AAAA;AAAA,wBAAmC,MAAM,SAAS,SAAS,IAAI,MAAM,IAAI;AAAA,YAChJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,eAAO;AAAA,UACL,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,0BAA0B,aAAa,QAAQ,EAAE,UAAU,eAAe;AAAA,YAClF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,0BAA0B;AAC7B,YAAM,cAAe,KAAkC;AACvD,YAAM,SAAS,mBAAmB,WAAW;AAE7C,UAAI,WAAW,OAAO,QAAQ,gCAA2B;AAEzD,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,oBAAY,kBAAkB,OAAO,OAAO,IAAI,OAAK,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI;AAAA,MAC9E;AAEA,UAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,oBAAY,oBAAoB,OAAO,SAAS,IAAI,OAAK,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,MAC9E;AAEA,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,KAAK,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,iBAAiB,EAAE,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IAEA,KAAK,4BAA4B;AAC/B,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,IAEA,KAAK,uBAAuB;AAC1B,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,kBAAkB,EAAE,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IAEA;AACE,aAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,iBAAiB,IAAI,GAAG,CAAC;AAAA,QACzD,SAAS;AAAA,MACX;AAAA,EACJ;AACF,CAAC;AAGD,OAAO,kBAAkB,4BAA4B,YAAY;AAC/D,SAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO,kBAAkB,2BAA2B,OAAO,YAAY;AACrE,QAAM,EAAE,IAAI,IAAI,QAAQ;AAExB,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,iBAAiB,EAAE,CAAC;AAAA,MACzE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,qBAAqB,EAAE,CAAC;AAAA,MAC7E;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU,CAAC,EAAE,KAAK,UAAU,iBAAiB,MAAM,kBAAkB,EAAE,CAAC;AAAA,MAC1E;AAAA,IACF;AACE,YAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE;AAAA,EAC9C;AACF,CAAC;AAGD,eAAe,OAAO;AACpB,QAAM,YAAY,IAAI,qBAAqB;AAC3C,QAAM,OAAO,QAAQ,SAAS;AAC9B,UAAQ,MAAM,oCAAoC;AACpD;AAEA,KAAK,EAAE,MAAM,QAAQ,KAAK;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Omnify MCP Server\n *\n * Provides tools for AI assistants to create and validate Omnify schemas.\n * Supports Claude Code and other MCP-compatible AI tools.\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport * as yaml from 'yaml';\n\n// ============================================================================\n// Schema Definitions for Tools\n// ============================================================================\n\nconst PropertyTypeEnum = z.enum([\n 'String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean',\n 'Text', 'LongText', 'Date', 'Time', 'Timestamp',\n 'Json', 'Email', 'Password', 'File', 'Point', 'Coordinates',\n 'Enum', 'EnumRef', 'Association',\n]);\n\nconst RelationTypeEnum = z.enum([\n 'OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany',\n 'MorphTo', 'MorphOne', 'MorphMany', 'MorphToMany', 'MorphedByMany',\n]);\n\nconst ReferentialActionEnum = z.enum([\n 'CASCADE', 'SET NULL', 'SET DEFAULT', 'RESTRICT', 'NO ACTION',\n]);\n\nconst LocalizedStringSchema = z.union([\n z.string(),\n z.record(z.string()),\n]);\n\nconst CreateSchemaInputSchema = z.object({\n name: z.string().describe('Schema name in PascalCase (e.g., User, BlogPost)'),\n kind: z.enum(['object', 'enum']).default('object').describe('Schema kind'),\n displayName: LocalizedStringSchema.optional().describe('Human-readable name (string or locale map)'),\n group: z.string().optional().describe('Schema group for organization'),\n properties: z.record(z.object({\n type: PropertyTypeEnum,\n displayName: LocalizedStringSchema.optional(),\n placeholder: LocalizedStringSchema.optional().describe('Placeholder text for form inputs (string or locale map)'),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.unknown().optional(),\n length: z.number().optional(),\n unsigned: z.boolean().optional(),\n precision: z.number().optional(),\n scale: z.number().optional(),\n enum: z.union([z.string(), z.array(z.unknown())]).optional(),\n relation: RelationTypeEnum.optional(),\n target: z.string().optional(),\n onDelete: ReferentialActionEnum.optional(),\n joinTable: z.string().optional(),\n multiple: z.boolean().optional(),\n fields: z.record(z.object({\n nullable: z.boolean().optional(),\n hidden: z.boolean().optional(),\n fillable: z.boolean().optional(),\n length: z.number().optional(),\n placeholder: LocalizedStringSchema.optional(),\n })).optional().describe('Per-field overrides for compound types'),\n })).optional(),\n values: z.array(z.union([\n z.string(),\n z.object({\n value: z.string(),\n label: LocalizedStringSchema.optional(),\n }),\n ])).optional().describe('Enum values (only for kind: enum)'),\n options: z.object({\n softDelete: z.boolean().optional(),\n timestamps: z.boolean().optional(),\n authenticatable: z.boolean().optional(),\n tableName: z.string().optional(),\n idType: z.enum(['BigInt', 'Int', 'Uuid', 'String']).optional(),\n }).optional(),\n});\n\n// ============================================================================\n// Tool Implementations\n// ============================================================================\n\nfunction getPropertyTypes(): string {\n return `# Omnify Property Types\n\n## Primitive Types\n- **String**: VARCHAR(255) - short text, use \\`length\\` for custom size\n- **Int**: INTEGER - 32-bit integer\n- **BigInt**: BIGINT - 64-bit integer (default for IDs)\n- **Float**: FLOAT - floating point number\n- **Decimal**: DECIMAL(precision, scale) - exact decimal, use for money\n- **Boolean**: BOOLEAN - true/false\n\n## Text Types\n- **Text**: TEXT (~65KB) - medium text content\n- **LongText**: LONGTEXT (~4GB) - large text content\n\n## Date/Time Types\n- **Date**: DATE - date only (YYYY-MM-DD)\n- **Time**: TIME - time only (HH:MM:SS)\n- **Timestamp**: TIMESTAMP - date and time\n\n## Special Types\n- **Email**: VARCHAR(255) - validated email format\n- **Password**: VARCHAR(255) - hashed password (auto-hidden)\n- **Json**: JSON - structured data\n- **File**: Polymorphic file attachment\n\n## Enum Types\n- **Enum**: Inline enum values\n- **EnumRef**: Reference to shared enum schema\n\n## Association Types (Relations)\n- **Association**: Relationship to another schema\n - relation: OneToOne, OneToMany, ManyToOne, ManyToMany\n - relation: MorphTo, MorphOne, MorphMany (polymorphic)\n - target: Target schema name\n - onDelete: CASCADE, SET NULL, RESTRICT\n`;\n}\n\nfunction getRelationshipGuide(): string {\n return `# Omnify Relationship Guide\n\n## Standard Relations\n\n### ManyToOne (belongs to)\nMost common - creates foreign key column.\n\\`\\`\\`yaml\nauthor:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n\\`\\`\\`\n\n### OneToMany (has many)\nInverse of ManyToOne - no column created.\n\\`\\`\\`yaml\nposts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n### ManyToMany\nCreates pivot table automatically.\n\\`\\`\\`yaml\ntags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags # optional custom name\n\\`\\`\\`\n\n### OneToOne\nUnique foreign key relationship.\n\\`\\`\\`yaml\nprofile:\n type: Association\n relation: OneToOne\n target: UserProfile\n\\`\\`\\`\n\n## Polymorphic Relations\n\n### MorphTo (owning side)\nCreates {name}_type and {name}_id columns.\n\\`\\`\\`yaml\ncommentable:\n type: Association\n relation: MorphTo\n\\`\\`\\`\n\n### MorphMany (inverse side)\nNo columns - defines inverse relationship.\n\\`\\`\\`yaml\ncomments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n`;\n}\n\nfunction getExampleSchemas(): string {\n return `# Omnify Schema Examples\n\n## User Schema (with authentication)\n\\`\\`\\`yaml\nname: User\ndisplayName:\n ja: ユーザー\n en: User\noptions:\n softDelete: true\n authenticatable: true\nproperties:\n name:\n type: String\n displayName:\n ja: 氏名\n en: Full Name\n email:\n type: Email\n unique: true\n displayName:\n ja: メールアドレス\n en: Email Address\n password:\n type: Password\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n\n## Post Schema (with relations)\n\\`\\`\\`yaml\nname: Post\ndisplayName:\n ja: 投稿\n en: Post\noptions:\n softDelete: true\n indexes:\n - columns: [published_at]\n - columns: [status, published_at]\nproperties:\n title:\n type: String\n displayName:\n ja: タイトル\n en: Title\n slug:\n type: String\n unique: true\n content:\n type: LongText\n displayName:\n ja: 本文\n en: Content\n status:\n type: EnumRef\n enum: PostStatus\n default: draft\n published_at:\n type: Timestamp\n nullable: true\n author:\n type: Association\n relation: ManyToOne\n target: User\n onDelete: CASCADE\n category:\n type: Association\n relation: ManyToOne\n target: Category\n tags:\n type: Association\n relation: ManyToMany\n target: Tag\n joinTable: post_tags\n comments:\n type: Association\n relation: MorphMany\n target: Comment\n\\`\\`\\`\n\n## Enum Schema\n\\`\\`\\`yaml\nname: PostStatus\nkind: enum\ndisplayName:\n ja: 投稿ステータス\n en: Post Status\nvalues:\n - value: draft\n label:\n ja: 下書き\n en: Draft\n - value: pending\n label:\n ja: 審査中\n en: Pending Review\n - value: published\n label:\n ja: 公開済み\n en: Published\n - value: archived\n label:\n ja: アーカイブ\n en: Archived\n\\`\\`\\`\n\n## Category Schema (self-referencing)\n\\`\\`\\`yaml\nname: Category\ndisplayName:\n ja: カテゴリ\n en: Category\nproperties:\n name:\n type: String\n length: 100\n slug:\n type: String\n unique: true\n description:\n type: Text\n nullable: true\n parent:\n type: Association\n relation: ManyToOne\n target: Category\n nullable: true\n children:\n type: Association\n relation: OneToMany\n target: Category\n posts:\n type: Association\n relation: OneToMany\n target: Post\n\\`\\`\\`\n`;\n}\n\nfunction createSchema(input: z.infer<typeof CreateSchemaInputSchema>): string {\n const schema: Record<string, unknown> = {\n name: input.name,\n };\n\n if (input.kind && input.kind !== 'object') {\n schema.kind = input.kind;\n }\n\n if (input.displayName) {\n schema.displayName = input.displayName;\n }\n\n if (input.group) {\n schema.group = input.group;\n }\n\n if (input.options && Object.keys(input.options).length > 0) {\n schema.options = input.options;\n }\n\n if (input.properties && Object.keys(input.properties).length > 0) {\n schema.properties = input.properties;\n }\n\n if (input.values && input.values.length > 0) {\n schema.values = input.values;\n }\n\n return yaml.stringify(schema);\n}\n\nfunction validateSchemaYaml(yamlContent: string): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n const schema = yaml.parse(yamlContent);\n\n // Check required fields\n if (!schema.name) {\n errors.push('Missing required field: name');\n }\n\n // Check kind\n if (schema.kind && !['object', 'enum'].includes(schema.kind)) {\n errors.push(`Invalid kind: ${schema.kind}. Must be 'object' or 'enum'`);\n }\n\n // Validate enum schema\n if (schema.kind === 'enum') {\n if (!schema.values || schema.values.length === 0) {\n errors.push('Enum schema must have values array');\n }\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n warnings.push('Enum schemas should not have properties');\n }\n }\n\n // Validate object schema\n if (schema.kind !== 'enum') {\n if (schema.values && schema.values.length > 0) {\n warnings.push('Object schemas should not have values (use kind: enum for enums)');\n }\n\n // Validate properties\n if (schema.properties) {\n for (const [propName, propDef] of Object.entries(schema.properties)) {\n const prop = propDef as Record<string, unknown>;\n\n if (!prop.type) {\n errors.push(`Property '${propName}' missing required field: type`);\n }\n\n // Validate Association\n if (prop.type === 'Association') {\n if (!prop.relation) {\n errors.push(`Property '${propName}' (Association) missing required field: relation`);\n }\n if (prop.relation !== 'MorphTo' && !prop.target) {\n errors.push(`Property '${propName}' (Association) missing required field: target`);\n }\n }\n\n // Validate EnumRef\n if (prop.type === 'EnumRef' && !prop.enum) {\n errors.push(`Property '${propName}' (EnumRef) missing required field: enum`);\n }\n\n // Validate Enum\n if (prop.type === 'Enum' && !prop.enum) {\n errors.push(`Property '${propName}' (Enum) missing required field: enum`);\n }\n }\n }\n }\n\n return { valid: errors.length === 0, errors, warnings };\n } catch (e) {\n return {\n valid: false,\n errors: [`Invalid YAML: ${e instanceof Error ? e.message : 'Unknown error'}`],\n warnings: [],\n };\n }\n}\n\n// ============================================================================\n// MCP Server Setup\n// ============================================================================\n\nconst server = new Server(\n {\n name: 'omnify-mcp',\n version: '0.0.1',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n);\n\n// List available tools\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'omnify_create_schema',\n description: 'Create an Omnify schema YAML file. Use this to generate database models with Laravel and TypeScript support.',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'Schema name in PascalCase (e.g., User, BlogPost)',\n },\n kind: {\n type: 'string',\n enum: ['object', 'enum'],\n default: 'object',\n description: 'Schema kind - object for tables, enum for enumeration types',\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n description: 'Human-readable name. Can be string or locale map like { ja: \"日本語\", en: \"English\" }',\n },\n group: {\n type: 'string',\n description: 'Schema group for organization (e.g., auth, blog, shop)',\n },\n properties: {\n type: 'object',\n description: 'Property definitions. Each property has type and optional modifiers.',\n additionalProperties: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['String', 'Int', 'BigInt', 'Float', 'Decimal', 'Boolean', 'Text', 'LongText', 'Date', 'Time', 'Timestamp', 'Json', 'Email', 'Password', 'File', 'Enum', 'EnumRef', 'Association'],\n },\n displayName: {\n oneOf: [\n { type: 'string' },\n { type: 'object', additionalProperties: { type: 'string' } },\n ],\n },\n nullable: { type: 'boolean' },\n unique: { type: 'boolean' },\n default: {},\n length: { type: 'number' },\n enum: { oneOf: [{ type: 'string' }, { type: 'array' }] },\n relation: { type: 'string', enum: ['OneToOne', 'OneToMany', 'ManyToOne', 'ManyToMany', 'MorphTo', 'MorphOne', 'MorphMany'] },\n target: { type: 'string' },\n onDelete: { type: 'string', enum: ['CASCADE', 'SET NULL', 'RESTRICT'] },\n joinTable: { type: 'string' },\n },\n },\n },\n values: {\n type: 'array',\n description: 'Enum values (only for kind: enum)',\n items: {\n oneOf: [\n { type: 'string' },\n { type: 'object', properties: { value: { type: 'string' }, label: {} } },\n ],\n },\n },\n options: {\n type: 'object',\n properties: {\n softDelete: { type: 'boolean', description: 'Enable soft deletes' },\n timestamps: { type: 'boolean', description: 'Add created_at/updated_at' },\n authenticatable: { type: 'boolean', description: 'Enable for User model' },\n tableName: { type: 'string', description: 'Custom table name' },\n idType: { type: 'string', enum: ['BigInt', 'Int', 'Uuid', 'String'] },\n },\n },\n },\n required: ['name'],\n },\n },\n {\n name: 'omnify_validate_schema',\n description: 'Validate an Omnify schema YAML content. Returns validation errors and warnings.',\n inputSchema: {\n type: 'object',\n properties: {\n yaml_content: {\n type: 'string',\n description: 'YAML content to validate',\n },\n },\n required: ['yaml_content'],\n },\n },\n {\n name: 'omnify_get_types',\n description: 'Get documentation for all Omnify property types and their options.',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_relationships',\n description: 'Get documentation for Omnify relationship types (OneToMany, ManyToOne, ManyToMany, polymorphic, etc.)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'omnify_get_examples',\n description: 'Get example Omnify schemas for common use cases (User, Post, Category, Enum)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n ],\n };\n});\n\n// Handle tool calls\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n switch (name) {\n case 'omnify_create_schema': {\n try {\n const input = CreateSchemaInputSchema.parse(args);\n const yamlContent = createSchema(input);\n return {\n content: [\n {\n type: 'text',\n text: `# Generated Schema: ${input.name}\\n\\n\\`\\`\\`yaml\\n${yamlContent}\\`\\`\\`\\n\\nSave this to: schemas/${input.group || 'default'}/${input.name}.yaml`,\n },\n ],\n };\n } catch (e) {\n return {\n content: [\n {\n type: 'text',\n text: `Error creating schema: ${e instanceof Error ? e.message : 'Unknown error'}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'omnify_validate_schema': {\n const yamlContent = (args as { yaml_content: string }).yaml_content;\n const result = validateSchemaYaml(yamlContent);\n\n let response = result.valid ? '✅ Schema is valid!\\n\\n' : '❌ Schema has errors:\\n\\n';\n\n if (result.errors.length > 0) {\n response += '**Errors:**\\n' + result.errors.map(e => `- ${e}`).join('\\n') + '\\n\\n';\n }\n\n if (result.warnings.length > 0) {\n response += '**Warnings:**\\n' + result.warnings.map(w => `- ${w}`).join('\\n');\n }\n\n return {\n content: [{ type: 'text', text: response }],\n };\n }\n\n case 'omnify_get_types': {\n return {\n content: [{ type: 'text', text: getPropertyTypes() }],\n };\n }\n\n case 'omnify_get_relationships': {\n return {\n content: [{ type: 'text', text: getRelationshipGuide() }],\n };\n }\n\n case 'omnify_get_examples': {\n return {\n content: [{ type: 'text', text: getExampleSchemas() }],\n };\n }\n\n default:\n return {\n content: [{ type: 'text', text: `Unknown tool: ${name}` }],\n isError: true,\n };\n }\n});\n\n// List resources\nserver.setRequestHandler(ListResourcesRequestSchema, async () => {\n return {\n resources: [\n {\n uri: 'omnify://schema/json-schema',\n name: 'Omnify JSON Schema',\n description: 'JSON Schema for validating Omnify schema files',\n mimeType: 'application/json',\n },\n {\n uri: 'omnify://docs/types',\n name: 'Property Types Documentation',\n description: 'Documentation for all Omnify property types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://docs/relationships',\n name: 'Relationships Documentation',\n description: 'Documentation for Omnify relationship types',\n mimeType: 'text/markdown',\n },\n {\n uri: 'omnify://examples/all',\n name: 'Schema Examples',\n description: 'Example schemas for common use cases',\n mimeType: 'text/markdown',\n },\n ],\n };\n});\n\n// Read resources\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n switch (uri) {\n case 'omnify://docs/types':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getPropertyTypes() }],\n };\n case 'omnify://docs/relationships':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getRelationshipGuide() }],\n };\n case 'omnify://examples/all':\n return {\n contents: [{ uri, mimeType: 'text/markdown', text: getExampleSchemas() }],\n };\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n});\n\n// Start server\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Omnify MCP Server running on stdio');\n}\n\nmain().catch(console.error);\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@famgia/omnify-mcp",
3
- "version": "0.0.65",
3
+ "version": "0.0.66",
4
4
  "description": "MCP Server for Omnify schema - enables AI assistants to create and validate schemas",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,11 +24,11 @@
24
24
  "@modelcontextprotocol/sdk": "^1.0.0",
25
25
  "yaml": "^2.6.1",
26
26
  "zod": "^3.24.1",
27
- "@famgia/omnify-core": "0.0.79",
28
- "@famgia/omnify-types": "0.0.77"
27
+ "@famgia/omnify-types": "0.0.78",
28
+ "@famgia/omnify-core": "0.0.80"
29
29
  },
30
30
  "devDependencies": {
31
- "@types/node": "^20.19.0",
31
+ "@types/node": "^25.0.0",
32
32
  "typescript": "^5.7.0",
33
33
  "tsup": "^8.5.0",
34
34
  "vitest": "^1.6.0"