{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://modelcontextprotocol.io/ext-apps/schema.json", "title": "MCP Apps Protocol", "description": "JSON Schema for MCP Apps UI protocol messages", "$defs": { "McpUiAppCapabilities": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "experimental": { "description": "Experimental features (structure TBD).", "type": "object", "properties": {}, "additionalProperties": false }, "tools": { "description": "App exposes MCP-style tools that the host can call.", "type": "object", "properties": { "listChanged": { "description": "App supports tools/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false } }, "additionalProperties": false }, "McpUiDisplayMode": { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Display mode for UI presentation.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] }, "McpUiHostCapabilities": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "experimental": { "description": "Experimental features (structure TBD).", "type": "object", "properties": {}, "additionalProperties": false }, "openLinks": { "description": "Host supports opening external URLs.", "type": "object", "properties": {}, "additionalProperties": false }, "serverTools": { "description": "Host can proxy tool calls to the MCP server.", "type": "object", "properties": { "listChanged": { "description": "Host supports tools/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false }, "serverResources": { "description": "Host can proxy resource reads to the MCP server.", "type": "object", "properties": { "listChanged": { "description": "Host supports resources/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false }, "logging": { "description": "Host accepts log messages.", "type": "object", "properties": {}, "additionalProperties": false } }, "additionalProperties": false }, "McpUiHostContextChangedNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/host-context-changed" }, "params": { "description": "Partial context update containing only changed fields.", "type": "object", "properties": { "toolInfo": { "description": "Metadata of the tool call that instantiated this App.", "type": "object", "properties": { "id": { "description": "JSON-RPC id of the tools/call request.", "anyOf": [ { "type": "string" }, { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } ] }, "tool": { "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "description": { "type": "string" }, "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "outputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "annotations": { "type": "object", "properties": { "title": { "type": "string" }, "readOnlyHint": { "type": "boolean" }, "destructiveHint": { "type": "boolean" }, "idempotentHint": { "type": "boolean" }, "openWorldHint": { "type": "boolean" } }, "additionalProperties": false }, "execution": { "type": "object", "properties": { "taskSupport": { "type": "string", "enum": ["required", "optional", "forbidden"] } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["name", "inputSchema"], "additionalProperties": false } }, "required": ["id", "tool"], "additionalProperties": false }, "theme": { "description": "Current color theme preference.", "anyOf": [ { "type": "string", "const": "light" }, { "type": "string", "const": "dark" } ] }, "styles": { "description": "Style configuration for theming the app.", "type": "object", "properties": { "variables": { "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "additionalProperties": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} ] } }, "css": { "description": "CSS blocks that apps can inject.", "type": "object", "properties": { "fonts": { "description": "CSS for font loading (@font-face rules or", "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, "displayMode": { "description": "How the UI is currently displayed.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] }, "availableDisplayModes": { "description": "Display modes the host supports.", "type": "array", "items": { "type": "string" } }, "viewport": { "description": "Current and maximum dimensions available to the UI.", "type": "object", "properties": { "width": { "description": "Viewport width in pixels (if fixed). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "height": { "description": "Viewport height in pixels (if fixed). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxWidth": { "description": "Maximum available viewport width in pixels (if constrained). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxHeight": { "description": "Maximum available viewport height in pixels (if constrained). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] } }, "additionalProperties": false }, "locale": { "description": "User's language and region preference in BCP 47 format.", "type": "string" }, "timeZone": { "description": "User's timezone in IANA format.", "type": "string" }, "userAgent": { "description": "Host application identifier.", "type": "string" }, "platform": { "description": "Platform type for responsive design decisions.", "anyOf": [ { "type": "string", "const": "web" }, { "type": "string", "const": "desktop" }, { "type": "string", "const": "mobile" } ] }, "deviceCapabilities": { "description": "Device input capabilities.", "type": "object", "properties": { "touch": { "description": "Whether the device supports touch input.", "type": "boolean" }, "hover": { "description": "Whether the device supports hover interactions.", "type": "boolean" } }, "additionalProperties": false }, "safeAreaInsets": { "description": "Mobile safe area boundaries in pixels.", "type": "object", "properties": { "top": { "description": "Top safe area inset in pixels.", "type": "number" }, "right": { "description": "Right safe area inset in pixels.", "type": "number" }, "bottom": { "description": "Bottom safe area inset in pixels.", "type": "number" }, "left": { "description": "Left safe area inset in pixels.", "type": "number" } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, "additionalProperties": {} } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiHostContext": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "toolInfo": { "description": "Metadata of the tool call that instantiated this App.", "type": "object", "properties": { "id": { "description": "JSON-RPC id of the tools/call request.", "anyOf": [ { "type": "string" }, { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } ] }, "tool": { "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "description": { "type": "string" }, "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "outputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "annotations": { "type": "object", "properties": { "title": { "type": "string" }, "readOnlyHint": { "type": "boolean" }, "destructiveHint": { "type": "boolean" }, "idempotentHint": { "type": "boolean" }, "openWorldHint": { "type": "boolean" } }, "additionalProperties": false }, "execution": { "type": "object", "properties": { "taskSupport": { "type": "string", "enum": ["required", "optional", "forbidden"] } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["name", "inputSchema"], "additionalProperties": false } }, "required": ["id", "tool"], "additionalProperties": false }, "theme": { "description": "Current color theme preference.", "anyOf": [ { "type": "string", "const": "light" }, { "type": "string", "const": "dark" } ] }, "styles": { "description": "Style configuration for theming the app.", "type": "object", "properties": { "variables": { "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "additionalProperties": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} ] } }, "css": { "description": "CSS blocks that apps can inject.", "type": "object", "properties": { "fonts": { "description": "CSS for font loading (@font-face rules or", "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, "displayMode": { "description": "How the UI is currently displayed.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] }, "availableDisplayModes": { "description": "Display modes the host supports.", "type": "array", "items": { "type": "string" } }, "viewport": { "description": "Current and maximum dimensions available to the UI.", "type": "object", "properties": { "width": { "description": "Viewport width in pixels (if fixed). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "height": { "description": "Viewport height in pixels (if fixed). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxWidth": { "description": "Maximum available viewport width in pixels (if constrained). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxHeight": { "description": "Maximum available viewport height in pixels (if constrained). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] } }, "additionalProperties": false }, "locale": { "description": "User's language and region preference in BCP 47 format.", "type": "string" }, "timeZone": { "description": "User's timezone in IANA format.", "type": "string" }, "userAgent": { "description": "Host application identifier.", "type": "string" }, "platform": { "description": "Platform type for responsive design decisions.", "anyOf": [ { "type": "string", "const": "web" }, { "type": "string", "const": "desktop" }, { "type": "string", "const": "mobile" } ] }, "deviceCapabilities": { "description": "Device input capabilities.", "type": "object", "properties": { "touch": { "description": "Whether the device supports touch input.", "type": "boolean" }, "hover": { "description": "Whether the device supports hover interactions.", "type": "boolean" } }, "additionalProperties": false }, "safeAreaInsets": { "description": "Mobile safe area boundaries in pixels.", "type": "object", "properties": { "top": { "description": "Top safe area inset in pixels.", "type": "number" }, "right": { "description": "Right safe area inset in pixels.", "type": "number" }, "bottom": { "description": "Bottom safe area inset in pixels.", "type": "number" }, "left": { "description": "Left safe area inset in pixels.", "type": "number" } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, "additionalProperties": {} }, "McpUiHostCss": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "fonts": { "description": "CSS for font loading (@font-face rules or", "type": "string" } }, "additionalProperties": false }, "McpUiHostStyles": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "variables": { "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "additionalProperties": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} ] } }, "css": { "description": "CSS blocks that apps can inject.", "type": "object", "properties": { "fonts": { "description": "CSS for font loading (@font-face rules or", "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, "McpUiInitializeRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/initialize" }, "params": { "type": "object", "properties": { "appInfo": { "description": "App identification (name and version).", "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "version": { "type": "string" }, "websiteUrl": { "type": "string" } }, "required": ["name", "version"], "additionalProperties": false }, "appCapabilities": { "description": "Features and capabilities this app provides.", "type": "object", "properties": { "experimental": { "description": "Experimental features (structure TBD).", "type": "object", "properties": {}, "additionalProperties": false }, "tools": { "description": "App exposes MCP-style tools that the host can call.", "type": "object", "properties": { "listChanged": { "description": "App supports tools/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false } }, "additionalProperties": false }, "protocolVersion": { "description": "Protocol version this app supports.", "type": "string" } }, "required": ["appInfo", "appCapabilities", "protocolVersion"], "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiInitializeResult": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "protocolVersion": { "description": "Negotiated protocol version string (e.g., \"2025-11-21\").", "type": "string" }, "hostInfo": { "description": "Host application identification and version.", "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "version": { "type": "string" }, "websiteUrl": { "type": "string" } }, "required": ["name", "version"], "additionalProperties": false }, "hostCapabilities": { "description": "Features and capabilities provided by the host.", "type": "object", "properties": { "experimental": { "description": "Experimental features (structure TBD).", "type": "object", "properties": {}, "additionalProperties": false }, "openLinks": { "description": "Host supports opening external URLs.", "type": "object", "properties": {}, "additionalProperties": false }, "serverTools": { "description": "Host can proxy tool calls to the MCP server.", "type": "object", "properties": { "listChanged": { "description": "Host supports tools/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false }, "serverResources": { "description": "Host can proxy resource reads to the MCP server.", "type": "object", "properties": { "listChanged": { "description": "Host supports resources/list_changed notifications.", "type": "boolean" } }, "additionalProperties": false }, "logging": { "description": "Host accepts log messages.", "type": "object", "properties": {}, "additionalProperties": false } }, "additionalProperties": false }, "hostContext": { "description": "Rich context about the host environment.", "type": "object", "properties": { "toolInfo": { "description": "Metadata of the tool call that instantiated this App.", "type": "object", "properties": { "id": { "description": "JSON-RPC id of the tools/call request.", "anyOf": [ { "type": "string" }, { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 } ] }, "tool": { "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "description": { "type": "string" }, "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "outputSchema": { "type": "object", "properties": { "type": { "type": "string", "const": "object" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "required": { "type": "array", "items": { "type": "string" } } }, "required": ["type"], "additionalProperties": {} }, "annotations": { "type": "object", "properties": { "title": { "type": "string" }, "readOnlyHint": { "type": "boolean" }, "destructiveHint": { "type": "boolean" }, "idempotentHint": { "type": "boolean" }, "openWorldHint": { "type": "boolean" } }, "additionalProperties": false }, "execution": { "type": "object", "properties": { "taskSupport": { "type": "string", "enum": ["required", "optional", "forbidden"] } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["name", "inputSchema"], "additionalProperties": false } }, "required": ["id", "tool"], "additionalProperties": false }, "theme": { "description": "Current color theme preference.", "anyOf": [ { "type": "string", "const": "light" }, { "type": "string", "const": "dark" } ] }, "styles": { "description": "Style configuration for theming the app.", "type": "object", "properties": { "variables": { "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "additionalProperties": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} ] } }, "css": { "description": "CSS blocks that apps can inject.", "type": "object", "properties": { "fonts": { "description": "CSS for font loading (@font-face rules or", "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false }, "displayMode": { "description": "How the UI is currently displayed.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] }, "availableDisplayModes": { "description": "Display modes the host supports.", "type": "array", "items": { "type": "string" } }, "viewport": { "description": "Current and maximum dimensions available to the UI.", "type": "object", "properties": { "width": { "description": "Viewport width in pixels (if fixed). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "height": { "description": "Viewport height in pixels (if fixed). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxWidth": { "description": "Maximum available viewport width in pixels (if constrained). Only pass width or maxWidth, not both.", "anyOf": [ { "type": "number" }, {} ] }, "maxHeight": { "description": "Maximum available viewport height in pixels (if constrained). Only pass height or maxHeight, not both.", "anyOf": [ { "type": "number" }, {} ] } }, "additionalProperties": false }, "locale": { "description": "User's language and region preference in BCP 47 format.", "type": "string" }, "timeZone": { "description": "User's timezone in IANA format.", "type": "string" }, "userAgent": { "description": "Host application identifier.", "type": "string" }, "platform": { "description": "Platform type for responsive design decisions.", "anyOf": [ { "type": "string", "const": "web" }, { "type": "string", "const": "desktop" }, { "type": "string", "const": "mobile" } ] }, "deviceCapabilities": { "description": "Device input capabilities.", "type": "object", "properties": { "touch": { "description": "Whether the device supports touch input.", "type": "boolean" }, "hover": { "description": "Whether the device supports hover interactions.", "type": "boolean" } }, "additionalProperties": false }, "safeAreaInsets": { "description": "Mobile safe area boundaries in pixels.", "type": "object", "properties": { "top": { "description": "Top safe area inset in pixels.", "type": "number" }, "right": { "description": "Right safe area inset in pixels.", "type": "number" }, "bottom": { "description": "Bottom safe area inset in pixels.", "type": "number" }, "left": { "description": "Left safe area inset in pixels.", "type": "number" } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, "additionalProperties": {} } }, "required": [ "protocolVersion", "hostInfo", "hostCapabilities", "hostContext" ], "additionalProperties": {} }, "McpUiInitializedNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/initialized" }, "params": { "type": "object", "properties": {}, "additionalProperties": false } }, "required": ["method"], "additionalProperties": false }, "McpUiMessageRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/message" }, "params": { "type": "object", "properties": { "role": { "description": "Message role, currently only \"user\" is supported.", "type": "string", "const": "user" }, "content": { "description": "Message content blocks (text, image, etc.).", "type": "array", "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "text" }, "text": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "text"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "image" }, "data": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "data", "mimeType"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "audio" }, "data": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "data", "mimeType"], "additionalProperties": false }, { "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "uri": { "type": "string" }, "description": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "properties": {}, "additionalProperties": {} }, "type": { "type": "string", "const": "resource_link" } }, "required": ["name", "uri", "type"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "resource" }, "resource": { "anyOf": [ { "type": "object", "properties": { "uri": { "type": "string" }, "mimeType": { "type": "string" }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "text": { "type": "string" } }, "required": ["uri", "text"], "additionalProperties": false }, { "type": "object", "properties": { "uri": { "type": "string" }, "mimeType": { "type": "string" }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "blob": { "type": "string" } }, "required": ["uri", "blob"], "additionalProperties": false } ] }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "resource"], "additionalProperties": false } ] } } }, "required": ["role", "content"], "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiMessageResult": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "isError": { "description": "True if the host rejected or failed to deliver the message.", "type": "boolean" } }, "additionalProperties": {} }, "McpUiOpenLinkRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/open-link" }, "params": { "type": "object", "properties": { "url": { "description": "URL to open in the host's browser", "type": "string" } }, "required": ["url"], "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiOpenLinkResult": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "isError": { "description": "True if the host failed to open the URL (e.g., due to security policy).", "type": "boolean" } }, "additionalProperties": {} }, "McpUiRequestDisplayModeRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/request-display-mode" }, "params": { "type": "object", "properties": { "mode": { "description": "The display mode being requested.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] } }, "required": ["mode"], "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiRequestDisplayModeResult": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "mode": { "description": "The display mode that was actually set. May differ from requested if not supported.", "anyOf": [ { "type": "string", "const": "inline" }, { "type": "string", "const": "fullscreen" }, { "type": "string", "const": "pip" } ] } }, "required": ["mode"], "additionalProperties": {} }, "McpUiResourceCsp": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "connectDomains": { "description": "Origins for network requests (fetch/XHR/WebSocket).", "type": "array", "items": { "type": "string" } }, "resourceDomains": { "description": "Origins for static resources (scripts, images, styles, fonts).", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "McpUiResourceMeta": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "csp": { "description": "Content Security Policy configuration.", "type": "object", "properties": { "connectDomains": { "description": "Origins for network requests (fetch/XHR/WebSocket).", "type": "array", "items": { "type": "string" } }, "resourceDomains": { "description": "Origins for static resources (scripts, images, styles, fonts).", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "domain": { "description": "Dedicated origin for widget sandbox.", "type": "string" }, "prefersBorder": { "description": "Visual boundary preference - true if UI prefers a visible border.", "type": "boolean" } }, "additionalProperties": false }, "McpUiResourceTeardownRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/resource-teardown" }, "params": { "type": "object", "properties": {}, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiResourceTeardownResult": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "McpUiSandboxProxyReadyNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/sandbox-proxy-ready" }, "params": { "type": "object", "properties": {}, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiSandboxResourceReadyNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/sandbox-resource-ready" }, "params": { "type": "object", "properties": { "html": { "description": "HTML content to load into the inner iframe.", "type": "string" }, "sandbox": { "description": "Optional override for the inner iframe's sandbox attribute.", "type": "string" }, "csp": { "description": "CSP configuration from resource metadata.", "type": "object", "properties": { "connectDomains": { "description": "Origins for network requests (fetch/XHR/WebSocket).", "type": "array", "items": { "type": "string" } }, "resourceDomains": { "description": "Origins for static resources (scripts, images, styles, fonts).", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } }, "required": ["html"], "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiSizeChangedNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/size-changed" }, "params": { "type": "object", "properties": { "width": { "description": "New width in pixels.", "type": "number" }, "height": { "description": "New height in pixels.", "type": "number" } }, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiStyleVariableKey": { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "CSS variable keys available to MCP apps for theming.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "McpUiStyles": { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "type": "object", "propertyNames": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", "const": "--color-background-primary" }, { "type": "string", "const": "--color-background-secondary" }, { "type": "string", "const": "--color-background-tertiary" }, { "type": "string", "const": "--color-background-inverse" }, { "type": "string", "const": "--color-background-ghost" }, { "type": "string", "const": "--color-background-info" }, { "type": "string", "const": "--color-background-danger" }, { "type": "string", "const": "--color-background-success" }, { "type": "string", "const": "--color-background-warning" }, { "type": "string", "const": "--color-background-disabled" }, { "type": "string", "const": "--color-text-primary" }, { "type": "string", "const": "--color-text-secondary" }, { "type": "string", "const": "--color-text-tertiary" }, { "type": "string", "const": "--color-text-inverse" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-text-info" }, { "type": "string", "const": "--color-text-danger" }, { "type": "string", "const": "--color-text-success" }, { "type": "string", "const": "--color-text-warning" }, { "type": "string", "const": "--color-text-disabled" }, { "type": "string", "const": "--color-text-ghost" }, { "type": "string", "const": "--color-border-primary" }, { "type": "string", "const": "--color-border-secondary" }, { "type": "string", "const": "--color-border-tertiary" }, { "type": "string", "const": "--color-border-inverse" }, { "type": "string", "const": "--color-border-ghost" }, { "type": "string", "const": "--color-border-info" }, { "type": "string", "const": "--color-border-danger" }, { "type": "string", "const": "--color-border-success" }, { "type": "string", "const": "--color-border-warning" }, { "type": "string", "const": "--color-border-disabled" }, { "type": "string", "const": "--color-ring-primary" }, { "type": "string", "const": "--color-ring-secondary" }, { "type": "string", "const": "--color-ring-inverse" }, { "type": "string", "const": "--color-ring-info" }, { "type": "string", "const": "--color-ring-danger" }, { "type": "string", "const": "--color-ring-success" }, { "type": "string", "const": "--color-ring-warning" }, { "type": "string", "const": "--font-sans" }, { "type": "string", "const": "--font-mono" }, { "type": "string", "const": "--font-weight-normal" }, { "type": "string", "const": "--font-weight-medium" }, { "type": "string", "const": "--font-weight-semibold" }, { "type": "string", "const": "--font-weight-bold" }, { "type": "string", "const": "--font-text-xs-size" }, { "type": "string", "const": "--font-text-sm-size" }, { "type": "string", "const": "--font-text-md-size" }, { "type": "string", "const": "--font-text-lg-size" }, { "type": "string", "const": "--font-heading-xs-size" }, { "type": "string", "const": "--font-heading-sm-size" }, { "type": "string", "const": "--font-heading-md-size" }, { "type": "string", "const": "--font-heading-lg-size" }, { "type": "string", "const": "--font-heading-xl-size" }, { "type": "string", "const": "--font-heading-2xl-size" }, { "type": "string", "const": "--font-heading-3xl-size" }, { "type": "string", "const": "--font-text-xs-line-height" }, { "type": "string", "const": "--font-text-sm-line-height" }, { "type": "string", "const": "--font-text-md-line-height" }, { "type": "string", "const": "--font-text-lg-line-height" }, { "type": "string", "const": "--font-heading-xs-line-height" }, { "type": "string", "const": "--font-heading-sm-line-height" }, { "type": "string", "const": "--font-heading-md-line-height" }, { "type": "string", "const": "--font-heading-lg-line-height" }, { "type": "string", "const": "--font-heading-xl-line-height" }, { "type": "string", "const": "--font-heading-2xl-line-height" }, { "type": "string", "const": "--font-heading-3xl-line-height" }, { "type": "string", "const": "--border-radius-xs" }, { "type": "string", "const": "--border-radius-sm" }, { "type": "string", "const": "--border-radius-md" }, { "type": "string", "const": "--border-radius-lg" }, { "type": "string", "const": "--border-radius-xl" }, { "type": "string", "const": "--border-radius-full" }, { "type": "string", "const": "--border-width-regular" }, { "type": "string", "const": "--shadow-hairline" }, { "type": "string", "const": "--shadow-sm" }, { "type": "string", "const": "--shadow-md" }, { "type": "string", "const": "--shadow-lg" } ] }, "additionalProperties": { "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} ] } }, "McpUiTheme": { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Color theme preference for the host environment.", "anyOf": [ { "type": "string", "const": "light" }, { "type": "string", "const": "dark" } ] }, "McpUiToolCancelledNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/tool-cancelled" }, "params": { "type": "object", "properties": { "reason": { "description": "Optional reason for the cancellation (e.g., \"user action\", \"timeout\").", "type": "string" } }, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiToolInputNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/tool-input" }, "params": { "type": "object", "properties": { "arguments": { "description": "Complete tool call arguments as key-value pairs.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "description": "Complete tool call arguments as key-value pairs." } } }, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiToolInputPartialNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/tool-input-partial" }, "params": { "type": "object", "properties": { "arguments": { "description": "Partial tool call arguments (incomplete, may change).", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "description": "Partial tool call arguments (incomplete, may change)." } } }, "additionalProperties": false } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiToolMeta": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "resourceUri": { "type": "string" }, "visibility": { "description": "Who can access this tool. Default: [\"model\", \"app\"]\n- \"model\": Tool visible to and callable by the agent\n- \"app\": Tool callable by the app from this server only", "type": "array", "items": { "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", "const": "model" }, { "type": "string", "const": "app" } ] } } }, "required": ["resourceUri"], "additionalProperties": false }, "McpUiToolResultNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "method": { "type": "string", "const": "ui/notifications/tool-result" }, "params": { "description": "Standard MCP tool execution result.", "type": "object", "properties": { "_meta": { "type": "object", "properties": { "io.modelcontextprotocol/related-task": { "type": "object", "properties": { "taskId": { "type": "string" } }, "required": ["taskId"], "additionalProperties": {} } }, "additionalProperties": {} }, "content": { "default": [], "type": "array", "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "text" }, "text": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "text"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "image" }, "data": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "data", "mimeType"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "audio" }, "data": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "data", "mimeType"], "additionalProperties": false }, { "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "icons": { "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string" }, "mimeType": { "type": "string" }, "sizes": { "type": "array", "items": { "type": "string" } } }, "required": ["src"], "additionalProperties": false } }, "uri": { "type": "string" }, "description": { "type": "string" }, "mimeType": { "type": "string" }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "properties": {}, "additionalProperties": {} }, "type": { "type": "string", "const": "resource_link" } }, "required": ["name", "uri", "type"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "resource" }, "resource": { "anyOf": [ { "type": "object", "properties": { "uri": { "type": "string" }, "mimeType": { "type": "string" }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "text": { "type": "string" } }, "required": ["uri", "text"], "additionalProperties": false }, { "type": "object", "properties": { "uri": { "type": "string" }, "mimeType": { "type": "string" }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "blob": { "type": "string" } }, "required": ["uri", "blob"], "additionalProperties": false } ] }, "annotations": { "type": "object", "properties": { "audience": { "type": "array", "items": { "type": "string", "enum": ["user", "assistant"] } }, "priority": { "type": "number", "minimum": 0, "maximum": 1 }, "lastModified": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" } }, "additionalProperties": false }, "_meta": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["type", "resource"], "additionalProperties": false } ] } }, "structuredContent": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "isError": { "type": "boolean" } }, "required": ["content"], "additionalProperties": {} } }, "required": ["method", "params"], "additionalProperties": false }, "McpUiToolVisibility": { "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", "const": "model" }, { "type": "string", "const": "app" } ] } } }