{
  "title": "MCP Protocol Breaking-Change Register",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "2026-07-28",
  "idNote": "IDs are globally namespaced while packageBreakingChangeId preserves the research/7 identifier.",
  "count": 30,
  "records": [
    {
      "id": "R7-BC001",
      "packageBreakingChangeId": "BC001",
      "revision": "2025-03-26",
      "area": "Remote transport",
      "change": "Streamable HTTP replaced HTTP+SSE as the preferred remote transport.",
      "compatibilityConsequence": "Clients/servers using only HTTP+SSE need compatibility support or migration.",
      "packageSourceIds": [
        "S034",
        "S036"
      ],
      "sourceIds": [
        "S036",
        "S038"
      ]
    },
    {
      "id": "R7-BC002",
      "packageBreakingChangeId": "BC002",
      "revision": "2025-03-26",
      "area": "Authorization",
      "change": "Core OAuth authorization framework entered MCP.",
      "compatibilityConsequence": "Remote implementations acquired new roles and conformance requirements.",
      "packageSourceIds": [
        "S034",
        "S037"
      ],
      "sourceIds": [
        "S036",
        "S037"
      ]
    },
    {
      "id": "R7-BC003",
      "packageBreakingChangeId": "BC003",
      "revision": "2025-03-26",
      "area": "JSON-RPC",
      "change": "Batching was added.",
      "compatibilityConsequence": "Implementations could send/accept arrays of messages in this revision.",
      "packageSourceIds": [
        "S034"
      ],
      "sourceIds": [
        "S036"
      ]
    },
    {
      "id": "R7-BC004",
      "packageBreakingChangeId": "BC004",
      "revision": "2025-03-26",
      "area": "Tools",
      "change": "Tool annotations were added.",
      "compatibilityConsequence": "Hosts gained hints, not guarantees, affecting UI/policy.",
      "packageSourceIds": [
        "S034"
      ],
      "sourceIds": [
        "S036"
      ]
    },
    {
      "id": "R7-BC005",
      "packageBreakingChangeId": "BC005",
      "revision": "2025-06-18",
      "area": "JSON-RPC",
      "change": "Batching was removed one revision after introduction.",
      "compatibilityConsequence": "March-only batching code must be disabled for June and later.",
      "packageSourceIds": [
        "S039"
      ],
      "sourceIds": [
        "S043"
      ]
    },
    {
      "id": "R7-BC006",
      "packageBreakingChangeId": "BC006",
      "revision": "2025-06-18",
      "area": "Tools",
      "change": "Structured tool output and outputSchema were added.",
      "compatibilityConsequence": "Clients may validate/render structuredContent; older clients ignore or lack it.",
      "packageSourceIds": [
        "S039"
      ],
      "sourceIds": [
        "S043"
      ]
    },
    {
      "id": "R7-BC007",
      "packageBreakingChangeId": "BC007",
      "revision": "2025-06-18",
      "area": "Client capabilities",
      "change": "Elicitation was added as a server-initiated request.",
      "compatibilityConsequence": "Clients without elicitation remain partially compatible.",
      "packageSourceIds": [
        "S039",
        "S043"
      ],
      "sourceIds": [
        "S043",
        "S046"
      ]
    },
    {
      "id": "R7-BC008",
      "packageBreakingChangeId": "BC008",
      "revision": "2025-06-18",
      "area": "Authorization",
      "change": "Servers formally treated as OAuth resource servers with protected-resource metadata and Resource Indicators.",
      "compatibilityConsequence": "OAuth implementations required audience/resource binding changes.",
      "packageSourceIds": [
        "S039",
        "S042"
      ],
      "sourceIds": [
        "S043",
        "S044"
      ]
    },
    {
      "id": "R7-BC009",
      "packageBreakingChangeId": "BC009",
      "revision": "2025-06-18",
      "area": "HTTP version declaration",
      "change": "MCP-Protocol-Version became material to HTTP requests.",
      "compatibilityConsequence": "Hand-written clients must supply version metadata correctly.",
      "packageSourceIds": [
        "S039",
        "S041"
      ],
      "sourceIds": [
        "S043",
        "S320"
      ]
    },
    {
      "id": "R7-BC010",
      "packageBreakingChangeId": "BC010",
      "revision": "2025-11-25",
      "area": "Authorization",
      "change": "OIDC discovery and Client ID Metadata Documents expanded discovery/registration.",
      "compatibilityConsequence": "Client identity and authorization-server binding changed.",
      "packageSourceIds": [
        "S045",
        "S048"
      ],
      "sourceIds": [
        "S049",
        "S187"
      ]
    },
    {
      "id": "R7-BC011",
      "packageBreakingChangeId": "BC011",
      "revision": "2025-11-25",
      "area": "Tasks",
      "change": "Experimental Tasks entered the core specification.",
      "compatibilityConsequence": "Implementations could opt into a provisional long-running operation model.",
      "packageSourceIds": [
        "S045",
        "S049"
      ],
      "sourceIds": [
        "S049",
        "S050"
      ]
    },
    {
      "id": "R7-BC012",
      "packageBreakingChangeId": "BC012",
      "revision": "2025-11-25",
      "area": "Schema/content",
      "change": "Icons and JSON Schema 2020-12 default were added or clarified.",
      "compatibilityConsequence": "Metadata and validation behavior changed.",
      "packageSourceIds": [
        "S045"
      ],
      "sourceIds": [
        "S049"
      ]
    },
    {
      "id": "R7-BC013",
      "packageBreakingChangeId": "BC013",
      "revision": "2026-07-28",
      "area": "Lifecycle",
      "change": "initialize was removed for the modern era.",
      "compatibilityConsequence": "Modern clients cannot depend on a startup negotiation request.",
      "packageSourceIds": [
        "S002",
        "S004"
      ],
      "sourceIds": [
        "S055",
        "S056"
      ]
    },
    {
      "id": "R7-BC014",
      "packageBreakingChangeId": "BC014",
      "revision": "2026-07-28",
      "area": "Lifecycle",
      "change": "notifications/initialized was removed.",
      "compatibilityConsequence": "No initialization-complete notification exists in modern flows.",
      "packageSourceIds": [
        "S002"
      ],
      "sourceIds": [
        "S055"
      ]
    },
    {
      "id": "R7-BC015",
      "packageBreakingChangeId": "BC015",
      "revision": "2026-07-28",
      "area": "Sessions",
      "change": "Protocol-level sessions and Mcp-Session-Id were removed.",
      "compatibilityConsequence": "Servers must not hide correctness-critical state in a protocol session.",
      "packageSourceIds": [
        "S002",
        "S021",
        "S022"
      ],
      "sourceIds": [
        "S055",
        "S061",
        "S316"
      ]
    },
    {
      "id": "R7-BC016",
      "packageBreakingChangeId": "BC016",
      "revision": "2026-07-28",
      "area": "Request envelope",
      "change": "Protocol version, client identity and capabilities became request-scoped metadata.",
      "compatibilityConsequence": "Each request must be independently interpretable.",
      "packageSourceIds": [
        "S002",
        "S004"
      ],
      "sourceIds": [
        "S055",
        "S056"
      ]
    },
    {
      "id": "R7-BC017",
      "packageBreakingChangeId": "BC017",
      "revision": "2026-07-28",
      "area": "Discovery",
      "change": "server/discover replaced initialize-based up-front server advertisement.",
      "compatibilityConsequence": "Clients need probing/pinning/fallback logic for cross-era operation.",
      "packageSourceIds": [
        "S002",
        "S005"
      ],
      "sourceIds": [
        "S055",
        "S127"
      ]
    },
    {
      "id": "R7-BC018",
      "packageBreakingChangeId": "BC018",
      "revision": "2026-07-28",
      "area": "Server-to-client interaction",
      "change": "Server-initiated requests were replaced by Multi Round-Trip Requests.",
      "compatibilityConsequence": "Sampling/elicitation-style workflows migrate to input_required and retry.",
      "packageSourceIds": [
        "S002",
        "S023"
      ],
      "sourceIds": [
        "S055",
        "S317"
      ]
    },
    {
      "id": "R7-BC019",
      "packageBreakingChangeId": "BC019",
      "revision": "2026-07-28",
      "area": "Result envelope",
      "change": "Result types distinguish complete from input_required.",
      "compatibilityConsequence": "Old result parsers may fail or treat new fields incorrectly.",
      "packageSourceIds": [
        "S002",
        "S006"
      ],
      "sourceIds": [
        "S055",
        "S130"
      ]
    },
    {
      "id": "R7-BC020",
      "packageBreakingChangeId": "BC020",
      "revision": "2026-07-28",
      "area": "Subscriptions",
      "change": "resources/subscribe and unsolicited change notifications were replaced by subscriptions/listen streams.",
      "compatibilityConsequence": "Clients must explicitly request relevant event streams.",
      "packageSourceIds": [
        "S002",
        "S012",
        "S054",
        "S057"
      ],
      "sourceIds": [
        "S055",
        "S124",
        "S168",
        "S323"
      ]
    },
    {
      "id": "R7-BC021",
      "packageBreakingChangeId": "BC021",
      "revision": "2026-07-28",
      "area": "HTTP streams",
      "change": "The standalone GET event stream and earlier resumability/redelivery model were removed.",
      "compatibilityConsequence": "Legacy SSE stream assumptions no longer apply.",
      "packageSourceIds": [
        "S002",
        "S009",
        "S054"
      ],
      "sourceIds": [
        "S055",
        "S131",
        "S168"
      ]
    },
    {
      "id": "R7-BC022",
      "packageBreakingChangeId": "BC022",
      "revision": "2026-07-28",
      "area": "Cancellation",
      "change": "Closing the request SSE stream became the HTTP cancellation signal.",
      "compatibilityConsequence": "Modern HTTP clients should not assume POST notifications/cancelled.",
      "packageSourceIds": [
        "S009",
        "S054"
      ],
      "sourceIds": [
        "S131",
        "S168"
      ]
    },
    {
      "id": "R7-BC023",
      "packageBreakingChangeId": "BC023",
      "revision": "2026-07-28",
      "area": "Routing",
      "change": "Mcp-Method, Mcp-Name and selected mirrored parameter headers were added.",
      "compatibilityConsequence": "Gateways can route/policy on headers; clients and servers must validate consistency.",
      "packageSourceIds": [
        "S002",
        "S009",
        "S054"
      ],
      "sourceIds": [
        "S055",
        "S131",
        "S168"
      ]
    },
    {
      "id": "R7-BC024",
      "packageBreakingChangeId": "BC024",
      "revision": "2026-07-28",
      "area": "Caching",
      "change": "Cacheable list/read results require ttlMs and cacheScope.",
      "compatibilityConsequence": "Clients need cache keys scoped by authorization context.",
      "packageSourceIds": [
        "S002",
        "S011",
        "S012",
        "S054"
      ],
      "sourceIds": [
        "S055",
        "S123",
        "S124",
        "S168"
      ]
    },
    {
      "id": "R7-BC025",
      "packageBreakingChangeId": "BC025",
      "revision": "2026-07-28",
      "area": "Tasks",
      "change": "Experimental core Tasks moved to an official extension.",
      "compatibilityConsequence": "2025 task wire types become legacy/deprecated vocabulary.",
      "packageSourceIds": [
        "S002",
        "S024",
        "S054"
      ],
      "sourceIds": [
        "S055",
        "S137",
        "S168"
      ]
    },
    {
      "id": "R7-BC026",
      "packageBreakingChangeId": "BC026",
      "revision": "2026-07-28",
      "area": "Deprecation",
      "change": "Roots, Sampling and Logging were deprecated.",
      "compatibilityConsequence": "They remain usable during the policy window but new designs should migrate.",
      "packageSourceIds": [
        "S002",
        "S019",
        "S059"
      ],
      "sourceIds": [
        "S055",
        "S315",
        "S325"
      ]
    },
    {
      "id": "R7-BC027",
      "packageBreakingChangeId": "BC027",
      "revision": "2026-07-28",
      "area": "Transport",
      "change": "HTTP+SSE was formally deprecated.",
      "compatibilityConsequence": "Legacy servers/clients need a migration path to Streamable HTTP.",
      "packageSourceIds": [
        "S002",
        "S019"
      ],
      "sourceIds": [
        "S055",
        "S315"
      ]
    },
    {
      "id": "R7-BC028",
      "packageBreakingChangeId": "BC028",
      "revision": "2026-07-28",
      "area": "Authorization",
      "change": "Dynamic Client Registration was deprecated in favor of CIMD-oriented identification.",
      "compatibilityConsequence": "Clients/servers must plan registration migration.",
      "packageSourceIds": [
        "S002",
        "S010"
      ],
      "sourceIds": [
        "S055",
        "S133"
      ]
    },
    {
      "id": "R7-BC029",
      "packageBreakingChangeId": "BC029",
      "revision": "2026-07-28",
      "area": "State",
      "change": "Explicit application handles replaced implicit session state for multi-call workflows.",
      "compatibilityConsequence": "IDs must be authorized, unguessable where appropriate and passed in arguments.",
      "packageSourceIds": [
        "S011",
        "S021",
        "S022"
      ],
      "sourceIds": [
        "S123",
        "S061",
        "S316"
      ]
    },
    {
      "id": "R7-BC030",
      "packageBreakingChangeId": "BC030",
      "revision": "2026-07-28",
      "area": "Liveness/utilities",
      "change": "Legacy ping and several session-scoped utility patterns are not part of the modern core.",
      "compatibilityConsequence": "SDKs may reject methods not valid for the negotiated era.",
      "packageSourceIds": [
        "S053",
        "S054",
        "S059"
      ],
      "sourceIds": [
        "S253",
        "S168",
        "S325"
      ]
    }
  ]
}