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:
idcategorytitledescriptionstatus—"passed","failed", or"skipped"skipReason— set wheneverstatusis"skipped":"not-applicable"(no MCP Apps tools or UI resources to check) or"could-not-run"(tools/list did not complete, connection failed)durationMs- optional
details - optional
warnings - optional
error
MCPAppsConformanceSuite.run() returns an MCPAppsConformanceSuiteResult:
Outcomes: passed, failed, incomplete
A run reports one of three outcomes, andpassed is true only for the first:
An incomplete run carries a root
incompleteReason naming the checks that did not run and what to change; non-quiet CLI runs also print it to stderr. For a suite, the exit code is the worst of all runs (failure outranks incomplete).
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 conventions (length, character set, uniqueness) are core MCP rules, so this suite does not check them. The protocol suite reports them on every tool as the advice item
readiness-tool-name-conventions, on protocol 2025-11-25 and later. - 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/.

