{
  "title": "MCP Apps UI Resource Metadata Matrix",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "MCP Apps 2026-01-26 / ext-apps SDK v1.7.5 / MCP core 2026-07-28",
  "sourcePackage": "research/9",
  "integrityNote": "The 93 ordinary archive entries verify. Two self-referential bookkeeping entries have disclosed stale final rows; public corrections do not modify the raw archive.",
  "count": 18,
  "records": [
    {
      "Field": "uri",
      "Location": "UI resource",
      "Stable": "Yes",
      "Meaning": "Unique UI resource identifier",
      "Requirement/notes": "Must use ui:// scheme.",
      "Sources": "S004",
      "id": "R9-META001",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Field": "mimeType",
      "Location": "UI resource contents",
      "Stable": "Yes",
      "Meaning": "MCP App HTML media type",
      "Requirement/notes": "Must be text/html;profile=mcp-app in stable MVP.",
      "Sources": "S004",
      "id": "R9-META002",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Field": "text or blob",
      "Location": "resources/read result",
      "Stable": "Yes",
      "Meaning": "HTML document bytes",
      "Requirement/notes": "Valid HTML5; full document is currently buffered.",
      "Sources": "S004 S077",
      "id": "R9-META003",
      "packageSourceIds": [
        "S004",
        "S077"
      ],
      "sourceIds": [
        "S390",
        "S453"
      ]
    },
    {
      "Field": "_meta.ui.resourceUri",
      "Location": "Tool definition",
      "Stable": "Yes",
      "Meaning": "Links a tool to its UI resource",
      "Requirement/notes": "Current recommended nested metadata form.",
      "Sources": "S004 S006",
      "id": "R9-META004",
      "packageSourceIds": [
        "S004",
        "S006"
      ],
      "sourceIds": [
        "S390",
        "S136"
      ]
    },
    {
      "Field": "_meta.ui.visibility",
      "Location": "Tool definition",
      "Stable": "Yes",
      "Meaning": "Controls model and/or app visibility",
      "Requirement/notes": "Defaults to model and app; app-only tools stay hidden from model.",
      "Sources": "S004",
      "id": "R9-META005",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Field": "_meta.ui.csp.connectDomains",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Origins for fetch/XHR/WebSocket",
      "Requirement/notes": "Maps to connect-src; omitted means no external connections by default.",
      "Sources": "S004 S010",
      "id": "R9-META006",
      "packageSourceIds": [
        "S004",
        "S010"
      ],
      "sourceIds": [
        "S390",
        "S395"
      ]
    },
    {
      "Field": "_meta.ui.csp.resourceDomains",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Origins for scripts, styles, fonts, images and media",
      "Requirement/notes": "Host may be stricter; declaration does not override CORS.",
      "Sources": "S004 S010",
      "id": "R9-META007",
      "packageSourceIds": [
        "S004",
        "S010"
      ],
      "sourceIds": [
        "S390",
        "S395"
      ]
    },
    {
      "Field": "_meta.ui.csp.frameDomains",
      "Location": "UI resource metadata",
      "Stable": "Yes in reviewed stable spec",
      "Meaning": "Origins for nested iframes",
      "Requirement/notes": "Host implementation compatibility has varied.",
      "Sources": "S004 S080",
      "id": "R9-META008",
      "packageSourceIds": [
        "S004",
        "S080"
      ],
      "sourceIds": [
        "S390",
        "S456"
      ]
    },
    {
      "Field": "_meta.ui.csp.baseUriDomains",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Allowed base URI origins",
      "Requirement/notes": "Restricts base-uri behavior.",
      "Sources": "S004",
      "id": "R9-META009",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Field": "_meta.ui.permissions.camera",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Request camera permission policy",
      "Requirement/notes": "Host may decline; app must feature-detect.",
      "Sources": "S004 S066",
      "id": "R9-META010",
      "packageSourceIds": [
        "S004",
        "S066"
      ],
      "sourceIds": [
        "S390",
        "S442"
      ]
    },
    {
      "Field": "_meta.ui.permissions.microphone",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Request microphone permission policy",
      "Requirement/notes": "Host/browser/user approval still applies.",
      "Sources": "S004 S066",
      "id": "R9-META011",
      "packageSourceIds": [
        "S004",
        "S066"
      ],
      "sourceIds": [
        "S390",
        "S442"
      ]
    },
    {
      "Field": "_meta.ui.permissions.geolocation",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Request geolocation permission policy",
      "Requirement/notes": "No permission is guaranteed.",
      "Sources": "S004 S066",
      "id": "R9-META012",
      "packageSourceIds": [
        "S004",
        "S066"
      ],
      "sourceIds": [
        "S390",
        "S442"
      ]
    },
    {
      "Field": "_meta.ui.permissions.clipboardWrite",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Request clipboard-write permission",
      "Requirement/notes": "Browser and host policy may deny.",
      "Sources": "S004 S066",
      "id": "R9-META013",
      "packageSourceIds": [
        "S004",
        "S066"
      ],
      "sourceIds": [
        "S390",
        "S442"
      ]
    },
    {
      "Field": "_meta.ui.domain",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Request a dedicated stable sandbox origin",
      "Requirement/notes": "Format and validation are host-specific; useful for CORS/OAuth allowlists.",
      "Sources": "S004 S010",
      "id": "R9-META014",
      "packageSourceIds": [
        "S004",
        "S010"
      ],
      "sourceIds": [
        "S390",
        "S395"
      ]
    },
    {
      "Field": "_meta.ui.prefersBorder",
      "Location": "UI resource metadata",
      "Stable": "Yes",
      "Meaning": "Visual boundary preference",
      "Requirement/notes": "Host may vary in defaults.",
      "Sources": "S004",
      "id": "R9-META015",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Field": "structuredContent",
      "Location": "Tool result",
      "Stable": "Stable core MCP",
      "Meaning": "Data optimized for UI rendering",
      "Requirement/notes": "Stable spec recommends keeping it out of model context.",
      "Sources": "S004 S027",
      "id": "R9-META016",
      "packageSourceIds": [
        "S004",
        "S027"
      ],
      "sourceIds": [
        "S390",
        "S123"
      ]
    },
    {
      "Field": "content",
      "Location": "Tool result",
      "Stable": "Stable core MCP",
      "Meaning": "Text/media fallback for model and non-App hosts",
      "Requirement/notes": "Should remain useful without UI.",
      "Sources": "S004 S027",
      "id": "R9-META017",
      "packageSourceIds": [
        "S004",
        "S027"
      ],
      "sourceIds": [
        "S390",
        "S123"
      ]
    },
    {
      "Field": "_meta",
      "Location": "Tool result",
      "Stable": "Stable core MCP",
      "Meaning": "Additional data not intended for model context",
      "Requirement/notes": "Avoid secrets unless the View is authorized to receive them.",
      "Sources": "S004",
      "id": "R9-META018",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    }
  ]
}