ui:// resources.
Use it when you want the same checks as the CLI’s apps conformance command, but inside your own test runner or CI pipeline.
This currently validates the server-side MCP Apps surface only. It does
not prove full host-side SEP-1865 behavior such as
ui/initialize,
sandbox-proxy forwarding, or host notification ordering.Import
Basic usage
Suite usage
MCPAppsConformanceSuiteConfig is shaped for CI matrices:
MCPAppsConformanceConfig
MCPAppsConformanceConfig extends the standard MCPServerConfig, so it accepts the same HTTP and stdio connection settings as MCPClientManager.
Additional property:
Example with custom headers and a focused check set:
Check ids
Available checks:ui-tools-presentui-tool-metadata-validui-tool-input-schema-validui-listed-resources-validui-resources-readableui-resource-contents-validui-resource-meta-valid
Result shape
run() returns an MCPAppsConformanceResult.
Each
MCPAppsCheckResult includes:
idcategorytitledescriptionstatusdurationMs- optional
details - optional
warnings - optional
error
MCPAppsConformanceSuite.run() returns an MCPAppsConformanceSuiteResult:
CI reporting
All three conformance domains use the same shared reporting helpers:toConformanceReport(result)normalizes protocol, OAuth, and apps runs into a single report shape.renderConformanceReportJUnitXml(report)emits redacted JUnit XML for CI dashboards.renderConformanceReportJson(report)returns the redacted JSON-ready object for artifact uploads.
What the runner validates
The current runner checks:- At least one tool advertises MCP Apps UI metadata.
- Tool metadata uses a valid
ui://resource URI and validvisibilityvalues. - Tool
inputSchemais a non-null JSON Schema object. - Listed UI resources use
ui://andtext/html;profile=mcp-app. - Referenced UI resources are readable via
resources/read. - Resource payloads provide exactly one HTML document through
textorblob. _meta.ui.csp,permissions,domain, andprefersBorderuse valid shapes.
Notes
- The runner always advertises the MCP Apps UI extension capability so servers do not hide their MCP Apps surface when custom
clientCapabilitiesare supplied. - Deprecated
_meta["ui/resourceUri"]is accepted but surfaced as a warning. - Tool name SHOULD validations (length, character set, uniqueness) surface as warnings, not failures.
- HTML validation is intentionally lightweight. It verifies the expected MIME type and document-style HTML payload, not the full browser lifecycle.
- For a runnable project that writes JUnit XML from Vitest, see
examples/conformance/basic/.

