{
  "schema": "hm.mcp-2026.checklist.v1",
  "ruleset": "2026-07-21.1",
  "asOf": "2026-07-21",
  "transition": {
    "from": "2025-11-25",
    "to": "2026-07-28",
    "targetStatus": "locked-release-candidate",
    "lockedOn": "2026-05-21",
    "expectedFinalOn": "2026-07-28",
    "finalSpecificationVerified": false
  },
  "purpose": "Machine-readable catalog for declaration-based migration checks from MCP 2025-11-25 to the locked 2026-07-28 release candidate.",
  "sources": [
    "https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/",
    "https://modelcontextprotocol.io/specification/draft/changelog",
    "https://modelcontextprotocol.io/specification/draft",
    "https://modelcontextprotocol.io/specification/2025-11-25/basic"
  ],
  "privacy": {
    "sourceCodeRequested": false,
    "projectNameRequested": false,
    "repositoryRequested": false,
    "endpointRequested": false,
    "credentialRequested": false,
    "metricPayloadIncludesAnswers": false,
    "syntheticActivityPresentedAsReal": false
  },
  "limitations": {
    "declarationOnly": true,
    "sourceCodeInspected": false,
    "networkRequestsObserved": false,
    "runtimeConformanceTested": false,
    "officialConformanceSuiteRun": false,
    "finalSpecificationVerified": false,
    "releaseCandidateMayChange": true,
    "compatibilityCertified": false
  },
  "checks": [
    { "id": "initialize-handshake-removed", "group": "protocol", "severity": "critical", "expectedAnswer": "no", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: handshake removal" },
    { "id": "session-id-removed", "group": "transport", "severity": "critical", "expectedAnswer": "no", "appliesWhen": "transport is streamable-http", "source": "MCP 2026-07-28 RC: stateless transport" },
    { "id": "routing-headers-required", "group": "transport", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "transport is streamable-http", "source": "MCP 2026-07-28 RC: routable HTTP" },
    { "id": "per-request-client-context", "group": "protocol", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: request metadata" },
    { "id": "server-discover-supported", "group": "protocol", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: server discovery" },
    { "id": "unsupported-version-error", "group": "protocol", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: version negotiation" },
    { "id": "server-info-per-result", "group": "protocol", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: per-result server identity" },
    { "id": "server-callback-boundary", "group": "interaction", "severity": "high", "expectedAnswer": "no", "appliesWhen": "elicitation is yes or unknown", "source": "MCP 2026-07-28 RC: server-to-client request boundary" },
    { "id": "input-required-retry", "group": "interaction", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "elicitation is yes", "source": "MCP 2026-07-28 RC: multi round-trip requests" },
    { "id": "result-type-required", "group": "interaction", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: typed results" },
    { "id": "subscriptions-listen", "group": "interaction", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "subscriptions is yes", "source": "MCP 2026-07-28 RC: subscriptions/listen" },
    { "id": "legacy-subscription-paths", "group": "interaction", "severity": "high", "expectedAnswer": "no", "appliesWhen": "subscriptions is yes or unknown", "source": "MCP 2026-07-28 RC: subscription replacement" },
    { "id": "list-cache-contract", "group": "operations", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: cache metadata" },
    { "id": "sse-resumability-removed", "group": "transport", "severity": "medium", "expectedAnswer": "no", "appliesWhen": "transport is streamable-http", "source": "MCP 2026-07-28 RC: SSE resumability removal" },
    { "id": "legacy-sse-transport", "group": "transport", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "transport is sse", "source": "MCP 2026-07-28 RC: HTTP+SSE deprecation" },
    { "id": "removed-utility-methods", "group": "operations", "severity": "medium", "expectedAnswer": "no", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: removed utilities" },
    { "id": "tasks-extension-migration", "group": "extensions", "severity": "high", "expectedAnswer": "no", "appliesWhen": "tasks is yes or unknown", "source": "MCP 2026-07-28 RC: Tasks extension" },
    { "id": "extension-negotiation", "group": "extensions", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "extensions is yes", "source": "MCP 2026-07-28 RC: Extensions framework" },
    { "id": "deprecated-core-capabilities", "group": "lifecycle", "severity": "medium", "expectedAnswer": "no", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: feature lifecycle" },
    { "id": "json-schema-2020-12", "group": "schemas", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "tools is yes or unknown", "source": "MCP 2026-07-28 RC: full JSON Schema 2020-12" },
    { "id": "external-ref-boundary", "group": "schemas", "severity": "high", "expectedAnswer": "no", "appliesWhen": "tools is yes or unknown", "source": "MCP 2026-07-28 RC: external reference boundary" },
    { "id": "deterministic-tool-order", "group": "operations", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "tools is yes or unknown", "source": "MCP 2026-07-28 RC: deterministic tool lists" },
    { "id": "missing-resource-error-code", "group": "operations", "severity": "medium", "expectedAnswer": "no", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: error-code alignment" },
    { "id": "authorization-issuer-validation", "group": "authorization", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "access mode is protected", "source": "MCP 2026-07-28 RC: authorization hardening" },
    { "id": "oidc-application-type", "group": "authorization", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "access mode is protected and dynamic registration is yes", "source": "MCP 2026-07-28 RC: dynamic registration hardening" },
    { "id": "credentials-bound-to-issuer", "group": "authorization", "severity": "high", "expectedAnswer": "yes", "appliesWhen": "access mode is protected and dynamic registration is yes or unknown", "source": "MCP 2026-07-28 RC: credential binding" },
    { "id": "client-id-metadata-documents", "group": "authorization", "severity": "medium", "expectedAnswer": "yes", "appliesWhen": "access mode is protected", "source": "MCP 2026-07-28 RC: registration deprecation" },
    { "id": "trace-context-propagation", "group": "observability", "severity": "info", "expectedAnswer": "yes", "appliesWhen": "all implementations", "source": "MCP 2026-07-28 RC: trace context" }
  ]
}
