{
  "title": "MCP Apps Responsibility 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": 14,
  "records": [
    {
      "Responsibility": "Publish tool and UI linkage",
      "Server": "Primary",
      "Host": "Consumes and validates",
      "View": "No",
      "User": "No",
      "Sources": "S004",
      "id": "R9-RESP001",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Responsibility": "Provide HTML resource",
      "Server": "Primary",
      "Host": "Fetches and isolates",
      "View": "Executes",
      "User": "No",
      "Sources": "S004",
      "id": "R9-RESP002",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Responsibility": "Create iframe sandbox",
      "Server": "Declares needs",
      "Host": "Primary",
      "View": "Must operate within it",
      "User": "No",
      "Sources": "S004 S014 S060",
      "id": "R9-RESP003",
      "packageSourceIds": [
        "S004",
        "S014",
        "S060"
      ],
      "sourceIds": [
        "S390",
        "S399",
        "S436"
      ]
    },
    {
      "Responsibility": "Construct/enforce CSP",
      "Server": "Declares domains",
      "Host": "Primary enforcement",
      "View": "Must comply",
      "User": "No",
      "Sources": "S004 S010 S062",
      "id": "R9-RESP004",
      "packageSourceIds": [
        "S004",
        "S010",
        "S062"
      ],
      "sourceIds": [
        "S390",
        "S395",
        "S438"
      ]
    },
    {
      "Responsibility": "CORS configuration",
      "Server": "API operator controls response",
      "Host": "Cannot override",
      "View": "Uses permitted requests",
      "User": "No",
      "Sources": "S010 S063",
      "id": "R9-RESP005",
      "packageSourceIds": [
        "S010",
        "S063"
      ],
      "sourceIds": [
        "S395",
        "S439"
      ]
    },
    {
      "Responsibility": "Approve sensitive tool call",
      "Server": "Still authorizes operation",
      "Host": "Primary user-intent gate",
      "View": "Requests only",
      "User": "Provides consent where required",
      "Sources": "S004 S030",
      "id": "R9-RESP006",
      "packageSourceIds": [
        "S004",
        "S030"
      ],
      "sourceIds": [
        "S390",
        "S410"
      ]
    },
    {
      "Responsibility": "Validate tool arguments",
      "Server": "Primary semantic validation",
      "Host": "May prevalidate schema/policy",
      "View": "Treat inputs as untrusted",
      "User": "May review",
      "Sources": "S004 S027",
      "id": "R9-RESP007",
      "packageSourceIds": [
        "S004",
        "S027"
      ],
      "sourceIds": [
        "S390",
        "S123"
      ]
    },
    {
      "Responsibility": "Choose display mode",
      "Server": "May express preference through app",
      "Host": "Final authority",
      "View": "May request",
      "User": "May trigger",
      "Sources": "S004 S021",
      "id": "R9-RESP008",
      "packageSourceIds": [
        "S004",
        "S021"
      ],
      "sourceIds": [
        "S390",
        "S406"
      ]
    },
    {
      "Responsibility": "External link handling",
      "Server": "May provide destination",
      "Host": "Validates and opens",
      "View": "Requests",
      "User": "May confirm",
      "Sources": "S004",
      "id": "R9-RESP009",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    },
    {
      "Responsibility": "Model-context update",
      "Server": "Supplies data indirectly",
      "Host": "Decides acceptance and scoping",
      "View": "Requests update",
      "User": "Should see provenance in material cases",
      "Sources": "S004 S076",
      "id": "R9-RESP010",
      "packageSourceIds": [
        "S004",
        "S076"
      ],
      "sourceIds": [
        "S390",
        "S452"
      ]
    },
    {
      "Responsibility": "Accessibility of controls",
      "Server": "App developer owns internal accessibility",
      "Host": "Container/focus responsibility",
      "View": "Implements semantics",
      "User": "Provides feedback",
      "Sources": "S057 S058 S068",
      "id": "R9-RESP011",
      "packageSourceIds": [
        "S057",
        "S058",
        "S068"
      ],
      "sourceIds": [
        "S433",
        "S434",
        "S444"
      ]
    },
    {
      "Responsibility": "Logging and audit",
      "Server": "Operation audit",
      "Host": "Bridge and consent audit",
      "View": "Avoid sensitive logs",
      "User": "No",
      "Sources": "S004 S030",
      "id": "R9-RESP012",
      "packageSourceIds": [
        "S004",
        "S030"
      ],
      "sourceIds": [
        "S390",
        "S410"
      ]
    },
    {
      "Responsibility": "Business authorization",
      "Server": "Server/upstream primary",
      "Host": "Cannot substitute for it",
      "View": "No independent authority",
      "User": "Identity/rights source",
      "Sources": "S030",
      "id": "R9-RESP013",
      "packageSourceIds": [
        "S030"
      ],
      "sourceIds": [
        "S410"
      ]
    },
    {
      "Responsibility": "Lifecycle teardown",
      "Server": "Releases operation resources",
      "Host": "Initiates and destroys View",
      "View": "Cleans timers/streams/state",
      "User": "May close",
      "Sources": "S004",
      "id": "R9-RESP014",
      "packageSourceIds": [
        "S004"
      ],
      "sourceIds": [
        "S390"
      ]
    }
  ]
}