Skip to content

Spec diff: 2025-11-25 → 2026-07-28

Spec
2025-11-25 → 2026-07-28
Verified

This page compares the official schema.json of the two revisions. The tables are generated when the site is built, from copies of both files kept in our repository, so they show exactly what the schema says. The notes on methods are ours.

145 definitions in 2025-11-25, 155 in 2026-07-28: 42 added, 32 removed, 76 changed (16 of them only in wording).

Thirteen methods are gone from the core protocol and three are new.

MethodChangeWhat it means
initializeRemovedThere is no handshake: every request carries the protocol version and client capabilities in _meta. spec
logging/setLevelRemovedThe log level is now set per request with io.modelcontextprotocol/logLevel in _meta. Logging itself is deprecated, not removed. spec
notifications/elicitation/completeRemovedDropped along with the elicitationId of URL-mode elicitation. The client learns the outcome by retrying the original request. spec
notifications/initializedRemovedWent away with initialize. spec
notifications/roots/list_changedRemovedRoots itself is deprecated; a server asks for roots through an input request instead. spec
notifications/subscriptions/acknowledgedAddedFirst message on a subscriptions/listen stream: the subset of requested notification types the server will actually send. spec
notifications/tasks/statusRemovedGone from the core protocol with the rest of tasks. Check the io.modelcontextprotocol/tasks extension for what it offers now. spec
pingRemovedA 2026-07-28 server answers it with -32601 Method not found. spec
resources/subscribeRemovedList the resource URIs in the resourceSubscriptions filter of subscriptions/listen. spec
resources/unsubscribeRemovedClose or cancel the subscriptions/listen request instead. spec
server/discoverAddedReturns supported protocol versions, capabilities and server info. Servers must implement it; clients may call it first, and dual-era stdio clients should use it as the probe before falling back to initialize. spec
subscriptions/listenAddedOne long-lived request whose response stream carries the change notifications the client opted in to. Replaces the HTTP GET stream and resources/subscribe. spec
tasks/cancelRemovedGone from the core protocol with the rest of tasks. Check the io.modelcontextprotocol/tasks extension for what it offers now. spec
tasks/getRemovedMoved out of the core protocol into the official extension io.modelcontextprotocol/tasks, which was redesigned. spec
tasks/listRemovedGone from the core protocol, and the tasks extension has no tasks/list. spec
tasks/resultRemovedGone from the core protocol. The tasks extension polls with tasks/get instead of blocking on tasks/result. spec

Most of the new types serve three features: the per-request _meta envelope (RequestMetaObject, ResultMetaObject), multi round-trip requests (InputRequiredResult, InputRequests, InputResponses) and caching (CacheableResult). The …ResultResponse types are complete JSON-RPC responses that wrap the matching result, and the error types give each spec error code its own schema.

DefinitionFields
CacheableResult_meta, cacheScope, resultType, ttlMs
CallToolResultResponseid, jsonrpc, result
CompleteResultResponseid, jsonrpc, result
DiscoverRequest
server/discover
id, jsonrpc, method, params
DiscoverResult_meta, cacheScope, capabilities, instructions, resultType, supportedVersions, ttlMs
DiscoverResultResponseid, jsonrpc, result
GetPromptResultResponseid, jsonrpc, result
HeaderMismatchErrorerror, id, jsonrpc
InputRequest
InputRequests
InputRequiredResult_meta, inputRequests, requestState, resultType
InputResponse
InputResponseRequestParams_meta, inputResponses, requestState
InputResponses
InternalErrorcode, data, message
InvalidParamsErrorcode, data, message
InvalidRequestErrorcode, data, message
JSONArray
JSONObject
JSONValue
ListPromptsResultResponseid, jsonrpc, result
ListResourcesResultResponseid, jsonrpc, result
ListResourceTemplatesResultResponseid, jsonrpc, result
ListToolsResultResponseid, jsonrpc, result
MetaObject
MethodNotFoundErrorcode, data, message
MissingRequiredClientCapabilityErrorerror, id, jsonrpc
NotificationMetaObjectio.modelcontextprotocol/subscriptionId
ParseErrorcode, data, message
ReadResourceResultResponseid, jsonrpc, result
RequestMetaObjectio.modelcontextprotocol/clientCapabilities, io.modelcontextprotocol/clientInfo, io.modelcontextprotocol/logLevel, io.modelcontextprotocol/protocolVersion, progressToken
ResultMetaObjectio.modelcontextprotocol/serverInfo
ResultType
SubscriptionFilterpromptsListChanged, resourceSubscriptions, resourcesListChanged, toolsListChanged
SubscriptionsAcknowledgedNotification
notifications/subscriptions/acknowledged
jsonrpc, method, params
SubscriptionsAcknowledgedNotificationParams_meta, notifications
SubscriptionsListenRequest
subscriptions/listen
id, jsonrpc, method, params
SubscriptionsListenRequestParams_meta, notifications
SubscriptionsListenResult_meta, resultType
SubscriptionsListenResultMetaObjectio.modelcontextprotocol/serverInfo, io.modelcontextprotocol/subscriptionId
SubscriptionsListenResultResponseid, jsonrpc, result
UnsupportedProtocolVersionErrorerror, id, jsonrpc

+ is a field that was added, − one that was removed and ~ one whose type or constraints changed. The arrow shows the old and new shape. Two patterns repeat across many rows: results gained a required resultType, and list results gained ttlMs and cacheScope.

DefinitionFields
AudioContent
~ _meta (object → MetaObject)
BlobResourceContents
~ _meta (object → MetaObject)
CallToolRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
+ inputResponses (InputResponses)
+ requestState (string)
− task (TaskMetadata)
required + _meta
CallToolResult
~ _meta (object → ResultMetaObject)
+ resultType (string)
~ structuredContent (object → any JSON)
required + resultType
CancelledNotificationParams
~ _meta (object → NotificationMetaObject)
required + requestId
ClientCapabilities
~ elicitation (constraints changed)
~ experimental (constraints changed)
+ extensions (object)
~ roots (removed: listChanged)
~ sampling (constraints changed)
− tasks (object)
ClientNotification
+ jsonrpc ("2.0")
+ method ("notifications/cancelled")
+ params (CancelledNotificationParams)
required + jsonrpc, method, params
ClientRequest
ClientResult
CompleteRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
required + _meta
CompleteResult
~ _meta (object → ResultMetaObject)
~ completion (constraints changed)
+ resultType (string)
required + resultType
CreateMessageRequest
− id (RequestId)
− jsonrpc ("2.0")
required − id, jsonrpc
CreateMessageRequestParams
− _meta (object)
~ metadata (object → JSONObject)
− task (TaskMetadata)
CreateMessageResult
~ _meta (object → MetaObject)
ElicitRequest
− id (RequestId)
− jsonrpc ("2.0")
required − id, jsonrpc
ElicitRequestFormParams
− _meta (object)
− task (TaskMetadata)
ElicitRequestParams
ElicitRequestURLParams
− _meta (object)
− elicitationId (string)
− task (TaskMetadata)
required − elicitationId
ElicitResult
− _meta (object)
EmbeddedResource
~ _meta (object → MetaObject)
GetPromptRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
+ inputResponses (InputResponses)
+ requestState (string)
required + _meta
GetPromptResult
~ _meta (object → ResultMetaObject)
+ resultType (string)
required + resultType
ImageContent
~ _meta (object → MetaObject)
ListPromptsRequest
required + params
ListPromptsResult
~ _meta (object → ResultMetaObject)
+ cacheScope ("private" | "public")
+ resultType (string)
+ ttlMs (integer)
required + cacheScope, resultType, ttlMs
ListResourcesRequest
required + params
ListResourcesResult
~ _meta (object → ResultMetaObject)
+ cacheScope ("private" | "public")
+ resultType (string)
+ ttlMs (integer)
required + cacheScope, resultType, ttlMs
ListResourceTemplatesRequest
required + params
ListResourceTemplatesResult
~ _meta (object → ResultMetaObject)
+ cacheScope ("private" | "public")
+ resultType (string)
+ ttlMs (integer)
required + cacheScope, resultType, ttlMs
ListRootsRequest
− id (RequestId)
− jsonrpc ("2.0")
~ params (RequestParams → object; added: _meta)
required − id, jsonrpc
ListRootsResult
− _meta (object)
ListToolsRequest
required + params
ListToolsResult
~ _meta (object → ResultMetaObject)
+ cacheScope ("private" | "public")
+ resultType (string)
+ ttlMs (integer)
required + cacheScope, resultType, ttlMs
LoggingMessageNotificationParams
~ _meta (object → NotificationMetaObject)
NotificationParams
~ _meta (object → NotificationMetaObject)
PaginatedRequest
required + params
PaginatedRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
required + _meta
PaginatedResult
~ _meta (object → ResultMetaObject)
+ resultType (string)
required + resultType
ProgressNotificationParams
~ _meta (object → NotificationMetaObject)
Prompt
~ _meta (object → MetaObject)
ReadResourceRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
+ inputResponses (InputResponses)
+ requestState (string)
required + _meta
ReadResourceResult
~ _meta (object → ResultMetaObject)
+ cacheScope ("private" | "public")
+ resultType (string)
+ ttlMs (integer)
required + cacheScope, resultType, ttlMs
RequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
required + _meta
Resource
~ _meta (object → MetaObject)
ResourceContents
~ _meta (object → MetaObject)
ResourceLink
~ _meta (object → MetaObject)
ResourceRequestParams
~ _meta (object → RequestMetaObject; removed: progressToken)
required + _meta
ResourceTemplate
~ _meta (object → MetaObject)
ResourceUpdatedNotificationParams
~ _meta (object → NotificationMetaObject)
Result
~ _meta (object → ResultMetaObject)
+ resultType (string)
required + resultType
Root
~ _meta (object → MetaObject)
SamplingMessage
~ _meta (object → MetaObject)
ServerCapabilities
~ completions (object → JSONObject)
~ experimental (constraints changed)
+ extensions (object)
~ logging (object → JSONObject)
− tasks (object)
ServerNotification
ServerResult
TextContent
~ _meta (object → MetaObject)
TextResourceContents
~ _meta (object → MetaObject)
Tool
~ _meta (object → MetaObject)
− execution (ToolExecution)
~ inputSchema (removed: properties, required)
~ outputSchema (removed: properties, required, type)
ToolResultContent
~ _meta (object → MetaObject)
~ structuredContent (object → any JSON)
ToolUseContent
~ _meta (object → MetaObject)
16 more definitions changed only in their descriptions

BaseMetadata, CancelledNotification, EmptyResult, Icon, Implementation, LegacyTitledEnumSchema, LoggingMessageNotification, PromptArgument, PromptListChangedNotification, PromptMessage, PromptReference, ResourceListChangedNotification, ResourceUpdatedNotification, ToolAnnotations, ToolChoice, ToolListChangedNotification

  • The two schema files are copied unmodified from the specification repository at commit 9850cae, with their SHA-256 hashes recorded next to them. A check fails the build if a file changes without its hash being updated.
  • The diff ignores description and title text when deciding whether a definition changed structurally. Definitions that differ only in wording are listed separately.
  • Links go to the official schema reference. A few base types have no anchor there; those link to the top of the page.

Sources

MCPDev is community documentation. It is not affiliated with the Model Context Protocol project or with the vendors of the clients it covers.