{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ITWorx MCP Hub Project", "description": "Desired-state project catalog document.", "type": "object", "additionalProperties": false, "$id": "https://hub.example.com/schemas/project.schema.json", "required": [ "apiVersion", "kind", "metadata", "spec" ], "properties": { "apiVersion": { "const": "hub.example.com/v1alpha1" }, "kind": { "const": "Project" }, "metadata": { "$ref": "common.schema.json#/$defs/metadata" }, "spec": { "type": "object", "additionalProperties": false, "required": [ "description", "workspace", "visibility", "documentation", "environments", "capabilityPacks", "connectorBindings", "virtualServers", "privacy" ], "properties": { "description": { "type": "string", "minLength": 1, "maxLength": 1000 }, "workspace": { "$ref": "common.schema.json#/$defs/slug" }, "visibility": { "enum": [ "private", "internal" ] }, "repository": { "type": [ "object", "null" ], "additionalProperties": false, "required": [ "provider", "owner", "name", "verification", "exposeMetadata" ], "properties": { "provider": { "enum": [ "gitea" ] }, "owner": { "type": "string", "minLength": 1, "maxLength": 120 }, "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "verification": { "$ref": "common.schema.json#/$defs/verification" }, "exposeMetadata": { "enum": [ "authorized-only", "never-public" ] } } }, "documentation": { "type": "object", "additionalProperties": false, "required": [ "roots", "indexSecrets", "maxDocumentBytes" ], "properties": { "roots": { "type": "array", "maxItems": 32, "items": { "type": "object", "additionalProperties": false, "required": [ "uri", "include", "verification" ], "properties": { "uri": { "type": "string", "minLength": 1, "maxLength": 2048 }, "include": { "type": "array", "items": { "type": "string", "maxLength": 300 }, "maxItems": 64 }, "verification": { "$ref": "common.schema.json#/$defs/verification" } } } }, "indexSecrets": { "const": false }, "maxDocumentBytes": { "type": "integer", "minimum": 1024, "maximum": 10485760 } } }, "environments": { "type": "object", "minProperties": 1, "maxProperties": 4, "propertyNames": { "$ref": "common.schema.json#/$defs/environmentName" }, "additionalProperties": { "type": "object", "additionalProperties": false, "required": [ "classification", "applicationUrl" ], "properties": { "classification": { "enum": [ "development", "test", "staging", "production" ] }, "applicationUrl": { "$ref": "common.schema.json#/$defs/uri" } } } }, "capabilityPacks": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "common.schema.json#/$defs/slug" } }, "connectorBindings": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "ref", "environments", "verification" ], "properties": { "ref": { "$ref": "common.schema.json#/$defs/slug" }, "environments": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "common.schema.json#/$defs/environmentName" } }, "verification": { "$ref": "common.schema.json#/$defs/verification" } } } }, "virtualServers": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": [ "slug", "environment", "endpointAlias", "protocolRevisions", "toolAllowPatterns", "resourceAllowPatterns", "defaultDecision" ], "properties": { "slug": { "$ref": "common.schema.json#/$defs/slug" }, "environment": { "$ref": "common.schema.json#/$defs/environmentName" }, "endpointAlias": { "type": "string", "pattern": "^/mcp/[a-z0-9-]+/(dev|test|staging|prod)$", "maxLength": 200 }, "protocolRevisions": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": [ "2026-07-28", "2025-11-25" ] } }, "toolAllowPatterns": { "$ref": "common.schema.json#/$defs/patternList" }, "promptAllowPatterns": { "$ref": "common.schema.json#/$defs/patternList" }, "resourceAllowPatterns": { "$ref": "common.schema.json#/$defs/patternList" }, "defaultDecision": { "const": "deny" } } } }, "privacy": { "type": "object", "additionalProperties": false, "required": [ "exposeRepositoryMetadata" ], "properties": { "exposeRepositoryMetadata": { "type": "boolean" } } } } } } }