{
  "schema": "hm.mcp-delta-ledger.v1",
  "ruleset": "2026-07-21.1",
  "verifiedOn": "2026-07-21",
  "target": {
    "from": "2025-11-25",
    "to": "2026-07-28",
    "targetStatus": "locked-release-candidate",
    "lockedOn": "2026-05-21",
    "expectedFinalOn": "2026-07-28",
    "verifiedOn": "2026-07-21",
    "finalSpecificationVerified": false
  },
  "summary": {
    "total": 28,
    "categories": {
      "major": 9,
      "minor": 12,
      "deprecated": 4,
      "schema": 1,
      "governance": 1,
      "process": 1
    },
    "impacts": {
      "critical": 5,
      "high": 14,
      "medium": 7,
      "info": 2
    },
    "actions": {
      "required": 19,
      "review": 7,
      "observe": 2
    }
  },
  "changes": [
    {
      "id": "sessionless-core",
      "sequence": 1,
      "category": "major",
      "domain": "transport",
      "impact": "critical",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2567,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2567",
      "copy": {
        "en": [
          "Protocol sessions are removed",
          "Streamable HTTP could bind later calls with Mcp-Session-Id.",
          "The protocol session and Mcp-Session-Id header are removed; list results cannot depend on prior connection state.",
          "Move cross-call state into explicit server-minted handles passed as ordinary arguments."
        ],
        "es": [
          "Se eliminan las sesiones del protocolo",
          "Streamable HTTP podia vincular llamadas posteriores con Mcp-Session-Id.",
          "La sesion de protocolo y Mcp-Session-Id desaparecen; las listas no pueden depender del estado previo de conexion.",
          "Mueve el estado entre llamadas a identificadores explicitos emitidos por el servidor."
        ],
        "zh": [
          "协议会话被移除",
          "Streamable HTTP 可以通过 Mcp-Session-Id 绑定后续调用。",
          "协议会话和 Mcp-Session-Id 请求头被移除，列表结果不能依赖此前的连接状态。",
          "把跨调用状态改为服务器签发、通过普通参数传递的显式句柄。"
        ]
      }
    },
    {
      "id": "stateless-request-context",
      "sequence": 2,
      "category": "major",
      "domain": "protocol",
      "impact": "critical",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2575,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575",
      "copy": {
        "en": [
          "Every request carries its own context",
          "initialize and notifications/initialized established protocol version, capabilities and identity once.",
          "The handshake is removed; protocol version and capabilities travel in _meta on every request.",
          "Remove handshake state and validate the standardized per-request metadata."
        ],
        "es": [
          "Cada solicitud lleva su propio contexto",
          "initialize y notifications/initialized fijaban una vez la version, capacidades e identidad.",
          "El saludo desaparece; la version y las capacidades viajan en _meta en cada solicitud.",
          "Elimina el estado del saludo y valida los metadatos estandarizados en cada solicitud."
        ],
        "zh": [
          "每个请求都携带完整上下文",
          "initialize 与 notifications/initialized 曾一次性建立版本、能力和身份。",
          "握手被移除，协议版本与能力改为随每个请求的 _meta 传递。",
          "移除握手状态并校验标准化的逐请求元数据。"
        ]
      }
    },
    {
      "id": "server-discover",
      "sequence": 3,
      "category": "major",
      "domain": "discovery",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2575,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575",
      "copy": {
        "en": [
          "server/discover becomes the capability probe",
          "Clients learned server capabilities during initialize.",
          "Servers must expose server/discover for versions, capabilities and identity.",
          "Implement the method and use it as the preflight and backward-compatibility probe."
        ],
        "es": [
          "server/discover pasa a ser la consulta de capacidades",
          "Los clientes conocian las capacidades durante initialize.",
          "Los servidores deben exponer server/discover con versiones, capacidades e identidad.",
          "Implementa el metodo y usalo como preflight y prueba de compatibilidad."
        ],
        "zh": [
          "server/discover 成为能力探针",
          "客户端过去在 initialize 阶段获知服务器能力。",
          "服务器必须通过 server/discover 公布版本、能力和身份。",
          "实现该方法，并把它用于预检和向后兼容探测。"
        ]
      }
    },
    {
      "id": "subscriptions-listen",
      "sequence": 4,
      "category": "major",
      "domain": "interaction",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2575,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575",
      "copy": {
        "en": [
          "Subscriptions move to one opted-in stream",
          "HTTP GET and resources/subscribe or resources/unsubscribe carried long-lived changes.",
          "subscriptions/listen replaces those paths with one long-lived POST response stream.",
          "Separate request-scoped notifications and migrate change subscriptions to subscriptions/listen."
        ],
        "es": [
          "Las suscripciones pasan a un flujo opt-in",
          "HTTP GET y resources/subscribe o resources/unsubscribe transportaban cambios persistentes.",
          "subscriptions/listen reemplaza esas rutas con un unico flujo de respuesta POST.",
          "Separa notificaciones por solicitud y migra los cambios a subscriptions/listen."
        ],
        "zh": [
          "订阅迁移到单一主动开启的流",
          "HTTP GET 与 resources/subscribe、resources/unsubscribe 曾承载长期变化。",
          "subscriptions/listen 用一个长期 POST 响应流替代这些路径。",
          "区分请求内通知，并把变化订阅迁移到 subscriptions/listen。"
        ]
      }
    },
    {
      "id": "removed-utility-methods",
      "sequence": 5,
      "category": "major",
      "domain": "operations",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "observability"
      ],
      "sep": 2575,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575",
      "copy": {
        "en": [
          "Three utility paths disappear",
          "ping, logging/setLevel and notifications/roots/list_changed were protocol methods.",
          "Those methods are removed; log level becomes per-request metadata.",
          "Remove literal calls and route logs to request metadata, stderr or OpenTelemetry."
        ],
        "es": [
          "Desaparecen tres rutas utilitarias",
          "ping, logging/setLevel y notifications/roots/list_changed eran metodos del protocolo.",
          "Esos metodos se eliminan; el nivel de log pasa a metadatos por solicitud.",
          "Elimina las llamadas y dirige logs a metadatos, stderr u OpenTelemetry."
        ],
        "zh": [
          "三条工具方法被移除",
          "ping、logging/setLevel 与 notifications/roots/list_changed 曾是协议方法。",
          "这些方法被移除，日志级别改为逐请求元数据。",
          "删除对应调用，并将日志迁移到请求元数据、stderr 或 OpenTelemetry。"
        ]
      }
    },
    {
      "id": "tasks-extension",
      "sequence": 6,
      "category": "major",
      "domain": "extensions",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2663,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2663",
      "copy": {
        "en": [
          "Tasks leaves the core protocol",
          "Experimental Tasks lived in the 2025-11-25 core and included tasks/result and tasks/list.",
          "Tasks becomes io.modelcontextprotocol/tasks with tasks/get, tasks/update and tasks/cancel; tasks/list is removed.",
          "Negotiate the extension and rebuild the lifecycle around server-issued task handles."
        ],
        "es": [
          "Tasks sale del protocolo central",
          "Tasks experimental vivia en el nucleo 2025-11-25 con tasks/result y tasks/list.",
          "Tasks pasa a io.modelcontextprotocol/tasks con tasks/get, tasks/update y tasks/cancel; tasks/list desaparece.",
          "Negocia la extension y reconstruye el ciclo sobre identificadores emitidos por el servidor."
        ],
        "zh": [
          "Tasks 移出核心协议",
          "实验版 Tasks 位于 2025-11-25 核心中，并包含 tasks/result 与 tasks/list。",
          "Tasks 成为 io.modelcontextprotocol/tasks 扩展，改用 tasks/get、tasks/update、tasks/cancel，并移除 tasks/list。",
          "协商该扩展，并围绕服务器返回的任务句柄重建生命周期。"
        ]
      }
    },
    {
      "id": "multi-round-trip",
      "sequence": 7,
      "category": "major",
      "domain": "interaction",
      "impact": "critical",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2322,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2322",
      "copy": {
        "en": [
          "Server requests become retryable results",
          "Servers could issue roots, sampling or elicitation requests back to the client.",
          "InputRequiredResult returns inputRequests and requestState; the client retries with inputResponses.",
          "Model every interruption as a resumable retry and protect requestState from tampering."
        ],
        "es": [
          "Las solicitudes del servidor pasan a resultados reintentables",
          "El servidor podia enviar roots, sampling o elicitation al cliente.",
          "InputRequiredResult devuelve inputRequests y requestState; el cliente reintenta con inputResponses.",
          "Modela cada interrupcion como reintento reanudable y protege requestState."
        ],
        "zh": [
          "服务器请求改为可重试结果",
          "服务器过去可以向客户端发出 roots、sampling 或 elicitation 请求。",
          "InputRequiredResult 返回 inputRequests 与 requestState，客户端携带 inputResponses 重试。",
          "把每次中断建模为可恢复重试，并保护 requestState 不被篡改。"
        ]
      }
    },
    {
      "id": "required-result-type",
      "sequence": 8,
      "category": "major",
      "domain": "protocol",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2322,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2322",
      "copy": {
        "en": [
          "Every result declares its state",
          "Ordinary results had no universal lifecycle discriminator.",
          "All results require resultType: complete or input_required; older omissions are read as complete.",
          "Emit the discriminator and keep the legacy fallback only on the client boundary."
        ],
        "es": [
          "Cada resultado declara su estado",
          "Los resultados normales no tenian un discriminador universal de ciclo.",
          "Todos requieren resultType: complete o input_required; una omision antigua se interpreta como complete.",
          "Emite el discriminador y conserva el fallback antiguo solo en el limite del cliente."
        ],
        "zh": [
          "每个结果都声明状态",
          "普通结果过去没有统一的生命周期判别字段。",
          "所有结果必须包含 resultType: complete 或 input_required；旧版本缺失时按 complete 处理。",
          "服务器输出判别字段，旧版回退只保留在客户端边界。"
        ]
      }
    },
    {
      "id": "sse-resume-removed",
      "sequence": 9,
      "category": "major",
      "domain": "transport",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2575,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#major-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2575",
      "copy": {
        "en": [
          "SSE request replay is removed",
          "Last-Event-ID and SSE event IDs could resume an interrupted response.",
          "A broken response loses the in-flight request; clients reissue it with a new request ID.",
          "Remove redelivery state and make retries idempotent at the application boundary."
        ],
        "es": [
          "Se elimina la reanudacion de solicitudes SSE",
          "Last-Event-ID y los IDs SSE podian reanudar una respuesta interrumpida.",
          "Una respuesta rota pierde la solicitud; el cliente la repite con un ID nuevo.",
          "Elimina el estado de redelivery y garantiza idempotencia en la aplicacion."
        ],
        "zh": [
          "SSE 请求续传被移除",
          "Last-Event-ID 与 SSE 事件 ID 曾可恢复中断的响应。",
          "响应断开即丢失在途请求，客户端必须使用新请求 ID 重新发起。",
          "移除重投递状态，并在应用边界保证重试幂等。"
        ]
      }
    },
    {
      "id": "extension-negotiation",
      "sequence": 10,
      "category": "minor",
      "domain": "extensions",
      "impact": "medium",
      "actionClass": "review",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2133,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133",
      "copy": {
        "en": [
          "Extensions become a negotiated contract",
          "Optional features had no common independent negotiation framework.",
          "ClientCapabilities and ServerCapabilities gain an extensions map keyed by reverse-DNS IDs.",
          "Declare versions and behavior in the extension map instead of inferring support."
        ],
        "es": [
          "Las extensiones pasan a un contrato negociado",
          "Las funciones opcionales no tenian un marco comun de negociacion independiente.",
          "ClientCapabilities y ServerCapabilities agregan un mapa extensions con IDs reverse-DNS.",
          "Declara version y comportamiento en el mapa, sin inferir soporte."
        ],
        "zh": [
          "扩展成为可协商合同",
          "可选功能过去没有统一且独立的协商框架。",
          "ClientCapabilities 与 ServerCapabilities 新增以反向域名 ID 为键的 extensions 映射。",
          "在扩展映射中声明版本和行为，不要推断支持情况。"
        ]
      }
    },
    {
      "id": "trace-context",
      "sequence": 11,
      "category": "minor",
      "domain": "observability",
      "impact": "medium",
      "actionClass": "review",
      "roles": [
        "server",
        "client",
        "observability"
      ],
      "sep": 414,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/414",
      "copy": {
        "en": [
          "Trace propagation gets fixed key names",
          "SDKs used inconsistent metadata conventions for distributed traces.",
          "traceparent, tracestate and baggage are documented in _meta.",
          "Propagate only validated W3C Trace Context and bound baggage size."
        ],
        "es": [
          "La trazabilidad recibe claves fijas",
          "Los SDK usaban convenciones distintas para trazas distribuidas.",
          "traceparent, tracestate y baggage quedan documentados en _meta.",
          "Propaga solo W3C Trace Context validado y limita el tamano de baggage."
        ],
        "zh": [
          "追踪传播采用固定键名",
          "不同 SDK 过去使用不一致的分布式追踪元数据约定。",
          "_meta 中正式约定 traceparent、tracestate 与 baggage。",
          "只传播经过校验的 W3C Trace Context，并限制 baggage 大小。"
        ]
      }
    },
    {
      "id": "deterministic-tool-order",
      "sequence": 12,
      "category": "minor",
      "domain": "operations",
      "impact": "medium",
      "actionClass": "review",
      "roles": [
        "server",
        "sdk"
      ],
      "sep": null,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "",
      "copy": {
        "en": [
          "Tool lists should be deterministic",
          "tools/list order could change without semantic changes.",
          "Servers should return tools in a stable order for caching and prompt-cache reuse.",
          "Choose and test a stable ordering key across replicas and deployments."
        ],
        "es": [
          "La lista de herramientas debe ser determinista",
          "El orden de tools/list podia cambiar sin cambios semanticos.",
          "El servidor debe devolver un orden estable para cache y prompt cache.",
          "Define y prueba una clave estable entre replicas y despliegues."
        ],
        "zh": [
          "工具列表应保持确定顺序",
          "tools/list 的顺序过去可能在语义未变化时改变。",
          "服务器应返回稳定顺序，以支持缓存和提示词缓存复用。",
          "在副本和部署之间定义并测试稳定排序键。"
        ]
      }
    },
    {
      "id": "http-routing-headers",
      "sequence": 13,
      "category": "minor",
      "domain": "transport",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2243,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2243",
      "copy": {
        "en": [
          "HTTP operations become visible to infrastructure",
          "Gateways often inspected JSON-RPC bodies to identify an operation.",
          "Streamable HTTP POST requires Mcp-Method and Mcp-Name, with body/header agreement.",
          "Emit and validate both headers before routing or rate limiting."
        ],
        "es": [
          "Las operaciones HTTP se vuelven visibles a la infraestructura",
          "Los gateways solian inspeccionar el cuerpo JSON-RPC para identificar la operacion.",
          "POST Streamable HTTP exige Mcp-Method y Mcp-Name coherentes con el cuerpo.",
          "Emite y valida ambos headers antes de enrutar o limitar."
        ],
        "zh": [
          "基础设施可直接识别 HTTP 操作",
          "网关过去常需检查 JSON-RPC 请求体才能识别操作。",
          "Streamable HTTP POST 必须携带 Mcp-Method 与 Mcp-Name，且与请求体一致。",
          "在路由或限流前发送并校验两个请求头。"
        ]
      }
    },
    {
      "id": "cache-contract",
      "sequence": 14,
      "category": "minor",
      "domain": "caching",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2549,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2549",
      "copy": {
        "en": [
          "List and read results declare cache boundaries",
          "Clients guessed freshness and whether a result could be shared.",
          "Cacheable results require ttlMs and cacheScope: public or private.",
          "Set user-safe scopes, honor freshness and prevent private responses entering shared caches."
        ],
        "es": [
          "Listas y lecturas declaran limites de cache",
          "Los clientes adivinaban frescura y si un resultado podia compartirse.",
          "Los resultados cacheables exigen ttlMs y cacheScope: public o private.",
          "Define scopes seguros y evita que respuestas private entren en caches compartidos."
        ],
        "zh": [
          "列表与读取结果声明缓存边界",
          "客户端过去只能猜测新鲜度以及结果能否共享。",
          "可缓存结果必须包含 ttlMs 与 cacheScope: public 或 private。",
          "设置用户安全的作用域、遵守新鲜度，并阻止私有响应进入共享缓存。"
        ]
      }
    },
    {
      "id": "resource-error-code",
      "sequence": 15,
      "category": "minor",
      "domain": "errors",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2164,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2164",
      "copy": {
        "en": [
          "Missing resources use standard Invalid Params",
          "Resource not found used MCP-specific error -32002.",
          "The code changes to JSON-RPC -32602.",
          "Update emitters, literal matchers, retries and telemetry dimensions."
        ],
        "es": [
          "Recursos ausentes usan Invalid Params estandar",
          "Resource not found usaba el error MCP -32002.",
          "El codigo cambia a JSON-RPC -32602.",
          "Actualiza emisores, comparaciones literales, reintentos y telemetria."
        ],
        "zh": [
          "资源不存在改用标准 Invalid Params",
          "资源不存在过去使用 MCP 自定义错误码 -32002。",
          "错误码改为 JSON-RPC -32602。",
          "更新发送端、字面匹配、重试逻辑和遥测维度。"
        ]
      }
    },
    {
      "id": "authorization-issuer",
      "sequence": 16,
      "category": "minor",
      "domain": "authorization",
      "impact": "critical",
      "actionClass": "required",
      "roles": [
        "client",
        "auth",
        "sdk"
      ],
      "sep": 2468,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2468",
      "copy": {
        "en": [
          "Authorization responses bind to an issuer",
          "Clients could redeem a code without validating a returned iss value.",
          "Authorization servers should send iss; clients must validate it when present.",
          "Record the expected issuer before redirect and reject any mismatch before token exchange."
        ],
        "es": [
          "La respuesta de autorizacion se vincula a un issuer",
          "El cliente podia canjear un codigo sin validar el valor iss devuelto.",
          "El servidor deberia enviar iss y el cliente debe validarlo si aparece.",
          "Registra el issuer esperado antes del redirect y rechaza diferencias antes del token."
        ],
        "zh": [
          "授权响应绑定签发者",
          "客户端过去可能在未校验返回 iss 的情况下兑换授权码。",
          "授权服务器应返回 iss；客户端在其存在时必须校验。",
          "重定向前记录预期签发者，并在令牌交换前拒绝任何不匹配。"
        ]
      }
    },
    {
      "id": "oidc-application-type",
      "sequence": 17,
      "category": "minor",
      "domain": "authorization",
      "impact": "medium",
      "actionClass": "required",
      "roles": [
        "client",
        "auth",
        "sdk"
      ],
      "sep": 837,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/837",
      "copy": {
        "en": [
          "Dynamic registration declares application type",
          "Authorization servers could default native clients to web and reject localhost redirects.",
          "Clients specify the correct OpenID Connect application_type.",
          "Classify each client deployment and test its registered redirect policy."
        ],
        "es": [
          "El registro dinamico declara el tipo de aplicacion",
          "El servidor podia tratar clientes nativos como web y rechazar localhost.",
          "El cliente especifica el application_type correcto de OpenID Connect.",
          "Clasifica cada despliegue y prueba su politica de redirect registrada."
        ],
        "zh": [
          "动态注册声明应用类型",
          "授权服务器过去可能把原生客户端默认为 web 并拒绝 localhost 重定向。",
          "客户端必须指定正确的 OpenID Connect application_type。",
          "分类每种客户端部署并测试其已注册重定向策略。"
        ]
      }
    },
    {
      "id": "credentials-by-issuer",
      "sequence": 18,
      "category": "minor",
      "domain": "authorization",
      "impact": "critical",
      "actionClass": "required",
      "roles": [
        "client",
        "auth",
        "sdk"
      ],
      "sep": 2352,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2352",
      "copy": {
        "en": [
          "Client credentials are keyed by issuer",
          "A cached client registration could be reused after the resource changed authorization server.",
          "Credentials bind to the issuing authorization server and must not cross issuers.",
          "Key persisted credentials by issuer and re-register after an issuer change."
        ],
        "es": [
          "Las credenciales se indexan por issuer",
          "Un registro cacheado podia reutilizarse tras cambiar el servidor de autorizacion.",
          "Las credenciales quedan ligadas al servidor emisor y no cruzan issuers.",
          "Indexa credenciales por issuer y registra de nuevo cuando cambie."
        ],
        "zh": [
          "客户端凭证按签发者存储",
          "资源更换授权服务器后，缓存的客户端注册过去可能被复用。",
          "凭证绑定签发它的授权服务器，不能跨签发者使用。",
          "以签发者为键持久化凭证，并在签发者变化后重新注册。"
        ]
      }
    },
    {
      "id": "json-schema-2020-12",
      "sequence": 19,
      "category": "minor",
      "domain": "schemas",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2106,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2106",
      "copy": {
        "en": [
          "Tools gain full JSON Schema 2020-12",
          "Tool schemas supported a constrained subset and structuredContent was object-shaped.",
          "Composition, conditions and references are allowed; output and structured content can be any JSON value.",
          "Upgrade validators, bound depth/time and never auto-fetch external references."
        ],
        "es": [
          "Tools adopta JSON Schema 2020-12 completo",
          "Los esquemas usaban un subconjunto y structuredContent era un objeto.",
          "Se permiten composicion, condiciones y referencias; salida y contenido pueden ser cualquier JSON.",
          "Actualiza validadores, limita profundidad/tiempo y no descargues referencias externas."
        ],
        "zh": [
          "工具采用完整 JSON Schema 2020-12",
          "工具 schema 过去仅支持受限子集，structuredContent 也限定为对象。",
          "现在允许组合、条件与引用；输出和结构化内容可以是任意 JSON 值。",
          "升级校验器、限制深度与时间，并禁止自动获取外部引用。"
        ]
      }
    },
    {
      "id": "elicitation-completion-removed",
      "sequence": 20,
      "category": "minor",
      "domain": "interaction",
      "impact": "medium",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": null,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "",
      "copy": {
        "en": [
          "URL elicitation completion signals disappear",
          "URL mode used elicitationId and notifications/elicitation/complete.",
          "The retry pattern carries correlation through requestState instead.",
          "Remove completion listeners and encode bounded correlation state in the original retry flow."
        ],
        "es": [
          "Desaparecen las senales de cierre de elicitation URL",
          "El modo URL usaba elicitationId y notifications/elicitation/complete.",
          "El patron de reintento correlaciona mediante requestState.",
          "Elimina listeners de cierre y codifica correlacion limitada en el reintento original."
        ],
        "zh": [
          "URL elicitation 完成信号被移除",
          "URL 模式过去使用 elicitationId 与 notifications/elicitation/complete。",
          "新的重试模式改由 requestState 维持关联。",
          "删除完成通知监听，并在原请求重试流程中编码受限关联状态。"
        ]
      }
    },
    {
      "id": "error-allocation-policy",
      "sequence": 21,
      "category": "minor",
      "domain": "errors",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": null,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#minor-changes",
      "proposalUrl": "",
      "copy": {
        "en": [
          "MCP reserves a JSON-RPC error range",
          "New MCP errors used provisional values inside the server-error range.",
          "-32020 through -32099 is reserved for MCP; three draft errors are renumbered.",
          "Regenerate constants and test HeaderMismatch, capability and version failures end to end."
        ],
        "es": [
          "MCP reserva un rango de errores JSON-RPC",
          "Los errores nuevos usaban valores provisionales del rango de servidor.",
          "-32020 a -32099 queda reservado para MCP y tres errores cambian de numero.",
          "Regenera constantes y prueba HeaderMismatch, capacidades y version de extremo a extremo."
        ],
        "zh": [
          "MCP 保留一段 JSON-RPC 错误码",
          "新的 MCP 错误过去使用服务器错误区间内的临时值。",
          "-32020 到 -32099 保留给 MCP，三个草案错误重新编号。",
          "重新生成常量，并端到端测试 HeaderMismatch、能力与版本失败。"
        ]
      }
    },
    {
      "id": "core-features-deprecated",
      "sequence": 22,
      "category": "deprecated",
      "domain": "lifecycle",
      "impact": "high",
      "actionClass": "review",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2577,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#deprecated",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577",
      "copy": {
        "en": [
          "Roots, Sampling and Logging enter deprecation",
          "New implementations could adopt all three as active core features.",
          "They remain functional during the window, but new implementations should use replacements.",
          "Stop new adoption and plan tool/resource, provider API and stderr/OpenTelemetry replacements."
        ],
        "es": [
          "Roots, Sampling y Logging entran en deprecacion",
          "Las implementaciones nuevas podian adoptarlos como funciones centrales activas.",
          "Siguen funcionando durante la ventana, pero no deben adoptarse en proyectos nuevos.",
          "Deten nuevas adopciones y planifica tools/resources, API del proveedor y stderr/OpenTelemetry."
        ],
        "zh": [
          "Roots、Sampling 与 Logging 进入弃用期",
          "新实现过去可以把三者作为活跃核心功能采用。",
          "它们在窗口期仍可用，但新实现不应再采用。",
          "停止新增依赖，并规划工具/资源、模型提供商 API 与 stderr/OpenTelemetry 替代方案。"
        ]
      }
    },
    {
      "id": "http-sse-deprecated",
      "sequence": 23,
      "category": "deprecated",
      "domain": "transport",
      "impact": "high",
      "actionClass": "required",
      "roles": [
        "server",
        "client",
        "gateway"
      ],
      "sep": 2596,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#deprecated",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2596",
      "copy": {
        "en": [
          "HTTP+SSE becomes formally deprecated",
          "The older transport carried a soft legacy status.",
          "It enters the formal Deprecated lifecycle; Streamable HTTP is the migration target.",
          "Inventory every endpoint and gateway rule, then migrate transport behavior before removal pressure grows."
        ],
        "es": [
          "HTTP+SSE queda formalmente deprecado",
          "El transporte antiguo tenia un estado legacy informal.",
          "Entra en el ciclo Deprecated; Streamable HTTP es el destino.",
          "Inventaria endpoints y reglas de gateway y migra antes de que aumente la presion de retiro."
        ],
        "zh": [
          "HTTP+SSE 正式进入弃用状态",
          "旧传输过去只处于非正式的遗留状态。",
          "它进入正式 Deprecated 生命周期，迁移目标是 Streamable HTTP。",
          "盘点所有端点和网关规则，并在移除压力增加前完成迁移。"
        ]
      }
    },
    {
      "id": "include-context-deprecated",
      "sequence": 24,
      "category": "deprecated",
      "domain": "sampling",
      "impact": "medium",
      "actionClass": "review",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2596,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#deprecated",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2596",
      "copy": {
        "en": [
          "Two includeContext values are deprecated",
          "Sampling could request thisServer or allServers context.",
          "Those values enter formal deprecation; omit the field or use none.",
          "Remove both values from generated requests and compatibility fixtures."
        ],
        "es": [
          "Dos valores includeContext quedan deprecados",
          "Sampling podia solicitar contexto thisServer o allServers.",
          "Ambos entran en deprecacion; omite el campo o usa none.",
          "Elimina ambos valores de solicitudes generadas y fixtures de compatibilidad."
        ],
        "zh": [
          "两个 includeContext 值被弃用",
          "Sampling 过去可以请求 thisServer 或 allServers 上下文。",
          "这两个值进入正式弃用；应省略字段或使用 none。",
          "从生成请求和兼容性测试夹具中移除这两个值。"
        ]
      }
    },
    {
      "id": "dynamic-registration-deprecated",
      "sequence": 25,
      "category": "deprecated",
      "domain": "authorization",
      "impact": "high",
      "actionClass": "review",
      "roles": [
        "client",
        "auth",
        "sdk"
      ],
      "sep": 2858,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#deprecated",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2858",
      "copy": {
        "en": [
          "RFC 7591 registration becomes a fallback",
          "Dynamic Client Registration was a primary MCP registration path.",
          "Client ID Metadata Documents become preferred; RFC 7591 remains for compatibility.",
          "Publish metadata-document support and retain dynamic registration only behind capability detection."
        ],
        "es": [
          "El registro RFC 7591 pasa a fallback",
          "Dynamic Client Registration era una ruta principal de MCP.",
          "Se prefieren Client ID Metadata Documents; RFC 7591 queda por compatibilidad.",
          "Soporta documentos de metadata y conserva registro dinamico tras detectar capacidad."
        ],
        "zh": [
          "RFC 7591 注册降为回退方案",
          "动态客户端注册过去是 MCP 的主要注册路径。",
          "现在优先使用 Client ID Metadata Documents，RFC 7591 仅保留兼容用途。",
          "支持客户端 ID 元数据文档，仅在能力探测后回退到动态注册。"
        ]
      }
    },
    {
      "id": "numeric-schema-fix",
      "sequence": 26,
      "category": "schema",
      "domain": "schemas",
      "impact": "medium",
      "actionClass": "review",
      "roles": [
        "server",
        "client",
        "sdk"
      ],
      "sep": 2710,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#other-schema-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2710",
      "copy": {
        "en": [
          "Numeric constraints accept real numbers",
          "Generated schema incorrectly limited minimum, maximum and default to integers.",
          "The schema now matches the TypeScript number type.",
          "Regenerate validators and add decimal boundary fixtures."
        ],
        "es": [
          "Las restricciones numericas aceptan decimales",
          "El schema generado limitaba minimum, maximum y default a enteros.",
          "Ahora coincide con el tipo number de TypeScript.",
          "Regenera validadores y agrega fixtures con limites decimales."
        ],
        "zh": [
          "数值约束接受小数",
          "生成的 schema 曾错误地把 minimum、maximum 与 default 限定为整数。",
          "现在与 TypeScript 的 number 类型保持一致。",
          "重新生成校验器，并增加小数边界测试。"
        ]
      }
    },
    {
      "id": "feature-lifecycle",
      "sequence": 27,
      "category": "governance",
      "domain": "lifecycle",
      "impact": "info",
      "actionClass": "observe",
      "roles": [
        "sdk",
        "maintainer"
      ],
      "sep": 2596,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#governance-and-process-updates",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2596",
      "copy": {
        "en": [
          "Features gain a formal lifecycle",
          "Deprecation timing and removal expectations were not uniform.",
          "Active, Deprecated and Removed states include at least a twelve-month deprecation window.",
          "Track lifecycle state in compatibility policy, docs and release gates."
        ],
        "es": [
          "Las funciones obtienen un ciclo formal",
          "Los plazos de deprecacion y retiro no eran uniformes.",
          "Active, Deprecated y Removed incluyen al menos doce meses de deprecacion.",
          "Registra el estado en politica de compatibilidad, docs y gates de release."
        ],
        "zh": [
          "功能获得正式生命周期",
          "弃用时间与移除预期过去并不统一。",
          "Active、Deprecated、Removed 三种状态包含至少十二个月的弃用窗口。",
          "在兼容政策、文档与发布门禁中跟踪生命周期状态。"
        ]
      }
    },
    {
      "id": "sep-workflow",
      "sequence": 28,
      "category": "process",
      "domain": "governance",
      "impact": "info",
      "actionClass": "observe",
      "roles": [
        "sdk",
        "maintainer"
      ],
      "sep": 1850,
      "sourceUrl": "https://modelcontextprotocol.io/specification/draft/changelog#process-changes",
      "proposalUrl": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1850",
      "copy": {
        "en": [
          "The SEP workflow becomes repository-native",
          "Proposal numbering and status management relied on less formal coordination.",
          "SEPs use pull requests, repository files, sponsors and status labels.",
          "Link implementation decisions to merged SEP artifacts and matching conformance scenarios."
        ],
        "es": [
          "El flujo SEP pasa a ser nativo del repositorio",
          "Numeracion y estados dependian de coordinacion menos formal.",
          "Los SEP usan pull requests, archivos, sponsors y labels de estado.",
          "Vincula decisiones de implementacion con SEP fusionados y escenarios de conformidad."
        ],
        "zh": [
          "SEP 流程转为仓库原生",
          "提案编号与状态管理过去依赖较不正式的协作。",
          "SEP 改用拉取请求、仓库文件、发起人和状态标签。",
          "把实现决策关联到已合并 SEP 以及对应的一致性场景。"
        ]
      }
    }
  ],
  "sources": {
    "announcement": "https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/",
    "changelog": "https://modelcontextprotocol.io/specification/draft/changelog",
    "draft": "https://modelcontextprotocol.io/specification/draft",
    "baseline": "https://modelcontextprotocol.io/specification/2025-11-25"
  },
  "privacy": {
    "browserLocalFiltering": true,
    "sourceCodeCollected": false,
    "projectNameCollected": false,
    "repositoryCollected": false,
    "endpointCollected": false,
    "credentialCollected": false,
    "freeTextIncludedInExports": false,
    "aggregateMetricsUseFixedIdsOnly": true
  },
  "limitations": {
    "releaseCandidate": true,
    "finalSpecificationVerified": false,
    "runtimeConformanceTested": false,
    "compatibilityCertified": false
  }
}
