{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/grittyninja/umcp/main/umcp.config.schema.json", "title": "umcp.config.jsonc", "type": "object", "additionalProperties": false, "required": [ "categories" ], "properties": { "$schema": { "type": "string" }, "categories": { "type": "object", "minProperties": 1, "propertyNames": { "pattern": "^[a-zA-Z0-9_-]+$" }, "additionalProperties": { "$ref": "#/$defs/category" } } }, "$defs": { "category": { "type": "object", "additionalProperties": false, "required": [ "providers" ], "properties": { "providers": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/provider" } } } }, "provider": { "type": "object", "additionalProperties": false, "required": [ "name" ], "properties": { "name": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9_-]+$" }, "transport": { "type": "string", "enum": [ "stdio", "sse", "streamable-http" ], "default": "stdio" }, "command": { "type": "string", "minLength": 1 }, "args": { "type": "array", "items": { "type": "string" } }, "url": { "type": "string", "format": "uri" }, "env": { "type": "object", "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } } ] } }, "tools": { "type": "array", "items": { "$ref": "#/$defs/toolMapping" } } }, "allOf": [ { "if": { "not": { "required": [ "transport" ] } }, "then": { "required": [ "command" ] } }, { "if": { "required": [ "transport" ], "properties": { "transport": { "const": "stdio" } } }, "then": { "required": [ "command" ] } }, { "if": { "required": [ "transport" ], "properties": { "transport": { "enum": [ "sse", "streamable-http" ] } } }, "then": { "required": [ "url" ] } } ] }, "toolMapping": { "type": "object", "additionalProperties": false, "required": [ "upstream" ], "properties": { "upstream": { "type": "string", "minLength": 1 }, "alias": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9_-]+$" }, "enabled": { "type": "boolean", "default": true } } } } }