{
  "title": "MCP Apps Accessibility Checklist",
  "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": 14,
  "records": [
    {
      "Check": "Provide an accessible iframe/title name",
      "Owner": "Host and app",
      "Why": "Screen-reader users need to identify the embedded View",
      "Standard/evidence": "WCAG name/role/value and iframe context",
      "Sources": "S057 S068",
      "id": "R9-A11Y001",
      "packageSourceIds": [
        "S057",
        "S068"
      ],
      "sourceIds": [
        "S433",
        "S444"
      ]
    },
    {
      "Check": "Full keyboard operation",
      "Owner": "App",
      "Why": "Every control must work without pointer input",
      "Standard/evidence": "WCAG 2.1.1 and APG patterns",
      "Sources": "S057 S058",
      "id": "R9-A11Y002",
      "packageSourceIds": [
        "S057",
        "S058"
      ],
      "sourceIds": [
        "S433",
        "S434"
      ]
    },
    {
      "Check": "Visible focus and focus not obscured",
      "Owner": "Host and app",
      "Why": "Embedded/fullscreen chrome can hide focus",
      "Standard/evidence": "WCAG 2.4.7, 2.4.11",
      "Sources": "S057",
      "id": "R9-A11Y003",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Logical initial focus in fullscreen/modal modes",
      "Owner": "Host and app",
      "Why": "User must know that mode changed",
      "Standard/evidence": "APG dialog guidance",
      "Sources": "S058",
      "id": "R9-A11Y004",
      "packageSourceIds": [
        "S058"
      ],
      "sourceIds": [
        "S434"
      ]
    },
    {
      "Check": "Return focus on close",
      "Owner": "Host",
      "Why": "Preserves workflow continuity",
      "Standard/evidence": "APG dialog guidance",
      "Sources": "S058",
      "id": "R9-A11Y005",
      "packageSourceIds": [
        "S058"
      ],
      "sourceIds": [
        "S434"
      ]
    },
    {
      "Check": "Escape or equivalent exit",
      "Owner": "Host and app",
      "Why": "Users need a reliable way to leave modal/fullscreen UI",
      "Standard/evidence": "APG dialog guidance",
      "Sources": "S058",
      "id": "R9-A11Y006",
      "packageSourceIds": [
        "S058"
      ],
      "sourceIds": [
        "S434"
      ]
    },
    {
      "Check": "Avoid drag-only interactions",
      "Owner": "App",
      "Why": "WCAG 2.5.7 requires a single-pointer alternative",
      "Standard/evidence": "WCAG 2.2",
      "Sources": "S057",
      "id": "R9-A11Y007",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Adequate target size",
      "Owner": "App",
      "Why": "Small embedded controls are difficult on touch and low dexterity",
      "Standard/evidence": "WCAG 2.5.8",
      "Sources": "S057",
      "id": "R9-A11Y008",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Semantic tables/charts and text alternatives",
      "Owner": "App",
      "Why": "Visual data needs nonvisual access",
      "Standard/evidence": "WCAG perceivable requirements",
      "Sources": "S057",
      "id": "R9-A11Y009",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Announce loading, success, errors and cancellation",
      "Owner": "App",
      "Why": "Dynamic updates otherwise remain invisible to assistive technology",
      "Standard/evidence": "ARIA alert/status patterns",
      "Sources": "S059",
      "id": "R9-A11Y010",
      "packageSourceIds": [
        "S059"
      ],
      "sourceIds": [
        "S435"
      ]
    },
    {
      "Check": "Respect zoom and magnification",
      "Owner": "Host and app",
      "Why": "Iframe sizing must not clip content",
      "Standard/evidence": "WCAG reflow and zoom",
      "Sources": "S057 S068",
      "id": "R9-A11Y011",
      "packageSourceIds": [
        "S057",
        "S068"
      ],
      "sourceIds": [
        "S433",
        "S444"
      ]
    },
    {
      "Check": "Honor reduced motion",
      "Owner": "App",
      "Why": "Animation can trigger vestibular issues",
      "Standard/evidence": "WCAG animation guidance",
      "Sources": "S057",
      "id": "R9-A11Y012",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Color contrast and non-color cues",
      "Owner": "App",
      "Why": "Host theming does not guarantee readable app content",
      "Standard/evidence": "WCAG contrast and use-of-color criteria",
      "Sources": "S057",
      "id": "R9-A11Y013",
      "packageSourceIds": [
        "S057"
      ],
      "sourceIds": [
        "S433"
      ]
    },
    {
      "Check": "Test with screen readers and real hosts",
      "Owner": "Both",
      "Why": "Spec conformance alone cannot prove assistive technology compatibility",
      "Standard/evidence": "Open accessibility issue and W3C testing guidance",
      "Sources": "S068 S057",
      "id": "R9-A11Y014",
      "packageSourceIds": [
        "S068",
        "S057"
      ],
      "sourceIds": [
        "S444",
        "S433"
      ]
    }
  ]
}