Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MCP conformance matrix

Generated by internal/conformance (MCPX_UPDATE_MATRIX=1 go test ./internal/conformance -run TestMatrix); do not edit.

Generated from inputs 247a9508b4eda6e7 (sha256 of docs/spec/requirements.md, internal/conformance/overrides/.json, internal/conformance/coverage.go, internal/conformance/authsplit.json). TestMatrix regenerates this file and fails when it differs, so it describes the tree it is committed in.

Every normative requirement of every revision (catalogue: docs/spec/requirements.md), for mcpx as a server and as a client. A requirement is tested when a named test verifies it in that revision, n/a when it does not bind mcpx in that role, and a gap when it binds mcpx and mcpx does not meet it yet, with the issue that tracks it. Run exactly the covering tests with go run ./internal/conformance/cmd/covering.

Summary

revisionsidelevelappliestestedgapmissingn/a
2024-11-05serverMUST32311022
2024-11-05serverMUST NOT66004
2024-11-05serverSHOULD36351045
2024-11-05serverSHOULD NOT11001
2024-11-05serverMAY990015
2024-11-05serverother1111001
2024-11-05clientMUST26251028
2024-11-05clientMUST NOT99001
2024-11-05clientSHOULD31265050
2024-11-05clientSHOULD NOT11001
2024-11-05clientMAY990015
2024-11-05clientother77005
2025-03-26serverMUST44431037
2025-03-26serverMUST NOT77008
2025-03-26serverSHOULD45441058
2025-03-26serverSHOULD NOT43101
2025-03-26serverMAY16160021
2025-03-26serverother1111001
2025-03-26clientMUST35314046
2025-03-26clientMUST NOT1211103
2025-03-26clientSHOULD39336064
2025-03-26clientSHOULD NOT21103
2025-03-26clientMAY15150022
2025-03-26clientother77005
2025-06-18serverMUST52511049
2025-06-18serverMUST NOT109108
2025-06-18serverSHOULD48471067
2025-06-18serverSHOULD NOT43101
2025-06-18serverMAY15150020
2025-06-18serverother1515003
2025-06-18clientMUST42375059
2025-06-18clientMUST NOT1311205
2025-06-18clientSHOULD48408067
2025-06-18clientSHOULD NOT21103
2025-06-18clientMAY13130022
2025-06-18clientother108208
2025-11-25serverMUST102984078
2025-11-25serverMUST NOT22193013
2025-11-25serverSHOULD73658086
2025-11-25serverSHOULD NOT1110103
2025-11-25serverMAY25250030
2025-11-25serverother1919002
2025-11-25clientMUST655780115
2025-11-25clientMUST NOT16142019
2025-11-25clientSHOULD5848100101
2025-11-25clientSHOULD NOT54109
2025-11-25clientMAY17170038
2025-11-25clientother1311208
2026-07-28serverMUST11310940111
2026-07-28serverMUST NOT44422020
2026-07-28serverSHOULD69654091
2026-07-28serverSHOULD NOT1110109
2026-07-28serverMAY29290032
2026-07-28serverother2322104
2026-07-28clientMUST736580151
2026-07-28clientMUST NOT25232039
2026-07-28clientSHOULD66579094
2026-07-28clientSHOULD NOT1311207
2026-07-28clientMAY11110050
2026-07-28clientother13112014

2024-11-05

(security; not in area list)

requirementlevelsidemcpx as servermcpx as client
security-implementors-guidelinesSHOULDbothtested: conformance.TestMessagesServer/2024-11-05/security/security-implementors-guidelinesn/a: catalogue marks it n/a

authorization

requirementlevelsidemcpx as servermcpx as client
authorization-custom-auth-mayMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a

cancellation

requirementlevelsidemcpx as servermcpx as client
cancellation-ref-same-direction-in-progressMUSTbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-ref-same-direction-in-progresstested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-ref-same-direction-in-progress
cancellation-client-must-not-cancel-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-client-must-not-cancel-initialize
cancellation-receiver-should-stop-free-no-responseSHOULDbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-receiver-should-stop-free-no-responsetested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-receiver-should-stop-free-no-response
cancellation-receiver-may-ignoreMAYbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-receiver-may-ignoretested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-receiver-may-ignore
cancellation-sender-ignore-late-responseSHOULDbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-sender-ignore-late-responsetested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-sender-ignore-late-response
cancellation-handle-racesMUSTbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-handle-racestested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-handle-races
cancellation-log-reasonsSHOULDbothgap #77: a cancellation reason reaches Server.OnCancel, which nothing outside tests sets; it is never loggedtested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-log-reasons
cancellation-ui-indicateSHOULDbothn/a: no UIn/a: no UI
cancellation-ignore-invalidSHOULDbothtested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-ignore-invalidtested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-ignore-invalid
cancellation-processing-should-ceaseSHOULDboth (receiver)tested: conformance.TestUtilitiesServer/2024-11-05/cancellation/cancellation-processing-should-ceasetested: conformance.TestUtilitiesClient/2024-11-05/cancellation/cancellation-processing-should-cease

completion

requirementlevelsidemcpx as servermcpx as client
completion-max-100descr. + schemaservertested: conformance.TestUtilitiesServer/2024-11-05/completion/completion-max-100n/a: addresses the other side
completion-server-shouldSHOULDservertested: daemon.TestHandleCompleteRateLimitHotChangeAndZeroDisables@all
daemon.TestHandleCompleteRateLimitRefusesBeforePool@all
daemon.TestHandleCompleteServerWindowBindsAcrossCallers@all
daemon.TestLocalCompletionCapAfterRanking@all
daemon.TestLocalCompletionTiersPrompts@all
daemon.TestLocalCompletionTiersResources@all
n/a: addresses the other side
completion-client-shouldSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/completion/completion-client-should
completion-securityMUSTbothgap #1968: partial: completion inputs are validated and completion/complete is rate limited per caller (completion.perMinute) and per server (completion.serverPerMinute) since #2387, but there is no per-caller access control for sensitive suggestions and no completion-specific information-disclosure control; waiting on principals #1968 / permissive-auth #1972n/a: catalogue marks it n/a

errors

requirementlevelsidemcpx as servermcpx as client
errors-error-has-code-and-messageMUSTbothtested: conformance.TestMessagesServer/2024-11-05/errors/errors-error-has-code-and-messagetested: conformance.TestMessagesClient/2024-11-05/errors/errors-error-has-code-and-message
errors-codes-integersMUSTbothtested: conformance.TestMessagesServer/2024-11-05/errors/errors-codes-integerstested: conformance.TestMessagesClient/2024-11-05/errors/errors-codes-integers
errors-message-concise-single-sentenceSHOULDbothtested: conformance.TestMessagesServer/2024-11-05/errors/errors-message-concise-single-sentencen/a: sends no errors except to server requests

lifecycle

requirementlevelsidemcpx as servermcpx as client
lifecycle-implementations-support-base-and-lifecycleMUSTbothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-implementations-support-base-and-lifecycletested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-implementations-support-base-and-lifecycle
lifecycle-initialization-first-interactionMUSTbothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-initialization-first-interactiontested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-initialization-first-interaction
lifecycle-client-sends-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-client-sends-initialize
lifecycle-server-responds-caps-and-infoMUSTservertested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-server-responds-caps-and-infon/a: addresses the other side
lifecycle-client-sends-initialized-after-initMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-client-sends-initialized-after-init
lifecycle-client-no-requests-before-init-responseSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-client-no-requests-before-init-response
lifecycle-server-no-requests-before-initializedSHOULD NOTservertested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-server-no-requests-before-initializedn/a: addresses the other side
lifecycle-capabilities-establish-session-features(definitional)bothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-capabilities-establish-session-featurestested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-capabilities-establish-session-features
lifecycle-respect-negotiated-version-and-capabilities-shouldSHOULDbothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-shouldtested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-should
lifecycle-stdio-client-shutdown-sequenceSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-stdio-client-shutdown-sequence
lifecycle-stdio-server-may-exitMAYservertested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-stdio-server-may-exitn/a: addresses the other side
lifecycle-http-shutdown-closing-connection(definitional)bothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-http-shutdown-closing-connectiontested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-http-shutdown-closing-connection
lifecycle-prepared-for-error-casesSHOULDbothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-prepared-for-error-casestested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-prepared-for-error-cases
lifecycle-timeouts-all-requests-2024SHOULDbothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-timeouts-all-requests-2024tested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-timeouts-all-requests-2024
lifecycle-cancel-not-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-cancel-not-initialize
lifecycle-instructions-may-go-in-system-promptMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-instructions-may-go-in-system-prompt
lifecycle-capability-sets-open(definitional)bothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-capability-sets-opentested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-capability-sets-open
lifecycle-implementation-name-version-requiredREQUIRED (schema field)bothtested: conformance.TestLifecycleServer/2024-11-05/lifecycle/lifecycle-implementation-name-version-requiredtested: conformance.TestLifecycleClient/2024-11-05/lifecycle/lifecycle-implementation-name-version-required

logging

requirementlevelsidemcpx as servermcpx as client
logging-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-declare-capabilityn/a: addresses the other side
logging-client-may-setlevelMAYclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/logging/logging-client-may-setlevel
logging-setlevel-at-or-aboveshould (schema)servertested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-setlevel-at-or-aboven/a: addresses the other side
logging-unset-server-choosesMAYservertested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-unset-server-choosesn/a: addresses the other side
logging-errors-setlevelSHOULDservertested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-errors-setleveln/a: addresses the other side
logging-server-hygieneSHOULDservertested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-server-hygienen/a: addresses the other side
logging-no-secrets-piiMUST NOTboth (emitter)tested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-no-secrets-piitested: conformance.TestUtilitiesClient/2024-11-05/logging/logging-no-secrets-pii
logging-impl-validate-controlSHOULDbothtested: conformance.TestUtilitiesServer/2024-11-05/logging/logging-impl-validate-controltested: conformance.TestUtilitiesClient/2024-11-05/logging/logging-impl-validate-control

messages

requirementlevelsidemcpx as servermcpx as client
messages-all-messages-follow-jsonrpc-2MUSTbothtested: conformance.TestJSONRPCFramesEveryRevision/2024-11-05/messages/all-messages-follow-jsonrpc-2-server-http
conformance.TestJSONRPCFramesEveryRevision/2024-11-05/messages/all-messages-follow-jsonrpc-2-server-stdio
conformance.TestMessagesServer/2024-11-05/messages/messages-all-messages-follow-jsonrpc-2
tested: conformance.TestJSONRPCFramesEveryRevision/2024-11-05/messages/all-messages-follow-jsonrpc-2-client
messages-other-components-mayMAYbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-other-components-maytested: conformance.TestMessagesClient/2024-11-05/messages/messages-other-components-may
messages-request-id-string-or-integerMUSTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-request-id-string-or-integertested: conformance.TestMessagesClient/2024-11-05/messages/messages-request-id-string-or-integer
messages-request-id-not-nullMUST NOTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-request-id-not-nulltested: conformance.TestMessagesClient/2024-11-05/messages/messages-request-id-not-null
messages-request-id-unique-per-sessionMUST NOTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-request-id-unique-per-sessiontested: conformance.TestMessagesClient/2024-11-05/messages/messages-request-id-unique-per-session
messages-response-same-idMUSTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-response-same-idtested: conformance.TestMessagesClient/2024-11-05/messages/messages-response-same-id
messages-response-result-xor-errorMUST / MUST NOTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-response-result-xor-errortested: conformance.TestMessagesClient/2024-11-05/messages/messages-response-result-xor-error
messages-notification-no-idMUST NOTbothtested: conformance.TestMessagesServer/2024-11-05/messages/messages-notification-no-idtested: conformance.TestMessagesClient/2024-11-05/messages/messages-notification-no-id

meta

requirementlevelsidemcpx as servermcpx as client
[meta-reserved-for-mcp](https://modelcontextprotocol.io/specification/GH(2025-03-26) Result._meta)(definitional)bothtested: conformance.TestMessagesServer/2024-11-05/meta/meta-reserved-for-mcptested: conformance.TestMessagesClient/2024-11-05/meta/meta-reserved-for-mcp
meta-progress-token-receiver-not-obligated(definitional)bothtested: conformance.TestMessagesServer/2024-11-05/meta/meta-progress-token-receiver-not-obligatedtested: conformance.TestMessagesClient/2024-11-05/meta/meta-progress-token-receiver-not-obligated

pagination

requirementlevelsidemcpx as servermcpx as client
pagination-no-fixed-page-sizeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/pagination/pagination-no-fixed-page-size
pagination-stable-cursorsSHOULDservertested: conformance.TestUtilitiesServer/2024-11-05/pagination/pagination-stable-cursorsn/a: addresses the other side
pagination-invalid-cursor-gracefulSHOULDservertested: conformance.TestUtilitiesServer/2024-11-05/pagination/pagination-invalid-cursor-gracefuln/a: addresses the other side
pagination-missing-nextcursor-endSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/pagination/pagination-missing-nextcursor-end
pagination-support-both-flowsSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/pagination/pagination-support-both-flows
pagination-cursor-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/pagination/pagination-cursor-opaque
pagination-no-persist-across-sessionsMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2024-11-05/pagination/pagination-no-persist-across-sessions
pagination-invalid-cursor-32602SHOULDservertested: conformance.TestUtilitiesServer/2024-11-05/pagination/pagination-invalid-cursor-32602n/a: addresses the other side

ping

requirementlevelsidemcpx as servermcpx as client
ping-receiver-responds-promptly-emptyMUSTbothtested: conformance.TestLifecycleServer/2024-11-05/ping/ping-receiver-responds-promptly-emptytested: conformance.TestLifecycleClient/2024-11-05/ping/ping-receiver-responds-promptly-empty
ping-either-party-may-initiate(definitional)bothtested: conformance.TestLifecycleServer/2024-11-05/ping/ping-either-party-may-initiatetested: conformance.TestLifecycleClient/2024-11-05/ping/ping-either-party-may-initiate
ping-sender-may-consider-staleMAYbothn/a: catalogue marks it n/an/a: does not ping
ping-periodic-pingsSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
ping-frequency-configurableSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-timeouts-appropriateSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-avoid-excessiveSHOULDbothtested: conformance.TestLifecycleServer/2024-11-05/ping/ping-avoid-excessivetested: conformance.TestLifecycleClient/2024-11-05/ping/ping-avoid-excessive
ping-timeout-is-connection-failureSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-multiple-failures-may-resetMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-log-failuresSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-schema-receiver-must-respondmust (lowercase)bothtested: conformance.TestLifecycleServer/2024-11-05/ping/ping-schema-receiver-must-respondtested: conformance.TestLifecycleClient/2024-11-05/ping/ping-schema-receiver-must-respond

progress

requirementlevelsidemcpx as servermcpx as client
progress-token-string-or-intMUSTboth (requester)n/a: as a server mcpx never requests progress; a host’s token is relayed back verbatimtested: conformance.TestUtilitiesClient/2024-11-05/progress/progress-token-string-or-int
progress-token-unique-senderMUSTbothtested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-token-unique-sendertested: conformance.TestUtilitiesClient/2024-11-05/progress/progress-token-unique-sender
progress-receiver-may-sendMAYbothn/a: optional feature mcpx does not implementn/a: never receives requests with tokens
progress-must-increaseMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-must-increasen/a: catalogue marks it n/a
progress-only-active-tokensMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-only-active-tokensn/a: catalogue marks it n/a
progress-receiver-may-skipMAYbothtested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-receiver-may-skiptested: conformance.TestUtilitiesClient/2024-11-05/progress/progress-receiver-may-skip
progress-track-tokensSHOULDbothn/a: catalogue marks it n/atested: conformance.TestUtilitiesClient/2024-11-05/progress/progress-track-tokens
progress-rate-limitSHOULDbothtested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-rate-limittested: conformance.TestUtilitiesClient/2024-11-05/progress/progress-rate-limit
progress-stop-after-completionMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2024-11-05/progress/progress-stop-after-completionn/a: catalogue marks it n/a

prompts

requirementlevelsidemcpx as servermcpx as client
prompts-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-declare-capabilityn/a: addresses the other side
prompts-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-list-changed-notifyn/a: addresses the other side
prompts-image-base64-mimeMUSTservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-image-base64-mimen/a: addresses the other side
prompts-embedded-must-includeMUSTservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-embedded-must-includen/a: addresses the other side
prompts-validate-argsSHOULDservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-validate-argsn/a: addresses the other side
prompts-respect-capability-negotiationSHOULDbothtested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-respect-capability-negotiationtested: conformance.TestFeaturesClient/2024-11-05/prompts/prompts-respect-capability-negotiation
prompts-validate-ioMUSTbothtested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-validate-io; mcpclient.TestValidatePromptResultcovered

prompts / errors

requirementlevelsidemcpx as servermcpx as client
prompts-errors-32602-32603SHOULDservertested: conformance.TestFeaturesServer/2024-11-05/prompts/prompts-errors-32602-32603n/a: addresses the other side

prompts / pagination

requirementlevelsidemcpx as servermcpx as client
prompts-client-paginateSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2024-11-05/prompts/prompts-client-paginate

resources

requirementlevelsidemcpx as servermcpx as client
resources-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-declare-capabilityn/a: addresses the other side
resources-subscribe-cap-meaning-legacy(definition)servertested: e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/stdio-subscribe-delivers-upstream-updates-under-the-mcpx-uri@2024-11-05,2025-03-26,2025-06-18,2025-11-25n/a: addresses the other side
resources-cap-features-independentMAYservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-cap-features-independentn/a: addresses the other side
resources-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-list-changed-notifyn/a: addresses the other side
resources-updated-may-be-subresource(note, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2024-11-05/resources/resources-updated-may-be-subresource
resources-https-only-if-client-fetchableSHOULDservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-https-only-if-client-fetchablen/a: addresses the other side
resources-https-else-other-schemeSHOULDservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-https-else-other-schemen/a: addresses the other side
resources-file-xdg-mime-mayMAYservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-file-xdg-mime-mayn/a: addresses the other side
resources-sec-validate-urisMUSTservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-sec-validate-urisn/a: addresses the other side
resources-sec-access-controlSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-binary-encodedMUSTservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-sec-binary-encodedn/a: addresses the other side
resources-sec-permissionsSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side

resources / errors

requirementlevelsidemcpx as servermcpx as client
resources-not-found-32002SHOULDservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-not-found-32002n/a: addresses the other side
resources-internal-32603SHOULDservertested: conformance.TestFeaturesServer/2024-11-05/resources/resources-internal-32603n/a: addresses the other side

resources / subscriptions

requirementlevelsidemcpx as servermcpx as client
resources-subscribe-rpc(optional)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2024-11-05/resources/resources-subscribe-rpc
resources-unsubscribe-follows-subscribeshould (lowercase, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2024-11-05/resources/resources-unsubscribe-follows-subscribe

roots

requirementlevelsidemcpx as servermcpx as client
roots-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/roots/roots-client-declare-capability-at-initialize
roots-client-listchanged-must-notifyMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/roots/roots-client-listchanged-must-notify
roots-uri-must-be-file-schemeMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-only-expose-permitted-rootsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-uris-path-traversalMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-implement-access-controlsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-accessibilityMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-handle-unavailable-rootsSHOULDservern/a: mcpx does not consume rootsn/a: addresses the other side
roots-server-respect-boundariesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-validate-paths-against-rootsSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-prompt-consent-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-provide-root-management-uiSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-accessibility-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-root-changesSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-check-capability-before-useSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-handle-list-changesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-cache-root-informationSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-return-jsonrpc-errorsSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/roots/roots-client-return-jsonrpc-errors

sampling

requirementlevelsidemcpx as servermcpx as client
sampling-human-in-loop-can-denySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/sampling/sampling-human-in-loop-can-deny
sampling-app-review-uiSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-view-edit-promptsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-review-responsesSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/sampling/sampling-client-declare-capability-at-initialize
sampling-client-may-sample-fewer-tokensMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-model-preferencesMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-modify-system-promptMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-includecontextMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-evaluated-in-orderMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-over-prioritiesSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-name-substringSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-may-map-providerMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-stopreason-custom-valuesMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/sampling/sampling-stopreason-custom-values
sampling-client-errors-user-rejectedSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/sampling/sampling-client-errors-user-rejected
sampling-client-user-approval-controlsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-both-validate-message-contentSHOULDbothtested: conformance.TestSamplingValidation/2024-11-05/sampling/sampling-both-validate-message-contenttested: conformance.TestSamplingValidation/2024-11-05/sampling/sampling-both-validate-message-content
sampling-client-respect-hintsSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2024-11-05/sampling/sampling-client-rate-limit
sampling-both-handle-sensitive-dataMUSTbothtested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
tested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28

subscriptions

requirementlevelsidemcpx as servermcpx as client
subscriptions-list-changed-should-notifySHOULDservertested: conformance.TestStatefulServer/2024-11-05/subscriptions/subscriptions-list-changed-should-notifyn/a: addresses the other side
subscriptions-resources-updated-only-if-subscribedshould (schema)servertested: conformance.TestStatefulServer/2024-11-05/subscriptions/subscriptions-resources-updated-only-if-subscribedn/a: addresses the other side

tools

requirementlevelsidemcpx as servermcpx as client
tools-human-in-loop-denySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-ui-expose-indicate-confirmSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-declare-capabilityn/a: addresses the other side
tools-list-changed-means-emit(definition)servertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-list-changed-means-emitn/a: addresses the other side
tools-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-list-changed-notifyn/a: addresses the other side
tools-result-iserror-for-tool-errorsSHOULDservertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-result-iserror-for-tool-errorsn/a: addresses the other side
tools-result-lookup-errors-protocolshould (lowercase)servertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-result-lookup-errors-protocoln/a: addresses the other side
tools-error-unknown-tool-protocol(classification)servertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-error-unknown-tool-protocoln/a: addresses the other side
tools-error-invalid-args-protocol(classification)servertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-error-invalid-args-protocoln/a: addresses the other side
tools-embedded-resource-mayMAYservertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-embedded-resource-mayn/a: addresses the other side
tools-server-sec-validate-inputsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-client-secSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement

tools / json-schema

requirementlevelsidemcpx as servermcpx as client
tools-inputschema-type-object-rootREQUIRED (schema)servertested: conformance.TestFeaturesServer/2024-11-05/tools/tools-inputschema-type-object-rootn/a: addresses the other side

transport-http-sse

requirementlevelsidemcpx as servermcpx as client
http-sse-server-validate-originMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-server-bind-localhostSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-server-authenticateSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-server-two-endpointsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-server-endpoint-eventMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-client-post-to-endpointMUSTclientn/a: addresses the other sidetested: mcpclient.TestHTTPSSETransport/2024-11-05/transport-http-sse/client-posts-to-endpoint-and-reads-stream
http-sse-server-messages-as-sse-eventsMUST (implied)servern/a: optional feature mcpx does not implementn/a: addresses the other side

transport-stdio

requirementlevelsidemcpx as servermcpx as client
transport-client-should-support-stdioSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2024-11-05/transport-stdio/transport-client-should-support-stdio
transport-custom-preserve-jsonrpc-and-lifecycleMUSTbothn/a: mcpx serves MCP only over stdio and Streamable HTTP; its /v1 REST surface is not an MCP transportn/a: catalogue marks it n/a
transport-custom-document-patternsSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
stdio-no-embedded-newlinesMUST NOTbothtested: conformance.TestTransportServer/2024-11-05/transport-stdio/stdio-no-embedded-newlinestested: conformance.TestTransportClient/2024-11-05/transport-stdio/stdio-no-embedded-newlines
stdio-server-may-log-to-stderrMAYservertested: conformance.TestTransportServer/2024-11-05/transport-stdio/stdio-server-may-log-to-stderrn/a: addresses the other side
stdio-client-may-capture-stderrMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2024-11-05/transport-stdio/stdio-client-may-capture-stderr
stdio-server-stdout-only-mcpMUST NOTservertested: conformance.TestTransportServer/2024-11-05/transport-stdio/stdio-server-stdout-only-mcpn/a: addresses the other side
stdio-client-stdin-only-mcpMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2024-11-05/transport-stdio/stdio-client-stdin-only-mcp

versioning

requirementlevelsidemcpx as servermcpx as client
lifecycle-client-sends-supported-versionMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/versioning/lifecycle-client-sends-supported-version
lifecycle-client-sends-latest-versionSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/versioning/lifecycle-client-sends-latest-version
lifecycle-client-may-support-olderMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/versioning/lifecycle-client-may-support-older
lifecycle-server-echoes-supported-versionMUSTservertested: conformance.TestLifecycleServer/2024-11-05/versioning/lifecycle-server-echoes-supported-versionn/a: addresses the other side
lifecycle-server-counteroffers-versionMUSTservertested: conformance.TestLifecycleServer/2024-11-05/versioning/lifecycle-server-counteroffers-versionn/a: addresses the other side
lifecycle-server-counteroffers-latestSHOULDservertested: conformance.TestLifecycleServer/2024-11-05/versioning/lifecycle-server-counteroffers-latestn/a: addresses the other side
lifecycle-client-disconnects-on-unsupported-versionSHOULD (prose) / MUST (schema)clientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2024-11-05/versioning/lifecycle-client-disconnects-on-unsupported-version

2025-03-26

(security; not in area list)

requirementlevelsidemcpx as servermcpx as client
security-implementors-guidelinesSHOULDbothtested: conformance.TestMessagesServer/2025-03-26/security/security-implementors-guidelinesn/a: catalogue marks it n/a

authorization

requirementlevelsidemcpx as servermcpx as client
authorization-http-should-conform-stdio-should-notSHOULD / SHOULD NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authorization-custom-auth-mayMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
streamable-http-auth-discovery-version-headerSHOULDclientn/a: addresses the other siden/a: no OAuth
authz-optionalOPTIONALbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-http-should-conformSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-stdio-use-environmentSHOULD NOTbothgap not implemented: #1975gap not implemented: #1950
authz-alt-transport-best-practiceMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-implement-oauth21MUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-dcr-shouldSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-rfc8414-server-should-client-mustSHOULD / MUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-grant-typesSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-401-when-unauthorizedMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-base-url-discards-pathMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-default-endpoints-fallbackMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-bearer-headerMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-token-every-requestMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-no-token-in-queryMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-server-validates-tokenMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-error-status-codesMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-2025-03-26-security-listMUST / SHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-2025-03-26-implementation-reqsMUST / REQUIRED / SHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-third-party-session-bindingMAY / MUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side

cancellation

requirementlevelsidemcpx as servermcpx as client
cancellation-ref-same-direction-in-progressMUSTbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-ref-same-direction-in-progresstested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-ref-same-direction-in-progress
cancellation-client-must-not-cancel-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-client-must-not-cancel-initialize
cancellation-receiver-should-stop-free-no-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-receiver-should-stop-free-no-responsetested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-receiver-should-stop-free-no-response
cancellation-receiver-may-ignoreMAYbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-receiver-may-ignoretested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-receiver-may-ignore
cancellation-sender-ignore-late-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-sender-ignore-late-responsetested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-sender-ignore-late-response
cancellation-handle-racesMUSTbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-handle-racestested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-handle-races
cancellation-log-reasonsSHOULDbothgap #77: a cancellation reason reaches Server.OnCancel, which nothing outside tests sets; it is never loggedtested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-log-reasons
cancellation-ui-indicateSHOULDbothn/a: no UIn/a: no UI
cancellation-ignore-invalidSHOULDbothtested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-ignore-invalidtested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-ignore-invalid
cancellation-processing-should-ceaseSHOULDboth (receiver)tested: conformance.TestUtilitiesServer/2025-03-26/cancellation/cancellation-processing-should-ceasetested: conformance.TestUtilitiesClient/2025-03-26/cancellation/cancellation-processing-should-cease

completion

requirementlevelsidemcpx as servermcpx as client
completion-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-03-26/completion/completion-declare-capabilityn/a: addresses the other side
completion-max-100descr. + schemaservertested: conformance.TestUtilitiesServer/2025-03-26/completion/completion-max-100n/a: addresses the other side
completion-server-shouldSHOULDservertested: daemon.TestHandleCompleteRateLimitHotChangeAndZeroDisables@all
daemon.TestHandleCompleteRateLimitRefusesBeforePool@all
daemon.TestHandleCompleteServerWindowBindsAcrossCallers@all
daemon.TestLocalCompletionCapAfterRanking@all
daemon.TestLocalCompletionTiersPrompts@all
daemon.TestLocalCompletionTiersResources@all
n/a: addresses the other side
completion-client-shouldSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/completion/completion-client-should
completion-securityMUSTbothgap #1968: partial: completion inputs are validated and completion/complete is rate limited per caller (completion.perMinute) and per server (completion.serverPerMinute) since #2387, but there is no per-caller access control for sensitive suggestions and no completion-specific information-disclosure control; waiting on principals #1968 / permissive-auth #1972n/a: catalogue marks it n/a
completion-errorsSHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/completion/completion-errorsn/a: addresses the other side

errors

requirementlevelsidemcpx as servermcpx as client
errors-error-has-code-and-messageMUSTbothtested: conformance.TestMessagesServer/2025-03-26/errors/errors-error-has-code-and-messagetested: conformance.TestMessagesClient/2025-03-26/errors/errors-error-has-code-and-message
errors-codes-integersMUSTbothtested: conformance.TestMessagesServer/2025-03-26/errors/errors-codes-integerstested: conformance.TestMessagesClient/2025-03-26/errors/errors-codes-integers
errors-message-concise-single-sentenceSHOULDbothtested: conformance.TestMessagesServer/2025-03-26/errors/errors-message-concise-single-sentencen/a: sends no errors except to server requests

lifecycle

requirementlevelsidemcpx as servermcpx as client
lifecycle-implementations-support-base-and-lifecycleMUSTbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-implementations-support-base-and-lifecycletested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-implementations-support-base-and-lifecycle
lifecycle-initialize-not-in-batchMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-initialize-not-in-batch
lifecycle-initialization-first-interactionMUSTbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-initialization-first-interactiontested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-initialization-first-interaction
lifecycle-client-sends-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-client-sends-initialize
lifecycle-server-responds-caps-and-infoMUSTservertested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-server-responds-caps-and-infon/a: addresses the other side
lifecycle-client-sends-initialized-after-initMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-client-sends-initialized-after-init
lifecycle-client-no-requests-before-init-responseSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-client-no-requests-before-init-response
lifecycle-server-no-requests-before-initializedSHOULD NOTservertested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-server-no-requests-before-initializedn/a: addresses the other side
lifecycle-capabilities-establish-session-features(definitional)bothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-capabilities-establish-session-featurestested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-capabilities-establish-session-features
lifecycle-respect-negotiated-version-and-capabilities-shouldSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-shouldtested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-should
lifecycle-stdio-client-shutdown-sequenceSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-stdio-client-shutdown-sequence
lifecycle-stdio-server-may-exitMAYservertested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-stdio-server-may-exitn/a: addresses the other side
lifecycle-http-shutdown-closing-connection(definitional)bothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-http-shutdown-closing-connectiontested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-http-shutdown-closing-connection
lifecycle-prepared-for-error-casesSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-prepared-for-error-casestested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-prepared-for-error-cases
lifecycle-timeouts-establishSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-timeouts-establishtested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-timeouts-establish
lifecycle-timeouts-cancel-on-expirySHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-timeouts-cancel-on-expirytested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-timeouts-cancel-on-expiry
lifecycle-timeouts-per-request-configurableSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-timeouts-per-request-configurabletested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-timeouts-per-request-configurable
lifecycle-timeouts-may-reset-on-progressMAYbothn/a: catalogue marks it n/atested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-timeouts-may-reset-on-progress
lifecycle-timeouts-max-regardless-of-progressSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-timeouts-max-regardless-of-progresstested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-timeouts-max-regardless-of-progress
lifecycle-cancel-not-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-cancel-not-initialize
lifecycle-instructions-may-go-in-system-promptMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-instructions-may-go-in-system-prompt
lifecycle-capability-sets-open(definitional)bothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-capability-sets-opentested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-capability-sets-open
lifecycle-implementation-name-version-requiredREQUIRED (schema field)bothtested: conformance.TestLifecycleServer/2025-03-26/lifecycle/lifecycle-implementation-name-version-requiredtested: conformance.TestLifecycleClient/2025-03-26/lifecycle/lifecycle-implementation-name-version-required

logging

requirementlevelsidemcpx as servermcpx as client
logging-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-declare-capabilityn/a: addresses the other side
logging-client-may-setlevelMAYclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/logging/logging-client-may-setlevel
logging-setlevel-at-or-aboveshould (schema)servertested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-setlevel-at-or-aboven/a: addresses the other side
logging-unset-server-choosesMAYservertested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-unset-server-choosesn/a: addresses the other side
logging-errors-setlevelSHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-errors-setleveln/a: addresses the other side
logging-server-hygieneSHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-server-hygienen/a: addresses the other side
logging-no-secrets-piiMUST NOTboth (emitter)tested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-no-secrets-piitested: conformance.TestUtilitiesClient/2025-03-26/logging/logging-no-secrets-pii
logging-impl-validate-controlSHOULDbothtested: conformance.TestUtilitiesServer/2025-03-26/logging/logging-impl-validate-controltested: conformance.TestUtilitiesClient/2025-03-26/logging/logging-impl-validate-control

messages

requirementlevelsidemcpx as servermcpx as client
messages-all-messages-follow-jsonrpc-2MUSTbothtested: conformance.TestJSONRPCFramesEveryRevision/2025-03-26/messages/all-messages-follow-jsonrpc-2-server-http
conformance.TestJSONRPCFramesEveryRevision/2025-03-26/messages/all-messages-follow-jsonrpc-2-server-stdio
conformance.TestMessagesServer/2025-03-26/messages/messages-all-messages-follow-jsonrpc-2
tested: conformance.TestJSONRPCFramesEveryRevision/2025-03-26/messages/all-messages-follow-jsonrpc-2-client
messages-other-components-mayMAYbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-other-components-maytested: conformance.TestMessagesClient/2025-03-26/messages/messages-other-components-may
messages-request-id-string-or-integerMUSTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-request-id-string-or-integertested: conformance.TestMessagesClient/2025-03-26/messages/messages-request-id-string-or-integer
messages-request-id-not-nullMUST NOTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-request-id-not-nulltested: conformance.TestMessagesClient/2025-03-26/messages/messages-request-id-not-null
messages-request-id-unique-per-sessionMUST NOTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-request-id-unique-per-sessiontested: conformance.TestMessagesClient/2025-03-26/messages/messages-request-id-unique-per-session
messages-response-same-idMUSTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-response-same-idtested: conformance.TestMessagesClient/2025-03-26/messages/messages-response-same-id
messages-response-result-xor-errorMUST / MUST NOTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-response-result-xor-errortested: conformance.TestMessagesClient/2025-03-26/messages/messages-response-result-xor-error
messages-result-any-objectMAYbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-result-any-objecttested: conformance.TestMessagesClient/2025-03-26/messages/messages-result-any-object
messages-notification-no-responseMUST NOTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-notification-no-responsetested: conformance.TestMessagesClient/2025-03-26/messages/messages-notification-no-response
messages-notification-no-idMUST NOTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-notification-no-idtested: conformance.TestMessagesClient/2025-03-26/messages/messages-notification-no-id
messages-batch-may-send-must-receiveMAY / MUSTbothtested: conformance.TestMessagesServer/2025-03-26/messages/messages-batch-may-send-must-receivetested: conformance.TestMessagesClient/2025-03-26/messages/messages-batch-may-send-must-receive
transport-jsonrpc-utf8MUSTbothtested: conformance.TestMessagesServer/2025-03-26/messages/transport-jsonrpc-utf8tested: conformance.TestMessagesClient/2025-03-26/messages/transport-jsonrpc-utf8

meta

requirementlevelsidemcpx as servermcpx as client
[meta-reserved-for-mcp](https://modelcontextprotocol.io/specification/GH(2025-03-26) Result._meta)(definitional)bothtested: conformance.TestMessagesServer/2025-03-26/meta/meta-reserved-for-mcptested: conformance.TestMessagesClient/2025-03-26/meta/meta-reserved-for-mcp
meta-progress-token-receiver-not-obligated(definitional)bothtested: conformance.TestMessagesServer/2025-03-26/meta/meta-progress-token-receiver-not-obligatedtested: conformance.TestMessagesClient/2025-03-26/meta/meta-progress-token-receiver-not-obligated

pagination

requirementlevelsidemcpx as servermcpx as client
pagination-no-fixed-page-sizeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/pagination/pagination-no-fixed-page-size
pagination-stable-cursorsSHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/pagination/pagination-stable-cursorsn/a: addresses the other side
pagination-invalid-cursor-gracefulSHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/pagination/pagination-invalid-cursor-gracefuln/a: addresses the other side
pagination-missing-nextcursor-endSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/pagination/pagination-missing-nextcursor-end
pagination-support-both-flowsSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/pagination/pagination-support-both-flows
pagination-cursor-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/pagination/pagination-cursor-opaque
pagination-no-persist-across-sessionsMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-03-26/pagination/pagination-no-persist-across-sessions
pagination-invalid-cursor-32602SHOULDservertested: conformance.TestUtilitiesServer/2025-03-26/pagination/pagination-invalid-cursor-32602n/a: addresses the other side

ping

requirementlevelsidemcpx as servermcpx as client
ping-receiver-responds-promptly-emptyMUSTbothtested: conformance.TestLifecycleServer/2025-03-26/ping/ping-receiver-responds-promptly-emptytested: conformance.TestLifecycleClient/2025-03-26/ping/ping-receiver-responds-promptly-empty
ping-either-party-may-initiate(definitional)bothtested: conformance.TestLifecycleServer/2025-03-26/ping/ping-either-party-may-initiatetested: conformance.TestLifecycleClient/2025-03-26/ping/ping-either-party-may-initiate
ping-sender-may-consider-staleMAYbothn/a: catalogue marks it n/an/a: does not ping
ping-periodic-pingsSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
ping-frequency-configurableSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-timeouts-appropriateSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-avoid-excessiveSHOULDbothtested: conformance.TestLifecycleServer/2025-03-26/ping/ping-avoid-excessivetested: conformance.TestLifecycleClient/2025-03-26/ping/ping-avoid-excessive
ping-timeout-is-connection-failureSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-multiple-failures-may-resetMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-log-failuresSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-schema-receiver-must-respondmust (lowercase)bothtested: conformance.TestLifecycleServer/2025-03-26/ping/ping-schema-receiver-must-respondtested: conformance.TestLifecycleClient/2025-03-26/ping/ping-schema-receiver-must-respond

progress

requirementlevelsidemcpx as servermcpx as client
progress-token-string-or-intMUSTboth (requester)n/a: as a server mcpx never requests progress; a host’s token is relayed back verbatimtested: conformance.TestUtilitiesClient/2025-03-26/progress/progress-token-string-or-int
progress-token-unique-senderMUSTbothtested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-token-unique-sendertested: conformance.TestUtilitiesClient/2025-03-26/progress/progress-token-unique-sender
progress-receiver-may-sendMAYbothn/a: optional feature mcpx does not implementn/a: never receives requests with tokens
progress-must-increaseMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-must-increasen/a: catalogue marks it n/a
progress-message-human-readableSHOULDboth (notifier)tested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-message-human-readablen/a: catalogue marks it n/a
progress-only-active-tokensMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-only-active-tokensn/a: catalogue marks it n/a
progress-receiver-may-skipMAYbothtested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-receiver-may-skiptested: conformance.TestUtilitiesClient/2025-03-26/progress/progress-receiver-may-skip
progress-track-tokensSHOULDbothn/a: catalogue marks it n/atested: conformance.TestUtilitiesClient/2025-03-26/progress/progress-track-tokens
progress-rate-limitSHOULDbothtested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-rate-limittested: conformance.TestUtilitiesClient/2025-03-26/progress/progress-rate-limit
progress-stop-after-completionMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-03-26/progress/progress-stop-after-completionn/a: catalogue marks it n/a

prompts

requirementlevelsidemcpx as servermcpx as client
prompts-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-declare-capabilityn/a: addresses the other side
prompts-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-list-changed-notifyn/a: addresses the other side
prompts-image-base64-mimeMUSTservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-image-base64-mimen/a: addresses the other side
prompts-audio-base64-mimeMUST (not bolded)servertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-audio-base64-mimen/a: addresses the other side
prompts-embedded-must-includeMUSTservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-embedded-must-includen/a: addresses the other side
prompts-validate-argsSHOULDservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-validate-argsn/a: addresses the other side
prompts-respect-capability-negotiationSHOULDbothtested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-respect-capability-negotiationtested: conformance.TestFeaturesClient/2025-03-26/prompts/prompts-respect-capability-negotiation
prompts-validate-ioMUSTbothtested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-validate-io; mcpclient.TestValidatePromptResultcovered

prompts / errors

requirementlevelsidemcpx as servermcpx as client
prompts-errors-32602-32603SHOULDservertested: conformance.TestFeaturesServer/2025-03-26/prompts/prompts-errors-32602-32603n/a: addresses the other side

prompts / pagination

requirementlevelsidemcpx as servermcpx as client
prompts-client-paginateSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-03-26/prompts/prompts-client-paginate

resources

requirementlevelsidemcpx as servermcpx as client
resources-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-declare-capabilityn/a: addresses the other side
resources-subscribe-cap-meaning-legacy(definition)servertested: e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/http-subscribe-delivers-upstream-updates-on-the-get-stream@2025-03-26,2025-06-18,2025-11-25
e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/stdio-subscribe-delivers-upstream-updates-under-the-mcpx-uri@2024-11-05,2025-03-26,2025-06-18,2025-11-25
n/a: addresses the other side
resources-cap-features-independentMAYservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-cap-features-independentn/a: addresses the other side
resources-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-list-changed-notifyn/a: addresses the other side
resources-updated-may-be-subresource(note, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-03-26/resources/resources-updated-may-be-subresource
resources-https-only-if-client-fetchableSHOULDservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-https-only-if-client-fetchablen/a: addresses the other side
resources-https-else-other-schemeSHOULDservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-https-else-other-schemen/a: addresses the other side
resources-file-xdg-mime-mayMAYservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-file-xdg-mime-mayn/a: addresses the other side
resources-sec-validate-urisMUSTservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-sec-validate-urisn/a: addresses the other side
resources-sec-access-controlSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-binary-encodedMUSTservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-sec-binary-encodedn/a: addresses the other side
resources-sec-permissionsSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side

resources / errors

requirementlevelsidemcpx as servermcpx as client
resources-not-found-32002SHOULDservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-not-found-32002n/a: addresses the other side
resources-internal-32603SHOULDservertested: conformance.TestFeaturesServer/2025-03-26/resources/resources-internal-32603n/a: addresses the other side

resources / subscriptions

requirementlevelsidemcpx as servermcpx as client
resources-subscribe-rpc(optional)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-03-26/resources/resources-subscribe-rpc
resources-unsubscribe-follows-subscribeshould (lowercase, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-03-26/resources/resources-unsubscribe-follows-subscribe

roots

requirementlevelsidemcpx as servermcpx as client
roots-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/roots/roots-client-declare-capability-at-initialize
roots-client-listchanged-must-notifyMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/roots/roots-client-listchanged-must-notify
roots-uri-must-be-file-schemeMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-only-expose-permitted-rootsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-uris-path-traversalMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-implement-access-controlsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-accessibilityMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-handle-unavailable-rootsSHOULDservern/a: mcpx does not consume rootsn/a: addresses the other side
roots-server-respect-boundariesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-validate-paths-against-rootsSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-prompt-consent-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-provide-root-management-uiSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-accessibility-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-root-changesSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-check-capability-before-useSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-handle-list-changesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-cache-root-informationSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-return-jsonrpc-errorsSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/roots/roots-client-return-jsonrpc-errors

sampling

requirementlevelsidemcpx as servermcpx as client
sampling-human-in-loop-can-denySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/sampling/sampling-human-in-loop-can-deny
sampling-app-review-uiSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-view-edit-promptsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-review-responsesSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/sampling/sampling-client-declare-capability-at-initialize
sampling-client-may-sample-fewer-tokensMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-model-preferencesMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-modify-system-promptMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-includecontextMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-evaluated-in-orderMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-over-prioritiesSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-name-substringSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-may-map-providerMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-stopreason-custom-valuesMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/sampling/sampling-stopreason-custom-values
sampling-client-errors-user-rejectedSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/sampling/sampling-client-errors-user-rejected
sampling-client-user-approval-controlsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-both-validate-message-contentSHOULDbothtested: conformance.TestSamplingValidation/2025-03-26/sampling/sampling-both-validate-message-contenttested: conformance.TestSamplingValidation/2025-03-26/sampling/sampling-both-validate-message-content
sampling-client-respect-hintsSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-03-26/sampling/sampling-client-rate-limit
sampling-both-handle-sensitive-dataMUSTbothtested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
tested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28

subscriptions

requirementlevelsidemcpx as servermcpx as client
subscriptions-list-changed-should-notifySHOULDservertested: conformance.TestStatefulServer/2025-03-26/subscriptions/subscriptions-list-changed-should-notifyn/a: addresses the other side
subscriptions-resources-updated-only-if-subscribedshould (schema)servertested: conformance.TestStatefulServer/2025-03-26/subscriptions/subscriptions-resources-updated-only-if-subscribedn/a: addresses the other side

tools

requirementlevelsidemcpx as servermcpx as client
tools-human-in-loop-denySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-ui-expose-indicate-confirmSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-declare-capabilityn/a: addresses the other side
tools-list-changed-means-emit(definition)servertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-list-changed-means-emitn/a: addresses the other side
tools-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-list-changed-notifyn/a: addresses the other side
tools-annotations-untrustedMUSTclientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-annotations-hints-no-decisionsshould (lowercase, schema)clientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-result-iserror-for-tool-errorsSHOULDservertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-result-iserror-for-tool-errorsn/a: addresses the other side
tools-result-lookup-errors-protocolshould (lowercase)servertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-result-lookup-errors-protocoln/a: addresses the other side
tools-error-unknown-tool-protocol(classification)servertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-error-unknown-tool-protocoln/a: addresses the other side
tools-error-invalid-args-protocol(classification)servertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-error-invalid-args-protocoln/a: addresses the other side
tools-embedded-resource-mayMAYservertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-embedded-resource-mayn/a: addresses the other side
tools-server-sec-validate-inputsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-client-secSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement

tools / json-schema

requirementlevelsidemcpx as servermcpx as client
tools-inputschema-type-object-rootREQUIRED (schema)servertested: conformance.TestFeaturesServer/2025-03-26/tools/tools-inputschema-type-object-rootn/a: addresses the other side

transport-http-sse

requirementlevelsidemcpx as servermcpx as client
http-sse-server-backcompat-host-bothshould (lowercase)servern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-client-backcompat-probe-any-4xxshould (lowercase)clientn/a: addresses the other sidetested: pool.TestHTTPSSEFallback/2025-11-25/transport-http-sse/client-falls-back-to-get-endpoint-and-caches-it@2025-03-26,2025-06-18

transport-stdio

requirementlevelsidemcpx as servermcpx as client
transport-client-should-support-stdioSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-stdio/transport-client-should-support-stdio
transport-custom-preserve-jsonrpc-and-lifecycleMUSTbothn/a: mcpx serves MCP only over stdio and Streamable HTTP; its /v1 REST surface is not an MCP transportn/a: catalogue marks it n/a
transport-custom-document-patternsSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
stdio-no-embedded-newlinesMUST NOTbothtested: conformance.TestTransportServer/2025-03-26/transport-stdio/stdio-no-embedded-newlinestested: conformance.TestTransportClient/2025-03-26/transport-stdio/stdio-no-embedded-newlines
stdio-message-may-be-batchMAY (implied)bothtested: conformance.TestTransportServer/2025-03-26/transport-stdio/stdio-message-may-be-batchtested: mcpclient.TestReceivedBatchesAreSplit/2025-03-26/messages/client-accepts-batched-server-messages
stdio-server-may-log-to-stderrMAYservertested: conformance.TestTransportServer/2025-03-26/transport-stdio/stdio-server-may-log-to-stderrn/a: addresses the other side
stdio-client-may-capture-stderrMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-stdio/stdio-client-may-capture-stderr
stdio-server-stdout-only-mcpMUST NOTservertested: conformance.TestTransportServer/2025-03-26/transport-stdio/stdio-server-stdout-only-mcpn/a: addresses the other side
stdio-client-stdin-only-mcpMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-stdio/stdio-client-stdin-only-mcp

transport-streamable-http

requirementlevelsidemcpx as servermcpx as client
streamable-http-server-single-endpoint-post-getMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-single-endpoint-post-getn/a: addresses the other side
streamable-http-server-validate-originMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-validate-originn/a: addresses the other side
streamable-http-server-bind-localhostSHOULDservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-bind-localhostn/a: addresses the other side
streamable-http-server-authenticateSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-post-every-messageMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-post-every-message
streamable-http-client-accept-bothMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-accept-both
streamable-http-post-body-may-batchMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-post-body-may-batch
streamable-http-server-202-for-non-requestMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-202-for-non-requestn/a: addresses the other side
streamable-http-server-error-status-if-rejectedMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-error-status-if-rejectedn/a: addresses the other side
streamable-http-server-json-or-sse-for-requestMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-json-or-sse-for-requestn/a: addresses the other side
streamable-http-client-supports-json-and-sseMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-supports-json-and-sse
streamable-http-sse-includes-responseSHOULDservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-sse-includes-responsen/a: addresses the other side
streamable-http-post-sse-may-carry-requestsMAYservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-post-sse-may-carry-requestsn/a: addresses the other side
streamable-http-sse-not-closed-before-responseSHOULD NOTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-sse-not-closed-before-responsen/a: addresses the other side
streamable-http-server-terminates-sse-after-responseSHOULDservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-terminates-sse-after-responsen/a: addresses the other side
streamable-http-disconnect-not-cancelSHOULD NOTbothtested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-disconnect-not-canceln/a: catalogue marks it n/a
streamable-http-client-cancel-by-notificationSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-cancel-by-notification
streamable-http-server-may-resumeMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-may-getMAYclientn/a: addresses the other siden/a: optional feature mcpx does not implement
streamable-http-get-accept-sseMUSTclientn/a: addresses the other siden/a: no GET
streamable-http-get-sse-or-405MUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-get-sse-or-405n/a: addresses the other side
streamable-http-get-stream-unrelatedSHOULDservern/a: 405n/a: addresses the other side
streamable-http-get-no-responsesMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-get-close-any-timeMAYbothtested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-get-close-any-timetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-get-close-any-time
streamable-http-multiple-streamsMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-multiple-streams
streamable-http-no-broadcastMUST / MUST NOTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-no-broadcastn/a: addresses the other side
streamable-http-event-id-uniqueMUSTservern/a: no idsn/a: addresses the other side
streamable-http-client-resume-with-last-event-idSHOULDclientn/a: addresses the other sidetested: mcpclient.TestLegacyHTTPStreamResumption/2025-11-25/transport/client-resumes-closed-stream-with-last-event-id-after-retry@2025-03-26,2025-06-18,2025-11-25
streamable-http-server-no-cross-stream-replayMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-server-may-assign-sessionMAYservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-may-assign-sessionn/a: addresses the other side
streamable-http-session-id-secureSHOULDservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-session-id-securen/a: addresses the other side
streamable-http-session-id-visible-asciiMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-session-id-visible-asciin/a: addresses the other side
streamable-http-client-echoes-sessionMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-echoes-session
streamable-http-server-400-missing-sessionSHOULDservern/a: mcpx does not require one (stateless fallbackn/a: addresses the other side
streamable-http-server-404-terminated-sessionMUSTservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-404-terminated-sessionn/a: addresses the other side
streamable-http-client-reinit-on-404MUSTclientn/a: addresses the other sidetested: mcpclient.TestLegacySession404Recovery/2025-11-25/transport/client-reinitializes-on-session-404-and-retries-once@2025-03-26,2025-06-18,2025-11-25
streamable-http-client-delete-sessionSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-03-26/transport-streamable-http/streamable-http-client-delete-session
streamable-http-server-may-405-deleteMAYservertested: conformance.TestTransportServer/2025-03-26/transport-streamable-http/streamable-http-server-may-405-deleten/a: addresses the other side

versioning

requirementlevelsidemcpx as servermcpx as client
lifecycle-client-sends-supported-versionMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/versioning/lifecycle-client-sends-supported-version
lifecycle-client-sends-latest-versionSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/versioning/lifecycle-client-sends-latest-version
lifecycle-client-may-support-olderMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/versioning/lifecycle-client-may-support-older
lifecycle-server-echoes-supported-versionMUSTservertested: conformance.TestLifecycleServer/2025-03-26/versioning/lifecycle-server-echoes-supported-versionn/a: addresses the other side
lifecycle-server-counteroffers-versionMUSTservertested: conformance.TestLifecycleServer/2025-03-26/versioning/lifecycle-server-counteroffers-versionn/a: addresses the other side
lifecycle-server-counteroffers-latestSHOULDservertested: conformance.TestLifecycleServer/2025-03-26/versioning/lifecycle-server-counteroffers-latestn/a: addresses the other side
lifecycle-client-disconnects-on-unsupported-versionSHOULD (prose) / MUST (schema)clientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-03-26/versioning/lifecycle-client-disconnects-on-unsupported-version

2025-06-18

(security; not in area list)

requirementlevelsidemcpx as servermcpx as client
security-implementors-guidelinesSHOULDbothtested: conformance.TestMessagesServer/2025-06-18/security/security-implementors-guidelinesn/a: catalogue marks it n/a

authorization

requirementlevelsidemcpx as servermcpx as client
authorization-http-should-conform-stdio-should-notSHOULD / SHOULD NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authorization-custom-auth-mayMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-optionalOPTIONALbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-http-should-conformSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-stdio-use-environmentSHOULD NOTbothgap not implemented: #1975gap not implemented: #1950
authz-alt-transport-best-practiceMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-as-implements-oauth21MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-dcr-shouldSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-bearer-headerMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-token-every-requestMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-no-token-in-queryMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-server-validates-tokenMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-validates-audienceMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-client-sends-only-own-as-tokensMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-accept-only-own-tokensMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-no-token-passthroughMUST NOTservergap not implemented: #1975n/a: addresses the other side
authz-error-status-codesMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-prm-rfc9728MUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-prm-lists-authorization-serversMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-as-metadata-rfc8414MUSTbothn/a: catalogue marks it n/an/a: optional feature mcpx does not implement
authz-401-www-authenticateMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-client-parses-www-authenticateMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-client-rfc8414-discoveryMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-resource-indicatorMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-canonical-uri-guidanceSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-secure-token-storageMUSTbothn/a: catalogue marks it n/agap not implemented: #1950
authz-as-short-lived-and-rotateSHOULD / MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-https-and-redirect-urisMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-pkceMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-open-redirectionMUST / SHOULDclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-proxy-consent-per-clientMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-follow-security-considerationsMUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement

cancellation

requirementlevelsidemcpx as servermcpx as client
cancellation-ref-same-direction-in-progressMUSTbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-ref-same-direction-in-progresstested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-ref-same-direction-in-progress
cancellation-client-must-not-cancel-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-client-must-not-cancel-initialize
cancellation-receiver-should-stop-free-no-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-receiver-should-stop-free-no-responsetested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-receiver-should-stop-free-no-response
cancellation-receiver-may-ignoreMAYbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-receiver-may-ignoretested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-receiver-may-ignore
cancellation-sender-ignore-late-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-sender-ignore-late-responsetested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-sender-ignore-late-response
cancellation-handle-racesMUSTbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-handle-racestested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-handle-races
cancellation-log-reasonsSHOULDbothgap #77: a cancellation reason reaches Server.OnCancel, which nothing outside tests sets; it is never loggedtested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-log-reasons
cancellation-ui-indicateSHOULDbothn/a: no UIn/a: no UI
cancellation-ignore-invalidSHOULDbothtested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-ignore-invalidtested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-ignore-invalid
cancellation-processing-should-ceaseSHOULDboth (receiver)tested: conformance.TestUtilitiesServer/2025-06-18/cancellation/cancellation-processing-should-ceasetested: conformance.TestUtilitiesClient/2025-06-18/cancellation/cancellation-processing-should-cease

completion

requirementlevelsidemcpx as servermcpx as client
completion-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-06-18/completion/completion-declare-capabilityn/a: addresses the other side
completion-max-100descr. + schemaservertested: conformance.TestUtilitiesServer/2025-06-18/completion/completion-max-100n/a: addresses the other side
completion-server-shouldSHOULDservertested: daemon.TestHandleCompleteRateLimitHotChangeAndZeroDisables@all
daemon.TestHandleCompleteRateLimitRefusesBeforePool@all
daemon.TestHandleCompleteServerWindowBindsAcrossCallers@all
daemon.TestLocalCompletionCapAfterRanking@all
daemon.TestLocalCompletionTiersPrompts@all
daemon.TestLocalCompletionTiersResources@all
n/a: addresses the other side
completion-client-shouldSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/completion/completion-client-should
completion-securityMUSTbothgap #1968: partial: completion inputs are validated and completion/complete is rate limited per caller (completion.perMinute) and per server (completion.serverPerMinute) since #2387, but there is no per-caller access control for sensitive suggestions and no completion-specific information-disclosure control; waiting on principals #1968 / permissive-auth #1972n/a: catalogue marks it n/a
completion-errorsSHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/completion/completion-errorsn/a: addresses the other side
completion-context-argumentsshould (lowercase)clientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/completion/completion-context-arguments

elicitation

requirementlevelsidemcpx as servermcpx as client
elicitation-server-no-sensitive-infoMUST NOTservertested: conformance.TestClientFeaturesServer/2025-06-18/elicitation/elicitation-server-no-sensitive-infon/a: addresses the other side
elicitation-app-show-requesting-serverSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/elicitation/elicitation-app-show-requesting-server
elicitation-app-review-modify-responsesSHOULDclientn/a: addresses the other sidetested: cli.TestRenderAnswerReviewMasksSensitiveFields@2025-06-18
cli.TestRenderQuestionFormShowsSchemaDefaults@2025-06-18
elicitation-app-decline-cancel-optionsSHOULDclientn/a: addresses the other sidetested: elicit.TestAnExpiredQuestionBecomesCancelNotDecline@2025-06-18,2025-11-25,2026-07-28
elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/elicitation/elicitation-client-declare-capability-at-initialize
elicitation-form-schema-flat-primitivesMUST (schema-structural)servertested: conformance.TestClientFeaturesServer/2025-06-18/elicitation/elicitation-form-schema-flat-primitivesn/a: addresses the other side
elicitation-client-user-approval-controlsSHOULDclientn/a: addresses the other sidetested: elicit.TestRoutingSendsCredentialsToAHumanAndTheRestToTheAgent@2025-06-18,2025-11-25,2026-07-28
elicitation-client-allow-decline-any-timeSHOULDclientn/a: addresses the other sidetested: elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/elicitation/elicitation-client-rate-limit
elicitation-client-clear-what-and-whySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/elicitation/elicitation-client-clear-what-and-why
elicitation-both-validate-against-schemaSHOULDbothtested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema@2025-06-18tested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema@2025-06-18

errors

requirementlevelsidemcpx as servermcpx as client
errors-error-has-code-and-messageMUSTbothtested: conformance.TestMessagesServer/2025-06-18/errors/errors-error-has-code-and-messagetested: conformance.TestMessagesClient/2025-06-18/errors/errors-error-has-code-and-message
errors-codes-integersMUSTbothtested: conformance.TestMessagesServer/2025-06-18/errors/errors-codes-integerstested: conformance.TestMessagesClient/2025-06-18/errors/errors-codes-integers
errors-message-concise-single-sentenceSHOULDbothtested: conformance.TestMessagesServer/2025-06-18/errors/errors-message-concise-single-sentencen/a: sends no errors except to server requests

lifecycle

requirementlevelsidemcpx as servermcpx as client
lifecycle-implementations-support-base-and-lifecycleMUSTbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-implementations-support-base-and-lifecycletested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-implementations-support-base-and-lifecycle
lifecycle-initialization-first-interactionMUSTbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-initialization-first-interactiontested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-initialization-first-interaction
lifecycle-client-sends-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-client-sends-initialize
lifecycle-server-responds-caps-and-infoMUSTservertested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-server-responds-caps-and-infon/a: addresses the other side
lifecycle-client-sends-initialized-after-initMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-client-sends-initialized-after-init
lifecycle-client-no-requests-before-init-responseSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-client-no-requests-before-init-response
lifecycle-server-no-requests-before-initializedSHOULD NOTservertested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-server-no-requests-before-initializedn/a: addresses the other side
lifecycle-capabilities-establish-session-features(definitional)bothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-capabilities-establish-session-featurestested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-capabilities-establish-session-features
lifecycle-respect-negotiated-version-and-capabilities-mustMUSTbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-musttested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-must
lifecycle-stdio-client-shutdown-sequenceSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-stdio-client-shutdown-sequence
lifecycle-stdio-server-may-exitMAYservertested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-stdio-server-may-exitn/a: addresses the other side
lifecycle-http-shutdown-closing-connection(definitional)bothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-http-shutdown-closing-connectiontested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-http-shutdown-closing-connection
lifecycle-prepared-for-error-casesSHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-prepared-for-error-casestested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-prepared-for-error-cases
lifecycle-timeouts-establishSHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-timeouts-establishtested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-timeouts-establish
lifecycle-timeouts-cancel-on-expirySHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-timeouts-cancel-on-expirytested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-timeouts-cancel-on-expiry
lifecycle-timeouts-per-request-configurableSHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-timeouts-per-request-configurabletested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-timeouts-per-request-configurable
lifecycle-timeouts-may-reset-on-progressMAYbothn/a: catalogue marks it n/atested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-timeouts-may-reset-on-progress
lifecycle-timeouts-max-regardless-of-progressSHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-timeouts-max-regardless-of-progresstested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-timeouts-max-regardless-of-progress
lifecycle-cancel-not-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-cancel-not-initialize
lifecycle-instructions-may-go-in-system-promptMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-instructions-may-go-in-system-prompt
lifecycle-capability-sets-open(definitional)bothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-capability-sets-opentested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-capability-sets-open
lifecycle-implementation-name-version-requiredREQUIRED (schema field)bothtested: conformance.TestLifecycleServer/2025-06-18/lifecycle/lifecycle-implementation-name-version-requiredtested: conformance.TestLifecycleClient/2025-06-18/lifecycle/lifecycle-implementation-name-version-required

logging

requirementlevelsidemcpx as servermcpx as client
logging-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-declare-capabilityn/a: addresses the other side
logging-client-may-setlevelMAYclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/logging/logging-client-may-setlevel
logging-setlevel-at-or-aboveshould (schema)servertested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-setlevel-at-or-aboven/a: addresses the other side
logging-unset-server-choosesMAYservertested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-unset-server-choosesn/a: addresses the other side
logging-errors-setlevelSHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-errors-setleveln/a: addresses the other side
logging-server-hygieneSHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-server-hygienen/a: addresses the other side
logging-no-secrets-piiMUST NOTboth (emitter)tested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-no-secrets-piitested: conformance.TestUtilitiesClient/2025-06-18/logging/logging-no-secrets-pii
logging-impl-validate-controlSHOULDbothtested: conformance.TestUtilitiesServer/2025-06-18/logging/logging-impl-validate-controltested: conformance.TestUtilitiesClient/2025-06-18/logging/logging-impl-validate-control

messages

requirementlevelsidemcpx as servermcpx as client
messages-all-messages-follow-jsonrpc-2MUSTbothtested: conformance.TestJSONRPCFramesEveryRevision/2025-06-18/messages/all-messages-follow-jsonrpc-2-server-http
conformance.TestJSONRPCFramesEveryRevision/2025-06-18/messages/all-messages-follow-jsonrpc-2-server-stdio
conformance.TestMessagesServer/2025-06-18/messages/messages-all-messages-follow-jsonrpc-2
tested: conformance.TestJSONRPCFramesEveryRevision/2025-06-18/messages/all-messages-follow-jsonrpc-2-client
messages-other-components-mayMAYbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-other-components-maytested: conformance.TestMessagesClient/2025-06-18/messages/messages-other-components-may
messages-request-id-string-or-integerMUSTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-request-id-string-or-integertested: conformance.TestMessagesClient/2025-06-18/messages/messages-request-id-string-or-integer
messages-request-id-not-nullMUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-request-id-not-nulltested: conformance.TestMessagesClient/2025-06-18/messages/messages-request-id-not-null
messages-request-id-unique-per-sessionMUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-request-id-unique-per-sessiontested: conformance.TestMessagesClient/2025-06-18/messages/messages-request-id-unique-per-session
messages-response-same-idMUSTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-response-same-idtested: conformance.TestMessagesClient/2025-06-18/messages/messages-response-same-id
messages-response-result-xor-errorMUST / MUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-response-result-xor-errortested: conformance.TestMessagesClient/2025-06-18/messages/messages-response-result-xor-error
messages-result-any-objectMAYbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-result-any-objecttested: conformance.TestMessagesClient/2025-06-18/messages/messages-result-any-object
messages-notification-no-responseMUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-notification-no-responsetested: conformance.TestMessagesClient/2025-06-18/messages/messages-notification-no-response
messages-notification-no-idMUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/messages/messages-notification-no-idtested: conformance.TestMessagesClient/2025-06-18/messages/messages-notification-no-id
transport-jsonrpc-utf8MUSTbothtested: conformance.TestMessagesServer/2025-06-18/messages/transport-jsonrpc-utf8tested: conformance.TestMessagesClient/2025-06-18/messages/transport-jsonrpc-utf8

meta

requirementlevelsidemcpx as servermcpx as client
meta-no-assumptions-on-reserved-keysMUST NOTbothtested: conformance.TestMessagesServer/2025-06-18/meta/meta-no-assumptions-on-reserved-keystested: conformance.TestMessagesClient/2025-06-18/meta/meta-no-assumptions-on-reserved-keys
meta-prefix-label-formatMUSTbothtested: conformance.TestMessagesServer/2025-06-18/meta/meta-prefix-label-formattested: conformance.TestMessagesClient/2025-06-18/meta/meta-prefix-label-format
meta-reserved-prefix-2025-06-18(reservation)bothn/a: catalogue marks it n/an/a: catalogue marks it n/a
meta-name-formatMUST / MAYbothtested: conformance.TestMessagesServer/2025-06-18/meta/meta-name-formattested: conformance.TestMessagesClient/2025-06-18/meta/meta-name-format
meta-schema-may-reserve-names(reservation)bothtested: conformance.TestMessagesServer/2025-06-18/meta/meta-schema-may-reserve-namestested: conformance.TestMessagesClient/2025-06-18/meta/meta-schema-may-reserve-names
meta-progress-token-receiver-not-obligated(definitional)bothtested: conformance.TestMessagesServer/2025-06-18/meta/meta-progress-token-receiver-not-obligatedtested: conformance.TestMessagesClient/2025-06-18/meta/meta-progress-token-receiver-not-obligated

pagination

requirementlevelsidemcpx as servermcpx as client
pagination-no-fixed-page-sizeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/pagination/pagination-no-fixed-page-size
pagination-stable-cursorsSHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/pagination/pagination-stable-cursorsn/a: addresses the other side
pagination-invalid-cursor-gracefulSHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/pagination/pagination-invalid-cursor-gracefuln/a: addresses the other side
pagination-missing-nextcursor-endSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/pagination/pagination-missing-nextcursor-end
pagination-support-both-flowsSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/pagination/pagination-support-both-flows
pagination-cursor-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/pagination/pagination-cursor-opaque
pagination-no-persist-across-sessionsMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-06-18/pagination/pagination-no-persist-across-sessions
pagination-invalid-cursor-32602SHOULDservertested: conformance.TestUtilitiesServer/2025-06-18/pagination/pagination-invalid-cursor-32602n/a: addresses the other side

ping

requirementlevelsidemcpx as servermcpx as client
ping-receiver-responds-promptly-emptyMUSTbothtested: conformance.TestLifecycleServer/2025-06-18/ping/ping-receiver-responds-promptly-emptytested: conformance.TestLifecycleClient/2025-06-18/ping/ping-receiver-responds-promptly-empty
ping-either-party-may-initiate(definitional)bothtested: conformance.TestLifecycleServer/2025-06-18/ping/ping-either-party-may-initiatetested: conformance.TestLifecycleClient/2025-06-18/ping/ping-either-party-may-initiate
ping-sender-may-consider-staleMAYbothn/a: catalogue marks it n/an/a: does not ping
ping-periodic-pingsSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
ping-frequency-configurableSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-timeouts-appropriateSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-avoid-excessiveSHOULDbothtested: conformance.TestLifecycleServer/2025-06-18/ping/ping-avoid-excessivetested: conformance.TestLifecycleClient/2025-06-18/ping/ping-avoid-excessive
ping-timeout-is-connection-failureSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-multiple-failures-may-resetMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-log-failuresSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-schema-receiver-must-respondmust (lowercase)bothtested: conformance.TestLifecycleServer/2025-06-18/ping/ping-schema-receiver-must-respondtested: conformance.TestLifecycleClient/2025-06-18/ping/ping-schema-receiver-must-respond

progress

requirementlevelsidemcpx as servermcpx as client
progress-token-string-or-intMUSTboth (requester)n/a: as a server mcpx never requests progress; a host’s token is relayed back verbatimtested: conformance.TestUtilitiesClient/2025-06-18/progress/progress-token-string-or-int
progress-token-unique-senderMUSTbothtested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-token-unique-sendertested: conformance.TestUtilitiesClient/2025-06-18/progress/progress-token-unique-sender
progress-receiver-may-sendMAYbothn/a: optional feature mcpx does not implementn/a: never receives requests with tokens
progress-must-increaseMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-must-increasen/a: catalogue marks it n/a
progress-message-human-readableSHOULDboth (notifier)tested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-message-human-readablen/a: catalogue marks it n/a
progress-only-active-tokensMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-only-active-tokensn/a: catalogue marks it n/a
progress-receiver-may-skipMAYbothtested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-receiver-may-skiptested: conformance.TestUtilitiesClient/2025-06-18/progress/progress-receiver-may-skip
progress-track-tokensSHOULDbothn/a: catalogue marks it n/atested: conformance.TestUtilitiesClient/2025-06-18/progress/progress-track-tokens
progress-rate-limitSHOULDbothtested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-rate-limittested: conformance.TestUtilitiesClient/2025-06-18/progress/progress-rate-limit
progress-stop-after-completionMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-06-18/progress/progress-stop-after-completionn/a: catalogue marks it n/a

prompts

requirementlevelsidemcpx as servermcpx as client
prompts-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-declare-capabilityn/a: addresses the other side
prompts-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-list-changed-notifyn/a: addresses the other side
prompts-image-base64-mimeMUSTservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-image-base64-mimen/a: addresses the other side
prompts-audio-base64-mimeMUST (not bolded)servertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-audio-base64-mimen/a: addresses the other side
prompts-embedded-must-includeMUSTservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-embedded-must-includen/a: addresses the other side
prompts-validate-argsSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-validate-argsn/a: addresses the other side
prompts-respect-capability-negotiationSHOULDbothtested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-respect-capability-negotiationtested: conformance.TestFeaturesClient/2025-06-18/prompts/prompts-respect-capability-negotiation
prompts-validate-ioMUSTbothtested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-validate-io; mcpclient.TestValidatePromptResultcovered

prompts / errors

requirementlevelsidemcpx as servermcpx as client
prompts-errors-32602-32603SHOULDservertested: conformance.TestFeaturesServer/2025-06-18/prompts/prompts-errors-32602-32603n/a: addresses the other side

prompts / pagination

requirementlevelsidemcpx as servermcpx as client
prompts-client-paginateSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-06-18/prompts/prompts-client-paginate

resources

requirementlevelsidemcpx as servermcpx as client
resources-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-declare-capabilityn/a: addresses the other side
resources-subscribe-cap-meaning-legacy(definition)servertested: e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/http-subscribe-delivers-upstream-updates-on-the-get-stream@2025-03-26,2025-06-18,2025-11-25
e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/stdio-subscribe-delivers-upstream-updates-under-the-mcpx-uri@2024-11-05,2025-03-26,2025-06-18,2025-11-25
n/a: addresses the other side
resources-cap-features-independentMAYservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-cap-features-independentn/a: addresses the other side
resources-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-list-changed-notifyn/a: addresses the other side
resources-updated-may-be-subresource(note, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-06-18/resources/resources-updated-may-be-subresource
resources-https-only-if-client-fetchableSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-https-only-if-client-fetchablen/a: addresses the other side
resources-https-else-other-schemeSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-https-else-other-schemen/a: addresses the other side
resources-file-xdg-mime-mayMAYservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-file-xdg-mime-mayn/a: addresses the other side
resources-custom-scheme-rfc3986MUSTservertested: cli.TestMCPXResourceURIs/2025-06-18/resources/resources-custom-scheme-rfc3986n/a: addresses the other side
resources-sec-validate-urisMUSTservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-sec-validate-urisn/a: addresses the other side
resources-sec-access-controlSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-binary-encodedMUSTservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-sec-binary-encodedn/a: addresses the other side
resources-sec-permissionsSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-annotations-defs(definition)bothtested: conformance.TestFeaturesServer/2025-06-18/resources/resources-annotations-defsgap #207: mcpclient.Resource has no annotations field; they are dropped on parse

resources / errors

requirementlevelsidemcpx as servermcpx as client
resources-not-found-32002SHOULDservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-not-found-32002n/a: addresses the other side
resources-internal-32603SHOULDservertested: conformance.TestFeaturesServer/2025-06-18/resources/resources-internal-32603n/a: addresses the other side

resources / subscriptions

requirementlevelsidemcpx as servermcpx as client
resources-subscribe-rpc(optional)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-06-18/resources/resources-subscribe-rpc
resources-unsubscribe-follows-subscribeshould (lowercase, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-06-18/resources/resources-unsubscribe-follows-subscribe

roots

requirementlevelsidemcpx as servermcpx as client
roots-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/roots/roots-client-declare-capability-at-initialize
roots-client-listchanged-must-notifyMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/roots/roots-client-listchanged-must-notify
roots-uri-must-be-file-schemeMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-only-expose-permitted-rootsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-uris-path-traversalMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-implement-access-controlsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-accessibilityMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-handle-unavailable-rootsSHOULDservern/a: mcpx does not consume rootsn/a: addresses the other side
roots-server-respect-boundariesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-validate-paths-against-rootsSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-prompt-consent-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-provide-root-management-uiSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-accessibility-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-root-changesSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-check-capability-before-useSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-handle-list-changesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-cache-root-informationSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-return-jsonrpc-errorsSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/roots/roots-client-return-jsonrpc-errors

sampling

requirementlevelsidemcpx as servermcpx as client
sampling-human-in-loop-can-denySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/sampling/sampling-human-in-loop-can-deny
sampling-app-review-uiSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-view-edit-promptsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-review-responsesSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/sampling/sampling-client-declare-capability-at-initialize
sampling-client-may-sample-fewer-tokensMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-model-preferencesMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-modify-system-promptMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-includecontextMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-evaluated-in-orderMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-over-prioritiesSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-name-substringSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-may-map-providerMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-stopreason-custom-valuesMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/sampling/sampling-stopreason-custom-values
sampling-client-errors-user-rejectedSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/sampling/sampling-client-errors-user-rejected
sampling-client-user-approval-controlsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-both-validate-message-contentSHOULDbothtested: conformance.TestSamplingValidation/2025-06-18/sampling/sampling-both-validate-message-contenttested: conformance.TestSamplingValidation/2025-06-18/sampling/sampling-both-validate-message-content
sampling-client-respect-hintsSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-06-18/sampling/sampling-client-rate-limit
sampling-both-handle-sensitive-dataMUSTbothtested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
tested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28

subscriptions

requirementlevelsidemcpx as servermcpx as client
subscriptions-list-changed-should-notifySHOULDservertested: conformance.TestStatefulServer/2025-06-18/subscriptions/subscriptions-list-changed-should-notifyn/a: addresses the other side
subscriptions-resources-updated-only-if-subscribedshould (schema)servertested: conformance.TestStatefulServer/2025-06-18/subscriptions/subscriptions-resources-updated-only-if-subscribedn/a: addresses the other side

tools

requirementlevelsidemcpx as servermcpx as client
tools-human-in-loop-denySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-ui-expose-indicate-confirmSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-declare-capabilityn/a: addresses the other side
tools-list-changed-means-emit(definition)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-list-changed-means-emitn/a: addresses the other side
tools-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-list-changed-notifyn/a: addresses the other side
tools-annotations-untrustedMUSTclientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-annotations-hints-no-decisionsshould (lowercase, schema)clientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-result-iserror-for-tool-errorsSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-result-iserror-for-tool-errorsn/a: addresses the other side
tools-result-lookup-errors-protocolshould (lowercase)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-result-lookup-errors-protocoln/a: addresses the other side
tools-error-unknown-tool-protocol(classification)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-error-unknown-tool-protocoln/a: addresses the other side
tools-error-invalid-args-protocol(classification)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-error-invalid-args-protocoln/a: addresses the other side
tools-embedded-resource-mayMAYservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-embedded-resource-mayn/a: addresses the other side
tools-embedded-implies-resources-capSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-embedded-implies-resources-capn/a: addresses the other side
tools-resource-link-mayMAYservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-resource-link-mayn/a: addresses the other side
tools-resource-link-may-not-listed(note)bothtested: conformance.TestFeaturesServer/2025-06-18/tools/tools-resource-link-may-not-listedtested: conformance.TestFeaturesClient/2025-06-18/tools/tools-resource-link-may-not-listed
tools-structured-also-textSHOULDservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-structured-also-textn/a: addresses the other side
tools-structured-object-only(type, schema)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-structured-object-onlyn/a: addresses the other side
tools-output-schema-conformMUSTservertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-output-schema-conformn/a: addresses the other side
tools-output-schema-client-validateSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-output-schema-object-root(type, schema)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-output-schema-object-rootn/a: addresses the other side
tools-display-name-precedence(rule)clientn/a: addresses the other sidegap #207: tool title and annotations.title are carried but nothing that displays a tool uses them
tools-server-sec-validate-inputsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-client-secSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement

tools / json-schema

requirementlevelsidemcpx as servermcpx as client
tools-inputschema-type-object-rootREQUIRED (schema)servertested: conformance.TestFeaturesServer/2025-06-18/tools/tools-inputschema-type-object-rootn/a: addresses the other side

transport-http-sse

requirementlevelsidemcpx as servermcpx as client
http-sse-server-backcompat-host-bothshould (lowercase)servern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-client-backcompat-probe-any-4xxshould (lowercase)clientn/a: addresses the other sidetested: pool.TestHTTPSSEFallback/2025-11-25/transport-http-sse/client-falls-back-to-get-endpoint-and-caches-it@2025-03-26,2025-06-18

transport-stdio

requirementlevelsidemcpx as servermcpx as client
transport-client-should-support-stdioSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-stdio/transport-client-should-support-stdio
transport-custom-preserve-jsonrpc-and-lifecycleMUSTbothn/a: mcpx serves MCP only over stdio and Streamable HTTP; its /v1 REST surface is not an MCP transportn/a: catalogue marks it n/a
transport-custom-document-patternsSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
stdio-no-embedded-newlinesMUST NOTbothtested: conformance.TestTransportServer/2025-06-18/transport-stdio/stdio-no-embedded-newlinestested: conformance.TestTransportClient/2025-06-18/transport-stdio/stdio-no-embedded-newlines
stdio-message-is-singleMUST (implied)bothtested: conformance.TestTransportServer/2025-06-18/transport-stdio/stdio-message-is-singletested: conformance.TestTransportClient/2025-06-18/transport-stdio/stdio-message-is-single
stdio-server-may-log-to-stderrMAYservertested: conformance.TestTransportServer/2025-06-18/transport-stdio/stdio-server-may-log-to-stderrn/a: addresses the other side
stdio-client-may-capture-stderrMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-stdio/stdio-client-may-capture-stderr
stdio-server-stdout-only-mcpMUST NOTservertested: conformance.TestTransportServer/2025-06-18/transport-stdio/stdio-server-stdout-only-mcpn/a: addresses the other side
stdio-client-stdin-only-mcpMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-stdio/stdio-client-stdin-only-mcp

transport-streamable-http

requirementlevelsidemcpx as servermcpx as client
streamable-http-server-single-endpoint-post-getMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-single-endpoint-post-getn/a: addresses the other side
streamable-http-server-validate-originMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-validate-originn/a: addresses the other side
streamable-http-server-bind-localhostSHOULDservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-bind-localhostn/a: addresses the other side
streamable-http-server-authenticateSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-post-every-messageMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-post-every-message
streamable-http-client-accept-bothMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-accept-both
streamable-http-post-body-singleMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-post-body-single
streamable-http-server-202-for-non-requestMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-202-for-non-requestn/a: addresses the other side
streamable-http-server-error-status-if-rejectedMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-error-status-if-rejectedn/a: addresses the other side
streamable-http-server-json-or-sse-for-requestMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-json-or-sse-for-requestn/a: addresses the other side
streamable-http-client-supports-json-and-sseMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-supports-json-and-sse
streamable-http-sse-includes-responseSHOULDservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-sse-includes-responsen/a: addresses the other side
streamable-http-post-sse-may-carry-requestsMAYservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-post-sse-may-carry-requestsn/a: addresses the other side
streamable-http-sse-not-closed-before-responseSHOULD NOTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-sse-not-closed-before-responsen/a: addresses the other side
streamable-http-server-terminates-sse-after-responseSHOULDservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-terminates-sse-after-responsen/a: addresses the other side
streamable-http-disconnect-not-cancelSHOULD NOTbothtested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-disconnect-not-canceln/a: catalogue marks it n/a
streamable-http-client-cancel-by-notificationSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-cancel-by-notification
streamable-http-server-may-resumeMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-may-getMAYclientn/a: addresses the other siden/a: optional feature mcpx does not implement
streamable-http-get-accept-sseMUSTclientn/a: addresses the other siden/a: no GET
streamable-http-get-sse-or-405MUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-get-sse-or-405n/a: addresses the other side
streamable-http-get-stream-unrelatedSHOULDservern/a: 405n/a: addresses the other side
streamable-http-get-no-responsesMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-get-close-any-timeMAYbothtested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-get-close-any-timetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-get-close-any-time
streamable-http-multiple-streamsMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-multiple-streams
streamable-http-no-broadcastMUST / MUST NOTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-no-broadcastn/a: addresses the other side
streamable-http-event-id-uniqueMUSTservern/a: no idsn/a: addresses the other side
streamable-http-client-resume-with-last-event-idSHOULDclientn/a: addresses the other sidetested: mcpclient.TestLegacyHTTPStreamResumption/2025-11-25/transport/client-resumes-closed-stream-with-last-event-id-after-retry@2025-03-26,2025-06-18,2025-11-25
streamable-http-server-no-cross-stream-replayMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-server-may-assign-sessionMAYservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-may-assign-sessionn/a: addresses the other side
streamable-http-session-id-secureSHOULDservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-session-id-securen/a: addresses the other side
streamable-http-session-id-visible-asciiMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-session-id-visible-asciin/a: addresses the other side
streamable-http-client-echoes-sessionMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-echoes-session
streamable-http-server-400-missing-sessionSHOULDservern/a: mcpx does not require one (stateless fallbackn/a: addresses the other side
streamable-http-server-404-terminated-sessionMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-404-terminated-sessionn/a: addresses the other side
streamable-http-client-reinit-on-404MUSTclientn/a: addresses the other sidetested: mcpclient.TestLegacySession404Recovery/2025-11-25/transport/client-reinitializes-on-session-404-and-retries-once@2025-03-26,2025-06-18,2025-11-25
streamable-http-client-delete-sessionSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-client-delete-session
streamable-http-server-may-405-deleteMAYservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-may-405-deleten/a: addresses the other side
streamable-http-protocol-version-header-is-negotiatedSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-06-18/transport-streamable-http/streamable-http-protocol-version-header-is-negotiated
streamable-http-server-assumes-2025-03-26SHOULDservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-assumes-2025-03-26n/a: addresses the other side
streamable-http-server-400-unsupported-version-headerMUSTservertested: conformance.TestTransportServer/2025-06-18/transport-streamable-http/streamable-http-server-400-unsupported-version-headern/a: addresses the other side

versioning

requirementlevelsidemcpx as servermcpx as client
lifecycle-client-sends-supported-versionMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/versioning/lifecycle-client-sends-supported-version
lifecycle-client-sends-latest-versionSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/versioning/lifecycle-client-sends-latest-version
lifecycle-client-may-support-olderMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/versioning/lifecycle-client-may-support-older
lifecycle-server-echoes-supported-versionMUSTservertested: conformance.TestLifecycleServer/2025-06-18/versioning/lifecycle-server-echoes-supported-versionn/a: addresses the other side
lifecycle-server-counteroffers-versionMUSTservertested: conformance.TestLifecycleServer/2025-06-18/versioning/lifecycle-server-counteroffers-versionn/a: addresses the other side
lifecycle-server-counteroffers-latestSHOULDservertested: conformance.TestLifecycleServer/2025-06-18/versioning/lifecycle-server-counteroffers-latestn/a: addresses the other side
lifecycle-client-disconnects-on-unsupported-versionSHOULD (prose) / MUST (schema)clientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/versioning/lifecycle-client-disconnects-on-unsupported-version
lifecycle-http-protocol-version-headerMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-06-18/versioning/lifecycle-http-protocol-version-header

2025-11-25

(security; not in area list)

requirementlevelsidemcpx as servermcpx as client
security-implementors-guidelinesSHOULDbothtested: conformance.TestMessagesServer/2025-11-25/security/security-implementors-guidelinesn/a: catalogue marks it n/a

authorization

requirementlevelsidemcpx as servermcpx as client
authorization-http-should-conform-stdio-should-notSHOULD / SHOULD NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authorization-custom-auth-mayMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-optionalOPTIONALbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-http-should-conformSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-stdio-use-environmentSHOULD NOTbothgap not implemented: #1975gap not implemented: #1950
authz-alt-transport-best-practiceMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-as-implements-oauth21MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-dcr-may-deprecatedMAYclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-bearer-headerMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-token-every-requestMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-no-token-in-queryMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-server-validates-tokenMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-validates-audienceMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-client-sends-only-own-as-tokensMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-accept-only-own-tokensMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-no-token-passthroughMUST NOTservergap not implemented: #1975n/a: addresses the other side
authz-error-status-codesMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-prm-rfc9728MUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-prm-lists-authorization-serversMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-as-metadata-rfc8414-or-oidcMUSTbothn/a: catalogue marks it n/an/a: optional feature mcpx does not implement
authz-prm-discovery-header-or-well-knownMUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-client-parses-www-authenticateMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-client-as-discovery-orderMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-resource-indicatorMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-canonical-uri-guidanceSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-secure-token-storageMUSTbothn/a: catalogue marks it n/agap not implemented: #1950
authz-as-short-lived-and-rotateSHOULD / MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-https-and-redirect-urisMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-pkce-verify-s256MUSTclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-open-redirectionMUST / SHOULDclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-proxy-consent-per-clientMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-registration-prioritySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-cimdSHOULD / MUSTclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-preregistrationSHOULDclientn/a: addresses the other siden/a: no OAuth client
authz-scope-in-challengeSHOULD / MUST / MUST NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-scope-selection-orderSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-insufficient-scope-403SHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-step-upSHOULD / MAYclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-cimd-as-securityMUST / SHOULDauth-servern/a: addresses the other siden/a: addresses the other side
authz-follow-security-considerationsMUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement

cancellation

requirementlevelsidemcpx as servermcpx as client
cancellation-ref-same-direction-in-progressMUSTbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-ref-same-direction-in-progresstested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-ref-same-direction-in-progress
cancellation-client-must-not-cancel-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-client-must-not-cancel-initialize
cancellation-task-use-tasks-cancelMUSTbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-task-use-tasks-canceltested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-task-use-tasks-cancel
cancellation-requestid-required-non-task-forbidden-taskMUST / MUST NOTbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-requestid-required-non-task-forbidden-tasktested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-requestid-required-non-task-forbidden-task
cancellation-receiver-should-stop-free-no-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-receiver-should-stop-free-no-responsetested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-receiver-should-stop-free-no-response
cancellation-receiver-may-ignoreMAYbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-receiver-may-ignoretested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-receiver-may-ignore
cancellation-sender-ignore-late-responseSHOULDbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-sender-ignore-late-responsetested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-sender-ignore-late-response
cancellation-handle-racesMUSTbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-handle-racestested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-handle-races
cancellation-log-reasonsSHOULDbothgap #77: a cancellation reason reaches Server.OnCancel, which nothing outside tests sets; it is never loggedtested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-log-reasons
cancellation-ui-indicateSHOULDbothn/a: no UIn/a: no UI
cancellation-ignore-invalidSHOULDbothtested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-ignore-invalidtested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-ignore-invalid
cancellation-processing-should-ceaseSHOULDboth (receiver)tested: conformance.TestUtilitiesServer/2025-11-25/cancellation/cancellation-processing-should-ceasetested: conformance.TestUtilitiesClient/2025-11-25/cancellation/cancellation-processing-should-cease

completion

requirementlevelsidemcpx as servermcpx as client
completion-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-11-25/completion/completion-declare-capabilityn/a: addresses the other side
completion-max-100descr. + schemaservertested: conformance.TestUtilitiesServer/2025-11-25/completion/completion-max-100n/a: addresses the other side
completion-server-shouldSHOULDservertested: daemon.TestHandleCompleteRateLimitHotChangeAndZeroDisables@all
daemon.TestHandleCompleteRateLimitRefusesBeforePool@all
daemon.TestHandleCompleteServerWindowBindsAcrossCallers@all
daemon.TestLocalCompletionCapAfterRanking@all
daemon.TestLocalCompletionTiersPrompts@all
daemon.TestLocalCompletionTiersResources@all
n/a: addresses the other side
completion-client-shouldSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/completion/completion-client-should
completion-securityMUSTbothgap #1968: partial: completion inputs are validated and completion/complete is rate limited per caller (completion.perMinute) and per server (completion.serverPerMinute) since #2387, but there is no per-caller access control for sensitive suggestions and no completion-specific information-disclosure control; waiting on principals #1968 / permissive-auth #1972n/a: catalogue marks it n/a
completion-errorsSHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/completion/completion-errorsn/a: addresses the other side
completion-context-argumentsshould (lowercase)clientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/completion/completion-context-arguments

elicitation

requirementlevelsidemcpx as servermcpx as client
elicitation-server-no-sensitive-info-in-form-modeMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-no-sensitive-info-in-form-moden/a: addresses the other side
elicitation-server-sensitive-via-url-modeMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-sensitive-via-url-moden/a: addresses the other side
elicitation-client-show-requesting-serverMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-show-requesting-server
elicitation-client-form-review-modify-responsesMUSTclientn/a: addresses the other sidetested: cli.TestRenderAnswerReviewMasksSensitiveFields@2025-11-25,2026-07-28
cli.TestRenderQuestionFormShowsSchemaDefaults@2025-11-25,2026-07-28
elicitation-client-decline-cancel-optionsMUSTclientn/a: addresses the other sidetested: elicit.TestAnExpiredQuestionBecomesCancelNotDecline@2025-06-18,2025-11-25,2026-07-28
elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-url-show-domain-and-consentMUSTclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-declare-capability-at-initialize
elicitation-empty-capability-means-form-only(definition)bothtested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-empty-capability-means-form-onlytested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-empty-capability-means-form-only
elicitation-client-support-at-least-one-modeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-support-at-least-one-mode
elicitation-server-no-undeclared-modesMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-no-undeclared-modesn/a: addresses the other side
elicitation-request-must-include-mode-and-messageMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-request-must-include-mode-and-messagen/a: addresses the other side
elicitation-server-may-omit-mode-for-formMAYservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-may-omit-mode-for-formn/a: addresses the other side
elicitation-client-missing-mode-is-formMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-missing-mode-is-form
elicitation-form-request-shapeMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-form-request-shapen/a: addresses the other side
elicitation-form-schema-flat-primitivesMUST (schema-structural)servertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-form-schema-flat-primitivesn/a: addresses the other side
elicitation-client-prepopulate-defaultsSHOULDclientn/a: addresses the other sidetested: mcpclient.TestElicitationDeclarations/2025-11-25/elicitation/client-applies-schema-defaults
elicitation-url-request-shape-with-idMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-request-shape-with-idn/a: addresses the other side
elicitation-url-must-be-validMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-must-be-validn/a: addresses the other side
elicitation-client-elicitationid-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-elicitationid-opaque
elicitation-server-may-send-complete-notificationMAYservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-may-send-complete-notificationn/a: addresses the other side
elicitation-complete-only-to-initiating-clientMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-complete-only-to-initiating-clientn/a: addresses the other side
elicitation-complete-must-carry-idMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-complete-must-carry-idn/a: addresses the other side
elicitation-client-ignore-unknown-completeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-ignore-unknown-complete
elicitation-client-may-auto-retry-on-completeMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-may-auto-retry-on-complete
elicitation-client-manual-retry-cancel-controlsSHOULDclientn/a: addresses the other sidetested: e2e.TestElicitationsCanBeListedAndAnsweredFromTheCommandLine@2025-11-25,2026-07-28
elicitation-server-may-return-url-required-errorMAYservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-may-return-url-required-errorn/a: addresses the other side
elicitation-url-required-error-only-when-requiredMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-required-error-only-when-requiredn/a: addresses the other side
elicitation-url-required-error-lists-elicitationsMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-required-error-lists-elicitationsn/a: addresses the other side
elicitation-url-required-error-url-mode-with-idMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-required-error-url-mode-with-idn/a: addresses the other side
elicitation-server-must-return-32042MUSTservergap #214: a url question for a client that cannot take it stays with the broker; -32042 is never returnedn/a: addresses the other side
elicitation-client-32602-on-undeclared-modeMUSTclientn/a: addresses the other sidetested: mcpclient.TestElicitationDeclarations/2025-11-25/elicitation/undeclared-mode-is-32602
elicitation-server-state-bound-to-userMUSTservergap #257: mcpx has no authenticated user: state is bound to the request, the session id is whatever the caller sendsn/a: addresses the other side
elicitation-state-not-session-id-aloneMUST NOTservergap #257: state is bound to the request, not a user; there is no user to bind ton/a: addresses the other side
elicitation-state-storage-protectedMUSTservertested: elicit.TestOpenAtCreatesOwnerOnlyStore@2025-11-25,2026-07-28
elicit.TestOpenAtMigratesLegacyStore@2025-11-25,2026-07-28
n/a: addresses the other side
elicitation-remote-user-id-from-authorizationMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
elicitation-server-must-not-self-authorize-via-urlMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-must-not-self-authorize-via-urln/a: addresses the other side
elicitation-third-party-creds-not-via-clientMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-third-party-creds-not-via-clientn/a: addresses the other side
elicitation-no-token-passthroughMUST NOTservern/a: optional feature mcpx does not implementn/a: addresses the other side
elicitation-user-authorizes-server-directlyMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-user-authorizes-server-directlyn/a: addresses the other side
elicitation-server-not-transmit-url-creds-to-clientMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-not-transmit-url-creds-to-clientn/a: addresses the other side
elicitation-server-bind-to-client-and-userMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-server-bind-to-client-and-usern/a: addresses the other side
elicitation-client-user-approval-controlsSHOULDclientn/a: addresses the other sidetested: elicit.TestRoutingSendsCredentialsToAHumanAndTheRestToTheAgent@2025-06-18,2025-11-25,2026-07-28
elicitation-client-allow-decline-any-timeSHOULDclientn/a: addresses the other sidetested: elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-rate-limit
elicitation-client-clear-what-and-whySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-clear-what-and-why
elicitation-client-validate-responsesSHOULDclientn/a: addresses the other sidetested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema/2025-11-25/elicitation/wrong-typed-answer-is-32602-not-relayed
elicitation-server-validate-received-dataSHOULDservertested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema/2025-11-25/elicitation/wrong-typed-answer-is-32602-not-relayedn/a: addresses the other side
elicitation-url-no-sensitive-user-infoMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-no-sensitive-user-infon/a: addresses the other side
elicitation-url-not-pre-authenticatedMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-not-pre-authenticatedn/a: addresses the other side
elicitation-no-clickable-urls-in-formSHOULD NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-no-clickable-urls-in-formn/a: addresses the other side
elicitation-url-https-outside-devSHOULDservertested: conformance.TestClientFeaturesServer/2025-11-25/elicitation/elicitation-url-https-outside-devn/a: addresses the other side
elicitation-client-handle-urls-carefullyMUSTclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-no-url-prefetchMUST NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-no-url-prefetch
elicitation-client-no-open-without-consentMUST NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-no-open-without-consent
elicitation-client-show-full-urlMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-show-full-url
elicitation-client-open-url-securelyMUSTclientn/a: addresses the other sidetested: elicit.TestRoutingSendsCredentialsToAHumanAndTheRestToTheAgent@2025-06-18,2025-11-25,2026-07-28
elicitation-client-highlight-domainSHOULDclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
elicitation-client-warn-punycodeSHOULDclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-no-clickable-except-url-fieldSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/elicitation/elicitation-client-no-clickable-except-url-field
elicitation-server-no-trust-client-user-idMUST NOTservergap #257: mcpx has no authenticated user: state is bound to the request, the session id is whatever the caller sendsn/a: addresses the other side
elicitation-server-follow-best-practicesSHOULDservergap #255: requestState signing is sound and question storage is owner-only (0700/0600, #1676); there is no user identityn/a: addresses the other side
elicitation-url-verify-opening-userMUSTservern/a: mcpx issues no URL; the upstream that does sees mcpx’s identity, not the end user’sn/a: addresses the other side
elicitation-url-same-user-start-and-completeMUSTservern/a: see Implied: shared pooled upstreamn/a: addresses the other side
elicitation-url-identity-resilient-to-url-tamperingMUSTservern/a: catalogue marks it n/an/a: addresses the other side
elicitation-task-related-id-sharedMUSTservertested: conformance.TestStatefulServer/2025-11-25/elicitation/elicitation-task-related-id-sharedn/a: addresses the other side

errors

requirementlevelsidemcpx as servermcpx as client
messages-error-response-same-id-unless-unreadableMUSTbothtested: conformance.TestMessagesServer/2025-11-25/errors/messages-error-response-same-id-unless-unreadabletested: conformance.TestMessagesClient/2025-11-25/errors/messages-error-response-same-id-unless-unreadable
errors-error-has-code-and-messageMUSTbothtested: conformance.TestMessagesServer/2025-11-25/errors/errors-error-has-code-and-messagetested: conformance.TestMessagesClient/2025-11-25/errors/errors-error-has-code-and-message
errors-codes-integersMUSTbothtested: conformance.TestMessagesServer/2025-11-25/errors/errors-codes-integerstested: conformance.TestMessagesClient/2025-11-25/errors/errors-codes-integers
errors-message-concise-single-sentenceSHOULDbothtested: conformance.TestMessagesServer/2025-11-25/errors/errors-message-concise-single-sentencen/a: sends no errors except to server requests

json-schema

requirementlevelsidemcpx as servermcpx as client
json-schema-default-2020-12(definitional)bothtested: conformance.TestMessagesServer/2025-11-25/json-schema/json-schema-default-2020-12n/a: catalogue marks it n/a
json-schema-may-declare-dialectMAYbothtested: conformance.TestMessagesServer/2025-11-25/json-schema/json-schema-may-declare-dialecttested: conformance.TestMessagesClient/2025-11-25/json-schema/json-schema-may-declare-dialect
json-schema-support-2020-12MUSTbothtested: mcpclient.TestCallToolRejectsInvalidArgumentsBeforeTheTransport@alln/a: passes through
json-schema-validate-per-dialect-and-error-on-unsupportedMUSTbothtested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
tested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
json-schema-document-dialectsSHOULDbothtested: schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
tested: schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
json-schema-recommend-2020-12RECOMMENDEDbothtested: conformance.TestMessagesServer/2025-11-25/json-schema/json-schema-recommend-2020-12n/a: catalogue marks it n/a
json-schema-schemas-validMUSTbothtested: conformance.TestMessagesServer/2025-11-25/json-schema/json-schema-schemas-validn/a: catalogue marks it n/a
tools-schema-default-2020-12(definition)bothtested: conformance.TestMessagesServer/2025-11-25/json-schema/tools-schema-default-2020-12tested: conformance.TestMessagesClient/2025-11-25/json-schema/tools-schema-default-2020-12

lifecycle

requirementlevelsidemcpx as servermcpx as client
lifecycle-implementations-support-base-and-lifecycleMUSTbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-implementations-support-base-and-lifecycletested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-implementations-support-base-and-lifecycle
lifecycle-initialization-first-interactionMUSTbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-initialization-first-interactiontested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-initialization-first-interaction
lifecycle-client-sends-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-client-sends-initialize
lifecycle-server-responds-caps-and-infoMUSTservertested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-server-responds-caps-and-infon/a: addresses the other side
lifecycle-client-sends-initialized-after-initMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-client-sends-initialized-after-init
lifecycle-client-no-requests-before-init-responseSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-client-no-requests-before-init-response
lifecycle-server-no-requests-before-initializedSHOULD NOTservertested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-server-no-requests-before-initializedn/a: addresses the other side
lifecycle-capabilities-establish-session-features(definitional)bothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-capabilities-establish-session-featurestested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-capabilities-establish-session-features
lifecycle-respect-negotiated-version-and-capabilities-mustMUSTbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-musttested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-respect-negotiated-version-and-capabilities-must
lifecycle-stdio-client-shutdown-sequenceSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-stdio-client-shutdown-sequence
lifecycle-stdio-server-may-exitMAYservertested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-stdio-server-may-exitn/a: addresses the other side
lifecycle-http-shutdown-closing-connection(definitional)bothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-http-shutdown-closing-connectiontested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-http-shutdown-closing-connection
lifecycle-prepared-for-error-casesSHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-prepared-for-error-casestested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-prepared-for-error-cases
lifecycle-timeouts-establishSHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-timeouts-establishtested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-timeouts-establish
lifecycle-timeouts-cancel-on-expirySHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-timeouts-cancel-on-expirytested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-timeouts-cancel-on-expiry
lifecycle-timeouts-per-request-configurableSHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-timeouts-per-request-configurabletested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-timeouts-per-request-configurable
lifecycle-timeouts-may-reset-on-progressMAYbothn/a: catalogue marks it n/atested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-timeouts-may-reset-on-progress
lifecycle-timeouts-max-regardless-of-progressSHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-timeouts-max-regardless-of-progresstested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-timeouts-max-regardless-of-progress
lifecycle-cancel-not-initializeMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-cancel-not-initialize
lifecycle-instructions-may-go-in-system-promptMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-instructions-may-go-in-system-prompt
lifecycle-capability-sets-open(definitional)bothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-capability-sets-opentested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-capability-sets-open
lifecycle-implementation-name-version-requiredREQUIRED (schema field)bothtested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-implementation-name-version-requiredtested: conformance.TestLifecycleClient/2025-11-25/lifecycle/lifecycle-implementation-name-version-required
lifecycle-include-context-only-if-declaredSHOULDservertested: conformance.TestLifecycleServer/2025-11-25/lifecycle/lifecycle-include-context-only-if-declaredn/a: addresses the other side

logging

requirementlevelsidemcpx as servermcpx as client
logging-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-declare-capabilityn/a: addresses the other side
logging-client-may-setlevelMAYclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/logging/logging-client-may-setlevel
logging-setlevel-at-or-aboveshould (schema)servertested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-setlevel-at-or-aboven/a: addresses the other side
logging-unset-server-choosesMAYservertested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-unset-server-choosesn/a: addresses the other side
logging-errors-setlevelSHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-errors-setleveln/a: addresses the other side
logging-server-hygieneSHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-server-hygienen/a: addresses the other side
logging-no-secrets-piiMUST NOTboth (emitter)tested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-no-secrets-piitested: conformance.TestUtilitiesClient/2025-11-25/logging/logging-no-secrets-pii
logging-impl-validate-controlSHOULDbothtested: conformance.TestUtilitiesServer/2025-11-25/logging/logging-impl-validate-controltested: conformance.TestUtilitiesClient/2025-11-25/logging/logging-impl-validate-control

messages

requirementlevelsidemcpx as servermcpx as client
messages-all-messages-follow-jsonrpc-2MUSTbothtested: conformance.TestJSONRPCFramesEveryRevision/2025-11-25/messages/all-messages-follow-jsonrpc-2-server-http
conformance.TestJSONRPCFramesEveryRevision/2025-11-25/messages/all-messages-follow-jsonrpc-2-server-stdio
conformance.TestMessagesServer/2025-11-25/messages/messages-all-messages-follow-jsonrpc-2
tested: conformance.TestJSONRPCFramesEveryRevision/2025-11-25/messages/all-messages-follow-jsonrpc-2-client
messages-other-components-mayMAYbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-other-components-maytested: conformance.TestMessagesClient/2025-11-25/messages/messages-other-components-may
messages-request-id-string-or-integerMUSTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-request-id-string-or-integertested: conformance.TestMessagesClient/2025-11-25/messages/messages-request-id-string-or-integer
messages-request-id-not-nullMUST NOTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-request-id-not-nulltested: conformance.TestMessagesClient/2025-11-25/messages/messages-request-id-not-null
messages-request-id-unique-per-sessionMUST NOTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-request-id-unique-per-sessiontested: conformance.TestMessagesClient/2025-11-25/messages/messages-request-id-unique-per-session
messages-result-response-same-idMUSTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-result-response-same-idtested: conformance.TestMessagesClient/2025-11-25/messages/messages-result-response-same-id
messages-result-response-has-resultMUSTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-result-response-has-resulttested: conformance.TestMessagesClient/2025-11-25/messages/messages-result-response-has-result
messages-result-any-objectMAYbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-result-any-objecttested: conformance.TestMessagesClient/2025-11-25/messages/messages-result-any-object
messages-notification-no-responseMUST NOTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-notification-no-responsetested: conformance.TestMessagesClient/2025-11-25/messages/messages-notification-no-response
messages-notification-no-idMUST NOTbothtested: conformance.TestMessagesServer/2025-11-25/messages/messages-notification-no-idtested: conformance.TestMessagesClient/2025-11-25/messages/messages-notification-no-id
transport-jsonrpc-utf8MUSTbothtested: conformance.TestMessagesServer/2025-11-25/messages/transport-jsonrpc-utf8tested: conformance.TestMessagesClient/2025-11-25/messages/transport-jsonrpc-utf8

meta

requirementlevelsidemcpx as servermcpx as client
meta-no-assumptions-on-reserved-keysMUST NOTbothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-no-assumptions-on-reserved-keystested: conformance.TestMessagesClient/2025-11-25/meta/meta-no-assumptions-on-reserved-keys
meta-prefix-label-formatMUSTbothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-prefix-label-formattested: conformance.TestMessagesClient/2025-11-25/meta/meta-prefix-label-format
meta-reverse-dns-shouldSHOULDbothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-reverse-dns-shouldtested: conformance.TestMessagesClient/2025-11-25/meta/meta-reverse-dns-should
meta-reserved-prefix-second-label(reservation)bothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-reserved-prefix-second-labeltested: conformance.TestMessagesClient/2025-11-25/meta/meta-reserved-prefix-second-label
meta-name-formatMUST / MAYbothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-name-formattested: conformance.TestMessagesClient/2025-11-25/meta/meta-name-format
meta-schema-may-reserve-names(reservation)bothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-schema-may-reserve-namestested: conformance.TestMessagesClient/2025-11-25/meta/meta-schema-may-reserve-names
meta-progress-token-receiver-not-obligated(definitional)bothtested: conformance.TestMessagesServer/2025-11-25/meta/meta-progress-token-receiver-not-obligatedtested: conformance.TestMessagesClient/2025-11-25/meta/meta-progress-token-receiver-not-obligated
meta-icons-client-mime-supportMUST / SHOULDclientn/a: addresses the other siden/a: renders no icons
meta-icons-consumer-securityMUSTclientn/a: addresses the other siden/a: never fetches icons; passes metadata through
meta-icons-reject-unsafe-schemesMUSTclientn/a: addresses the other siden/a: does not dereference). Downstream host must do it
meta-icons-may-limit-sizeMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
meta-icons-same-originSHOULDclientn/a: addresses the other siden/a: catalogue marks it n/a

pagination

requirementlevelsidemcpx as servermcpx as client
pagination-no-fixed-page-sizeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/pagination/pagination-no-fixed-page-size
pagination-stable-cursorsSHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/pagination/pagination-stable-cursorsn/a: addresses the other side
pagination-invalid-cursor-gracefulSHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/pagination/pagination-invalid-cursor-gracefuln/a: addresses the other side
pagination-missing-nextcursor-endSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/pagination/pagination-missing-nextcursor-end
pagination-support-both-flowsSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/pagination/pagination-support-both-flows
pagination-cursor-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/pagination/pagination-cursor-opaque
pagination-no-persist-across-sessionsMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2025-11-25/pagination/pagination-no-persist-across-sessions
pagination-invalid-cursor-32602SHOULDservertested: conformance.TestUtilitiesServer/2025-11-25/pagination/pagination-invalid-cursor-32602n/a: addresses the other side

ping

requirementlevelsidemcpx as servermcpx as client
ping-receiver-responds-promptly-emptyMUSTbothtested: conformance.TestLifecycleServer/2025-11-25/ping/ping-receiver-responds-promptly-emptytested: conformance.TestLifecycleClient/2025-11-25/ping/ping-receiver-responds-promptly-empty
ping-either-party-may-initiate(definitional)bothtested: conformance.TestLifecycleServer/2025-11-25/ping/ping-either-party-may-initiatetested: conformance.TestLifecycleClient/2025-11-25/ping/ping-either-party-may-initiate
ping-sender-may-consider-staleMAYbothn/a: catalogue marks it n/an/a: does not ping
ping-periodic-pingsSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
ping-frequency-configurableSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-timeouts-appropriateSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-avoid-excessiveSHOULDbothtested: conformance.TestLifecycleServer/2025-11-25/ping/ping-avoid-excessivetested: conformance.TestLifecycleClient/2025-11-25/ping/ping-avoid-excessive
ping-timeout-is-connection-failureSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-multiple-failures-may-resetMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-log-failuresSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
ping-schema-receiver-must-respondmust (lowercase)bothtested: conformance.TestLifecycleServer/2025-11-25/ping/ping-schema-receiver-must-respondtested: conformance.TestLifecycleClient/2025-11-25/ping/ping-schema-receiver-must-respond

progress

requirementlevelsidemcpx as servermcpx as client
progress-token-string-or-intMUSTboth (requester)n/a: as a server mcpx never requests progress; a host’s token is relayed back verbatimtested: conformance.TestUtilitiesClient/2025-11-25/progress/progress-token-string-or-int
progress-token-unique-senderMUSTbothtested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-token-unique-sendertested: conformance.TestUtilitiesClient/2025-11-25/progress/progress-token-unique-sender
progress-receiver-may-sendMAYbothn/a: optional feature mcpx does not implementn/a: never receives requests with tokens
progress-must-increaseMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-must-increasen/a: catalogue marks it n/a
progress-message-human-readableSHOULDboth (notifier)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-message-human-readablen/a: catalogue marks it n/a
progress-only-active-tokensMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-only-active-tokensn/a: catalogue marks it n/a
progress-receiver-may-skipMAYbothtested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-receiver-may-skiptested: conformance.TestUtilitiesClient/2025-11-25/progress/progress-receiver-may-skip
progress-task-token-lives-with-taskMUSTboth (receiver)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-task-token-lives-with-taskn/a: catalogue marks it n/a
progress-task-same-tokenMUSTboth (receiver)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-task-same-tokenn/a: catalogue marks it n/a
progress-task-stop-at-terminalMUSTboth (receiver)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-task-stop-at-terminaln/a: catalogue marks it n/a
progress-track-tokensSHOULDbothn/a: catalogue marks it n/atested: conformance.TestUtilitiesClient/2025-11-25/progress/progress-track-tokens
progress-rate-limitSHOULDbothtested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-rate-limittested: conformance.TestUtilitiesClient/2025-11-25/progress/progress-rate-limit
progress-stop-after-completionMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2025-11-25/progress/progress-stop-after-completionn/a: catalogue marks it n/a

prompts

requirementlevelsidemcpx as servermcpx as client
prompts-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-declare-capabilityn/a: addresses the other side
prompts-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-list-changed-notifyn/a: addresses the other side
prompts-image-base64-mimeMUSTservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-image-base64-mimen/a: addresses the other side
prompts-audio-base64-mimeMUST (not bolded)servertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-audio-base64-mimen/a: addresses the other side
prompts-embedded-must-includeMUSTservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-embedded-must-includen/a: addresses the other side
prompts-validate-argsSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-validate-argsn/a: addresses the other side
prompts-respect-capability-negotiationSHOULDbothtested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-respect-capability-negotiationtested: conformance.TestFeaturesClient/2025-11-25/prompts/prompts-respect-capability-negotiation
prompts-validate-ioMUSTbothtested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-validate-io; mcpclient.TestValidatePromptResultcovered

prompts / errors

requirementlevelsidemcpx as servermcpx as client
prompts-errors-32602-32603SHOULDservertested: conformance.TestFeaturesServer/2025-11-25/prompts/prompts-errors-32602-32603n/a: addresses the other side

prompts / pagination

requirementlevelsidemcpx as servermcpx as client
prompts-client-paginateSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/prompts/prompts-client-paginate

resources

requirementlevelsidemcpx as servermcpx as client
resources-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-declare-capabilityn/a: addresses the other side
resources-subscribe-cap-meaning-legacy(definition)servertested: e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/http-subscribe-delivers-upstream-updates-on-the-get-stream@2025-03-26,2025-06-18,2025-11-25
e2e.TestResourceSubscriptionsReachUpstream/2025-11-25/resources/stdio-subscribe-delivers-upstream-updates-under-the-mcpx-uri@2024-11-05,2025-03-26,2025-06-18,2025-11-25
n/a: addresses the other side
resources-cap-features-independentMAYservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-cap-features-independentn/a: addresses the other side
resources-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-list-changed-notifyn/a: addresses the other side
resources-updated-may-be-subresource(note, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/resources/resources-updated-may-be-subresource
resources-https-only-if-client-fetchableSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-https-only-if-client-fetchablen/a: addresses the other side
resources-https-else-other-schemeSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-https-else-other-schemen/a: addresses the other side
resources-file-xdg-mime-mayMAYservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-file-xdg-mime-mayn/a: addresses the other side
resources-custom-scheme-rfc3986MUSTservertested: cli.TestMCPXResourceURIs/2025-11-25/resources/resources-custom-scheme-rfc3986n/a: addresses the other side
resources-sec-validate-urisMUSTservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-sec-validate-urisn/a: addresses the other side
resources-sec-access-controlSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-binary-encodedMUSTservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-sec-binary-encodedn/a: addresses the other side
resources-sec-permissionsSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-annotations-defs(definition)bothtested: conformance.TestFeaturesServer/2025-11-25/resources/resources-annotations-defsgap #207: mcpclient.Resource has no annotations field; they are dropped on parse

resources / errors

requirementlevelsidemcpx as servermcpx as client
resources-not-found-32002SHOULDservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-not-found-32002n/a: addresses the other side
resources-internal-32603SHOULDservertested: conformance.TestFeaturesServer/2025-11-25/resources/resources-internal-32603n/a: addresses the other side

resources / subscriptions

requirementlevelsidemcpx as servermcpx as client
resources-subscribe-rpc(optional)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/resources/resources-subscribe-rpc
resources-unsubscribe-follows-subscribeshould (lowercase, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/resources/resources-unsubscribe-follows-subscribe

roots

requirementlevelsidemcpx as servermcpx as client
roots-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/roots/roots-client-declare-capability-at-initialize
roots-client-listchanged-must-notifyMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/roots/roots-client-listchanged-must-notify
roots-uri-must-be-file-schemeMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-only-expose-permitted-rootsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-uris-path-traversalMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-implement-access-controlsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-accessibilityMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-handle-unavailable-rootsSHOULDservern/a: mcpx does not consume rootsn/a: addresses the other side
roots-server-respect-boundariesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-validate-paths-against-rootsSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-prompt-consent-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-provide-root-management-uiSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-accessibility-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-root-changesSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-check-capability-before-useSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-handle-list-changesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-cache-root-informationSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-return-jsonrpc-errorsSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/roots/roots-client-return-jsonrpc-errors

sampling

requirementlevelsidemcpx as servermcpx as client
sampling-human-in-loop-can-denySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-human-in-loop-can-deny
sampling-app-review-uiSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-view-edit-promptsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-review-responsesSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-client-declare-capability-at-initializeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-client-declare-capability-at-initialize
sampling-client-declare-tools-capabilityMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-client-declare-tools-capability
sampling-server-no-tools-without-capabilityMUST NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-server-no-tools-without-capabilityn/a: addresses the other side
sampling-client-error-on-tools-without-capabilityMUSTclientn/a: addresses the other sidetested: mcpclient.TestSamplingDeclarations/2025-11-25/sampling/tools-without-capability-is-32602
sampling-server-includecontext-only-with-context-capabilitySHOULD NOTservertested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-server-includecontext-only-with-context-capabilityn/a: addresses the other side
sampling-server-avoid-includecontext-valuesSHOULDservergap #210: an upstream sampling request is relayed as-is: tools and includeContext reach a client that did not declare sampling.tools or sampling.contextn/a: addresses the other side
sampling-tool-result-message-only-tool-resultsMUSTbothtested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-tool-result-message-only-tool-resultstested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-tool-result-message-only-tool-results
sampling-tool-use-result-balanceMUSTbothtested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-tool-use-result-balancetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-tool-use-result-balance
sampling-server-answer-every-tooluseMUSTservertested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-server-answer-every-toolusen/a: addresses the other side
sampling-toolresult-id-must-match-tooluseMUSTbothtested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-toolresult-id-must-match-toolusetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-toolresult-id-must-match-tooluse
sampling-toolchoice-required-model-must-use-toolMUSTclientn/a: addresses the other siden/a: mcpx never declares tools
sampling-toolchoice-none-model-must-not-use-toolsMUST NOTclientn/a: addresses the other siden/a: catalogue marks it n/a
sampling-parallel-tool-toggle-extension-onlyMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
sampling-tooluse-meta-preserveSHOULDclient (text says “Clients”; see Conflicts)n/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-tooluse-meta-preserve
sampling-toolresult-structured-conform-outputschemaSHOULDbothtested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-toolresult-structured-conform-outputschematested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-toolresult-structured-conform-outputschema
sampling-client-may-sample-fewer-tokensMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-model-preferencesMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-modify-system-promptMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-includecontextMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-evaluated-in-orderMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-over-prioritiesSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-name-substringSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-may-map-providerMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-stopreason-custom-valuesMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-stopreason-custom-values
sampling-client-errors-user-rejected-and-tool-shapeSHOULDclientn/a: addresses the other sidegap #1836: only the -32602 content half remains: sampling messages/results are not yet checked for a missing tool result or tool results mixed with other content (Phase 2 of #1834); the -1 half is covered – a refusal reaches the upstream as -1 (typed CodedError, #1835)
sampling-client-user-approval-controlsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-both-validate-message-contentSHOULDbothtested: conformance.TestSamplingValidation/2025-11-25/sampling/sampling-both-validate-message-contenttested: conformance.TestSamplingValidation/2025-11-25/sampling/sampling-both-validate-message-content
sampling-client-respect-hintsSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-client-rate-limit
sampling-both-handle-sensitive-dataMUSTbothtested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
tested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
sampling-both-iteration-limits-tool-loopsSHOULDbothtested: conformance.TestClientFeaturesServer/2025-11-25/sampling/sampling-both-iteration-limits-tool-loopstested: conformance.TestClientFeaturesClient/2025-11-25/sampling/sampling-both-iteration-limits-tool-loops

subscriptions

requirementlevelsidemcpx as servermcpx as client
subscriptions-list-changed-should-notifySHOULDservertested: conformance.TestStatefulServer/2025-11-25/subscriptions/subscriptions-list-changed-should-notifyn/a: addresses the other side
subscriptions-resources-updated-only-if-subscribedshould (schema)servertested: conformance.TestStatefulServer/2025-11-25/subscriptions/subscriptions-resources-updated-only-if-subscribedn/a: addresses the other side

tasks

requirementlevelsidemcpx as servermcpx as client
tasks-declare-capabilityMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-declare-capabilityn/a: optional feature mcpx does not implement
tasks-augment-only-if-declaredSHOULDboth (requestor)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-augment-only-if-declaredtested: conformance.TestStatefulClient/2025-11-25/tasks/tasks-augment-only-if-declared
tasks-no-capability-no-tasksSHOULD NOTboth (requestor)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-no-capability-no-taskstested: conformance.TestStatefulClient/2025-11-25/tasks/tasks-no-capability-no-tasks
tasks-tool-no-cap-no-augmentMUST NOTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2025-11-25/tasks/tasks-tool-no-cap-no-augment
tasks-tool-forbidden-defaultMUST NOT / SHOULDbothtested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-tool-forbidden-defaultn/a: catalogue marks it n/a
tasks-tool-optionalMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
tasks-tool-requiredMUSTbothn/a: never requiredn/a: mcpx reads upstream execution.taskSupport to serve its own clients, but never task-augments the upstream call; a required upstream tool that enforces it would fail
tasks-requestor-may-ttlMAYboth (requestor)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-requestor-may-ttln/a: catalogue marks it n/a
tasks-poll-respect-intervalSHOULDboth (requestor)n/a: catalogue marks it n/an/a: no upstream tasks
tasks-poll-until-terminalSHOULDboth (requestor)n/a: catalogue marks it n/an/a: catalogue marks it n/a
tasks-sse-client-may-disconnectMAY / MUSTclientn/a: addresses the other siden/a: catalogue marks it n/a
tasks-status-notification-optionalMAY / MUST NOTbothn/a: optional feature mcpx does not implementtested: conformance.TestStatefulClient/2025-11-25/tasks/tasks-status-notification-optional
tasks-status-notification-no-related-taskSHOULD NOTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-status-notification-no-related-taskn/a: catalogue marks it n/a
tasks-receiver-without-cap-ignoreMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-receiver-without-cap-ignoren/a: mcpx declares no client task caps; unverified whether it strips task from an upstream sampling/createMessage
tasks-receiver-may-requireMAYboth (receiver)n/a: catalogue marks it n/an/a: catalogue marks it n/a
tasks-id-string-receiver-uniqueMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-id-string-receiver-uniquen/a: catalogue marks it n/a
tasks-begin-workingMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-begin-workingn/a: catalogue marks it n/a
tasks-valid-transitionsMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-valid-transitionsn/a: catalogue marks it n/a
tasks-terminal-immutableMUST NOTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-terminal-immutablen/a: catalogue marks it n/a
tasks-input-required-moveSHOULDboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-input-required-moven/a: catalogue marks it n/a
tasks-input-request-related-taskMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-input-request-related-taskn/a: catalogue marks it n/a
tasks-requestor-input-required-call-resultSHOULDboth (requestor)n/a: catalogue marks it n/an/a: catalogue marks it n/a
tasks-leave-input-requiredSHOULDboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-leave-input-requiredn/a: catalogue marks it n/a
tasks-sse-any-streamSHOULDclientn/a: addresses the other siden/a: catalogue marks it n/a
tasks-sse-no-upgrade-getSHOULD NOTservertested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-sse-no-upgrade-getn/a: addresses the other side
tasks-timestampsMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-timestampsn/a: catalogue marks it n/a
tasks-ttl-override-reportMAY / MUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-ttl-override-reportn/a: catalogue marks it n/a
tasks-delete-after-ttlMAYboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-delete-after-ttln/a: catalogue marks it n/a
tasks-poll-intervalMAY / SHOULDbothtested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-poll-intervaln/a: catalogue marks it n/a
tasks-return-createtaskresultMUST / SHOULDboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-return-createtaskresultn/a: catalogue marks it n/a
tasks-result-terminal-finalMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-result-terminal-finaln/a: catalogue marks it n/a
tasks-result-blocksMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-result-blocksn/a: catalogue marks it n/a
tasks-result-exactMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-result-exactn/a: catalogue marks it n/a
tasks-related-task-all-messagesMUSTbothtested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-related-task-all-messagesn/a: catalogue marks it n/a
tasks-taskid-param-authoritativeMUST / SHOULD NOTbothtested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-taskid-param-authoritativen/a: catalogue marks it n/a
tasks-no-related-task-in-get-list-cancel-resultsSHOULD NOTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-no-related-task-in-get-list-cancel-resultsn/a: catalogue marks it n/a
tasks-result-response-related-taskMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-result-response-related-taskn/a: catalogue marks it n/a
tasks-list-paginateSHOULD / MUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-list-paginaten/a: catalogue marks it n/a
tasks-list-cursor-opaqueMUSTboth (requestor)n/a: catalogue marks it n/an/a: catalogue marks it n/a
tasks-get-implies-listMUSTboth (receiver)gap #209: a task started on a connection without an identity can be read by tasks/get and is never listedn/a: catalogue marks it n/a
tasks-cancel-terminal-rejectMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-cancel-terminal-rejectn/a: catalogue marks it n/a
tasks-cancel-transition-before-responseSHOULD / MUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-cancel-transition-before-responsen/a: catalogue marks it n/a
tasks-cancelled-stickyMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-cancelled-stickyn/a: catalogue marks it n/a
tasks-cancelled-may-deleteMAY / SHOULD NOTbothtested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-cancelled-may-deleten/a: catalogue marks it n/a
tasks-protocol-errorsMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-protocol-errorsn/a: catalogue marks it n/a
tasks-informative-errorsSHOULDboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-informative-errorsn/a: catalogue marks it n/a
tasks-failed-status-messageSHOULDboth (receiver)gap #209: a task failed by an isError tool result carries no statusMessagen/a: catalogue marks it n/a
tasks-result-same-errorMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-result-same-errorn/a: catalogue marks it n/a
tasks-bind-auth-contextMUSTboth (receiver)n/a: optional feature mcpx does not implementn/a: catalogue marks it n/a
tasks-document-unboundSHOULDboth (receiver)gap #209: nothing user-facing documents that an unowned task is reachable by anyone holding its idn/a: catalogue marks it n/a
tasks-unbound-secure-idsMUSTboth (receiver)tested: conformance.TestStatefulServer/2025-11-25/tasks/tasks-unbound-secure-idsn/a: catalogue marks it n/a
tasks-unidentified-no-listSHOULD NOTboth (receiver)tested: mcpserver.TestTasksPerEra/2025-11-25/tasks/another-connection-cannot-list-or-read-itn/a: catalogue marks it n/a
tasks-bound-reject-foreignMUSTboth (receiver)n/a: no contextn/a: catalogue marks it n/a
tasks-rate-limitSHOULDboth (receiver)gap #209: tasks/* has no rate limitn/a: catalogue marks it n/a
tasks-resource-limitsSHOULDboth (receiver)gap #209: no maximum ttl and no cap on concurrent tasks per requestorn/a: catalogue marks it n/a
tasks-auditSHOULDbothgap #209: task creation, completion and retrieval are not loggedn/a: catalogue marks it n/a

tools

requirementlevelsidemcpx as servermcpx as client
tools-human-in-loop-denySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-ui-expose-indicate-confirmSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-declare-capabilityn/a: addresses the other side
tools-list-changed-means-emit(definition)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-list-changed-means-emitn/a: addresses the other side
tools-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-list-changed-notifyn/a: addresses the other side
tools-annotations-untrustedMUSTclientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-annotations-hints-no-decisionsshould (lowercase, schema)clientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-inputschema-no-params-recommendedRECOMMENDEDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-inputschema-no-params-recommendedn/a: addresses the other side
tools-name-lengthSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-name-lengthn/a: addresses the other side
tools-name-case-sensitiveSHOULDbothtested: conformance.TestFeaturesServer/2025-11-25/tools/tools-name-case-sensitivetested: conformance.TestFeaturesClient/2025-11-25/tools/tools-name-case-sensitive
tools-name-charsetSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-name-charsetn/a: addresses the other side
tools-name-no-specialSHOULD NOTservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-name-no-specialn/a: addresses the other side
tools-name-unique-in-serverSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-name-unique-in-servern/a: addresses the other side
tools-result-iserror-for-tool-errorsSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-result-iserror-for-tool-errorsn/a: addresses the other side
tools-result-lookup-errors-protocolshould (lowercase)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-result-lookup-errors-protocoln/a: addresses the other side
tools-error-unknown-tool-protocol(classification)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-error-unknown-tool-protocoln/a: addresses the other side
tools-error-input-validation-execution(classification)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-error-input-validation-executionn/a: addresses the other side
tools-client-exec-errors-to-llmSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/tools/tools-client-exec-errors-to-llm
tools-client-protocol-errors-to-llm-mayMAYclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2025-11-25/tools/tools-client-protocol-errors-to-llm-may
tools-embedded-resource-mayMAYservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-embedded-resource-mayn/a: addresses the other side
tools-embedded-implies-resources-capSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-embedded-implies-resources-capn/a: addresses the other side
tools-resource-link-mayMAYservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-resource-link-mayn/a: addresses the other side
tools-resource-link-may-not-listed(note)bothtested: conformance.TestFeaturesServer/2025-11-25/tools/tools-resource-link-may-not-listedtested: conformance.TestFeaturesClient/2025-11-25/tools/tools-resource-link-may-not-listed
tools-structured-also-textSHOULDservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-structured-also-textn/a: addresses the other side
tools-structured-object-only(type, schema)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-structured-object-onlyn/a: addresses the other side
tools-output-schema-conformMUSTservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-output-schema-conformn/a: addresses the other side
tools-output-schema-client-validateSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-output-schema-object-root(type, schema)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-output-schema-object-rootn/a: addresses the other side
tools-display-name-precedence(rule)clientn/a: addresses the other sidegap #207: tool title and annotations.title are carried but nothing that displays a tool uses them
tools-server-sec-validate-inputsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-client-secSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement

tools / json-schema

requirementlevelsidemcpx as servermcpx as client
tools-inputschema-valid-not-nullMUSTservertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-inputschema-valid-not-nulln/a: addresses the other side
tools-inputschema-type-object-rootREQUIRED (schema)servertested: conformance.TestFeaturesServer/2025-11-25/tools/tools-inputschema-type-object-rootn/a: addresses the other side

transport-http-sse

requirementlevelsidemcpx as servermcpx as client
http-sse-server-backcompat-host-bothshould (lowercase)servern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-client-backcompat-probe-400-404-405should (lowercase)clientn/a: addresses the other sidetested: mcpclient.TestHTTPSSETransport/2025-11-25/transport-http-sse/backcompat-probe-refusal-is-recognised
pool.TestHTTPSSEFallback/2025-11-25/transport-http-sse/client-falls-back-to-get-endpoint-and-caches-it

transport-stdio

requirementlevelsidemcpx as servermcpx as client
transport-client-should-support-stdioSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-stdio/transport-client-should-support-stdio
transport-custom-preserve-jsonrpc-and-lifecycleMUSTbothn/a: mcpx serves MCP only over stdio and Streamable HTTP; its /v1 REST surface is not an MCP transportn/a: catalogue marks it n/a
transport-custom-document-patternsSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
stdio-no-embedded-newlinesMUST NOTbothtested: conformance.TestTransportServer/2025-11-25/transport-stdio/stdio-no-embedded-newlinestested: conformance.TestTransportClient/2025-11-25/transport-stdio/stdio-no-embedded-newlines
stdio-message-is-singleMUST (implied)bothtested: conformance.TestTransportServer/2025-11-25/transport-stdio/stdio-message-is-singletested: conformance.TestTransportClient/2025-11-25/transport-stdio/stdio-message-is-single
stdio-server-may-log-to-stderrMAYservertested: conformance.TestTransportServer/2025-11-25/transport-stdio/stdio-server-may-log-to-stderrn/a: addresses the other side
stdio-client-may-capture-stderrMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-stdio/stdio-client-may-capture-stderr
stdio-client-stderr-not-errorSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-stdio/stdio-client-stderr-not-error
stdio-server-stdout-only-mcpMUST NOTservertested: conformance.TestTransportServer/2025-11-25/transport-stdio/stdio-server-stdout-only-mcpn/a: addresses the other side
stdio-client-stdin-only-mcpMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-stdio/stdio-client-stdin-only-mcp

transport-streamable-http

requirementlevelsidemcpx as servermcpx as client
streamable-http-server-single-endpoint-post-getMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-single-endpoint-post-getn/a: addresses the other side
streamable-http-server-validate-originMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-validate-originn/a: addresses the other side
streamable-http-server-403-invalid-originMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-403-invalid-originn/a: addresses the other side
streamable-http-server-bind-localhostSHOULDservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-bind-localhostn/a: addresses the other side
streamable-http-server-authenticateSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-post-every-messageMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-post-every-message
streamable-http-client-accept-bothMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-accept-both
streamable-http-post-body-singleMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-post-body-single
streamable-http-server-202-for-non-requestMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-202-for-non-requestn/a: addresses the other side
streamable-http-server-error-status-if-rejectedMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-error-status-if-rejectedn/a: addresses the other side
streamable-http-server-json-or-sse-for-requestMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-json-or-sse-for-requestn/a: addresses the other side
streamable-http-client-supports-json-and-sseMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-supports-json-and-sse
streamable-http-sse-includes-responseSHOULDservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-sse-includes-responsen/a: addresses the other side
streamable-http-post-sse-may-carry-requestsMAYservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-post-sse-may-carry-requestsn/a: addresses the other side
streamable-http-server-may-terminate-on-session-expiryMAYservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-may-terminate-on-session-expiryn/a: addresses the other side
streamable-http-server-terminates-sse-after-responseSHOULDservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-terminates-sse-after-responsen/a: addresses the other side
streamable-http-sse-priming-eventSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-server-may-close-connection-keep-streamMAYservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-client-polls-after-closeSHOULDclientn/a: addresses the other sidetested: mcpclient.TestLegacyHTTPStreamResumption/2025-11-25/transport/client-resumes-closed-stream-with-last-event-id-after-retry
streamable-http-server-sends-retry-before-closeSHOULDservern/a: never closes earlyn/a: addresses the other side
streamable-http-client-respects-retryMUSTclientn/a: addresses the other sidetested: mcpclient.TestLegacyHTTPStreamResumption/2025-11-25/transport/client-resumes-closed-stream-with-last-event-id-after-retry
streamable-http-disconnect-not-cancelSHOULD NOTbothtested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-disconnect-not-canceln/a: catalogue marks it n/a
streamable-http-client-cancel-by-notificationSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-cancel-by-notification
streamable-http-server-may-resumeMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-may-getMAYclientn/a: addresses the other siden/a: optional feature mcpx does not implement
streamable-http-get-accept-sseMUSTclientn/a: addresses the other siden/a: no GET
streamable-http-get-sse-or-405MUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-get-sse-or-405n/a: addresses the other side
streamable-http-get-stream-unrelatedSHOULDservern/a: 405n/a: addresses the other side
streamable-http-get-no-responsesMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-get-close-any-timeMAYbothtested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-get-close-any-timetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-get-close-any-time
streamable-http-multiple-streamsMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-multiple-streams
streamable-http-no-broadcastMUST / MUST NOTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-no-broadcastn/a: addresses the other side
streamable-http-event-id-uniqueMUSTservern/a: no idsn/a: addresses the other side
streamable-http-event-id-encodes-streamSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-client-resume-with-last-event-idSHOULDclientn/a: addresses the other sidetested: mcpclient.TestLegacyHTTPStreamResumption/2025-11-25/transport/client-resumes-closed-stream-with-last-event-id-after-retry@2025-03-26,2025-06-18,2025-11-25
streamable-http-server-no-cross-stream-replayMUST NOTservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-server-may-assign-sessionMAYservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-may-assign-sessionn/a: addresses the other side
streamable-http-session-id-secureSHOULDservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-session-id-securen/a: addresses the other side
streamable-http-session-id-visible-asciiMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-session-id-visible-asciin/a: addresses the other side
streamable-http-client-handles-session-securelyMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-handles-session-securely
streamable-http-client-echoes-sessionMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-echoes-session
streamable-http-server-400-missing-sessionSHOULDservern/a: mcpx does not require one (stateless fallbackn/a: addresses the other side
streamable-http-server-404-terminated-sessionMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-404-terminated-sessionn/a: addresses the other side
streamable-http-client-reinit-on-404MUSTclientn/a: addresses the other sidetested: mcpclient.TestLegacySession404Recovery/2025-11-25/transport/client-reinitializes-on-session-404-and-retries-once@2025-03-26,2025-06-18,2025-11-25
streamable-http-client-delete-sessionSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-client-delete-session
streamable-http-server-may-405-deleteMAYservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-may-405-deleten/a: addresses the other side
streamable-http-protocol-version-header-is-negotiatedSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2025-11-25/transport-streamable-http/streamable-http-protocol-version-header-is-negotiated
streamable-http-server-assumes-2025-03-26SHOULDservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-assumes-2025-03-26n/a: addresses the other side
streamable-http-server-400-unsupported-version-headerMUSTservertested: conformance.TestTransportServer/2025-11-25/transport-streamable-http/streamable-http-server-400-unsupported-version-headern/a: addresses the other side

versioning

requirementlevelsidemcpx as servermcpx as client
lifecycle-client-sends-supported-versionMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/versioning/lifecycle-client-sends-supported-version
lifecycle-client-sends-latest-versionSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/versioning/lifecycle-client-sends-latest-version
lifecycle-client-may-support-olderMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/versioning/lifecycle-client-may-support-older
lifecycle-server-echoes-supported-versionMUSTservertested: conformance.TestLifecycleServer/2025-11-25/versioning/lifecycle-server-echoes-supported-versionn/a: addresses the other side
lifecycle-server-counteroffers-versionMUSTservertested: conformance.TestLifecycleServer/2025-11-25/versioning/lifecycle-server-counteroffers-versionn/a: addresses the other side
lifecycle-server-counteroffers-latestSHOULDservertested: conformance.TestLifecycleServer/2025-11-25/versioning/lifecycle-server-counteroffers-latestn/a: addresses the other side
lifecycle-client-disconnects-on-unsupported-versionSHOULD (prose) / MUST (schema)clientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/versioning/lifecycle-client-disconnects-on-unsupported-version
lifecycle-http-protocol-version-headerMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2025-11-25/versioning/lifecycle-http-protocol-version-header

2026-07-28

(security; not in area list)

requirementlevelsidemcpx as servermcpx as client
security-implementors-guidelinesSHOULDbothtested: conformance.TestMessagesServer/2026-07-28/security/security-implementors-guidelinesn/a: catalogue marks it n/a

authorization

requirementlevelsidemcpx as servermcpx as client
authorization-http-should-conform-stdio-should-notSHOULD / SHOULD NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authorization-custom-auth-mayMAYbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-optionalOPTIONALbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-http-should-conformSHOULDbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-stdio-use-environmentSHOULD NOTbothgap not implemented: #1975gap not implemented: #1950
authz-alt-transport-best-practiceMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-as-implements-oauth21MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-dcr-may-deprecatedMAYclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-bearer-headerMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-token-every-requestMUSTclientn/a: addresses the other sidegap not implemented: #1950
authz-no-token-in-queryMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-server-validates-tokenMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-validates-audienceMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-client-sends-only-own-as-tokensMUST NOTclientn/a: addresses the other sidegap not implemented: #1950
authz-accept-only-own-tokensMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-no-token-passthroughMUST NOTservergap not implemented: #1975n/a: addresses the other side
authz-error-status-codesMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-server-prm-rfc9728MUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-prm-lists-authorization-serversMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-as-metadata-rfc8414-or-oidcMUSTbothn/a: catalogue marks it n/an/a: optional feature mcpx does not implement
authz-prm-discovery-header-or-well-knownMUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-client-parses-www-authenticateMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-client-as-discovery-orderMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-client-validates-issuer-in-metadataMUST / MUST NOTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-client-per-as-registration-stateMUST / MUST NOTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-resource-indicatorMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-canonical-uri-guidanceSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-secure-token-storageMUSTbothn/a: catalogue marks it n/agap not implemented: #1950
authz-as-short-lived-and-rotateSHOULD / MUSTauth-servern/a: addresses the other siden/a: addresses the other side
authz-https-and-redirect-urisMUSTbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
authz-pkce-verify-s256MUSTclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-open-redirectionMUST / SHOULDclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-proxy-consent-per-clientMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-client-registration-requiredMUSTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-registration-prioritySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-cimdSHOULD / MUSTclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-preregistrationSHOULDclientn/a: addresses the other siden/a: no OAuth client
authz-dcr-application-typeMUST / SHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-credentials-bound-to-issuerMUST / MUST NOTclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-scope-in-challengeSHOULD / MUST / MUST NOTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-scope-selection-orderSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-insufficient-scope-403SHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-all-scopes-single-challengeSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-step-upSHOULD / MAYclientn/a: addresses the other siden/a: optional feature mcpx does not implement
authz-server-scope-hierarchyMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
authz-cimd-as-securityMUST / SHOULDauth-servern/a: addresses the other siden/a: addresses the other side
authz-iss-validationMUST / SHOULD / MUST NOTclient, auth-servern/a: addresses the other siden/a: optional feature mcpx does not implement
authz-refresh-tokensMUST / SHOULD / MAY / MUST NOT / SHOULD NOTclient, servern/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement
authz-follow-security-considerationsMUSTbothn/a: optional feature mcpx does not implementn/a: optional feature mcpx does not implement

caching

requirementlevelsidemcpx as servermcpx as client
caching-server-must-hintMUST*servertested: mcpserver.TestModernEnvelope/2026-07-28/caching/resources-read-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/server-discover-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/tools-list-has-ttlMs-and-cacheScope
n/a: addresses the other side
caching-input-required-no-hintsdescr.servertested: mcpserver.TestMRTRServerRules/2026-07-28/mrtr/requestState-is-bound-to-the-originating-requestn/a: addresses the other side
caching-key-method-paramsMUST NOTclientn/a: addresses the other siden/a: not applicable by construction – the pool catalogue cache is keyed by the configured server, not by method+params, and resources/read results are not cached by the pool (#1604)
caching-no-cache-mrtr-retriesMUST NOTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/caching/caching-no-cache-mrtr-retries
caching-ttl-zero-staleSHOULDclientn/a: addresses the other sidetested: mcpclient.TestListToolsWithHintsAggregatesPages@2026-07-28
pool.TestPoolCacheTTLZeroStale@2026-07-28
caching-ttl-positive-freshSHOULDclientn/a: addresses the other sidetested: pool.TestPoolCacheTTLPositiveExpires@2026-07-28
pool.TestPoolCacheTTLPositiveFresh@2026-07-28
caching-ttl-absent-zeroSHOULDclientn/a: addresses the other sidetested: mcpclient.TestListPromptsWithHintsAbsent@2026-07-28
pool.TestPoolCacheTTLAbsentStale@2026-07-28
caching-ttl-negative-zeroSHOULDclientn/a: addresses the other sidetested: pool.TestPoolCacheTTLNegativeStale@2026-07-28
caching-ttl-non-negativeMUSTservertested: conformance.TestStatefulServer/2026-07-28/caching/caching-ttl-non-negativen/a: addresses the other side
caching-stale-refetchSHOULDclientn/a: addresses the other sidetested: pool.TestPoolCacheConcurrentExpiredCollapse@2026-07-28
pool.TestPoolCacheTTLZeroStale@2026-07-28
caching-ttl-not-pollSHOULD NOT / MUSTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/caching/caching-ttl-not-poll
caching-may-refetch-early-serve-staleMAYclientn/a: addresses the other siden/a: a MAY mcpx does not take – refresh is synchronous on read (decision on #1601); stale is served only when a refetch of an expired entry fails (#1603)
caching-public-shareableMAYbothn/a: catalogue marks it n/an/a: informational – permits sharing a public result across users; imposes nothing
caching-private-no-cross-authMUST NOTboth (any cache)n/a: catalogue marks it n/atested: daemon.TestLoadCacheNeverSeedsPrivateEntry@2026-07-28
daemon.TestSaveCacheSkipsPrivatePools@2026-07-28
pool.TestPoolCacheStaleServedOnRefetchError@2026-07-28
caching-notification-invalidatesdescr. (lowercase should)clientn/a: addresses the other sidetested: daemon.TestListChangedInvalidatesPoolCache@2026-07-28
caching-page-refetchSHOULDclientn/a: addresses the other siden/a: not applicable by construction – the pool caches one aggregated catalogue per configured server, never per page; an expired catalogue is re-fetched whole (#1601, #1604)
caching-page-same-scopeMUSTservertested: mcpserver.TestModernEnvelope/2026-07-28/caching/every-page-has-the-same-cacheScopen/a: addresses the other side
caching-server-access-controlMUST* / MUST NOT*servern/a: until hints are emitted; mcpx has no per-primitive access control (see authorization arean/a: addresses the other side
cache-ttl-scope-requiredREQUIRED (schema)servertested: mcpserver.TestModernEnvelope/2026-07-28/caching/prompts-list-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/resources-list-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/resources-read-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/resources-templates-list-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/server-discover-has-ttlMs-and-cacheScope
mcpserver.TestModernEnvelope/2026-07-28/caching/tools-list-has-ttlMs-and-cacheScope
n/a: addresses the other side

cancellation

requirementlevelsidemcpx as servermcpx as client
cancellation-ref-client-issued-in-progressMUSTbothtested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/server-teardown-sends-cancelled-then-resulttested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-ref-client-issued-in-progress
cancellation-server-should-stop-free-no-responseSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-server-should-stop-free-no-responsen/a: addresses the other side
cancellation-server-may-ignoreMAYservertested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-server-may-ignoren/a: addresses the other side
cancellation-client-ignore-late-responseSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-client-ignore-late-response
cancellation-handle-racesMUSTbothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-handle-racestested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-handle-races
cancellation-log-reasonsSHOULDbothgap #77: a cancellation reason reaches Server.OnCancel, which nothing outside tests sets; it is never loggedtested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-log-reasons
cancellation-ui-indicateSHOULDbothn/a: no UIn/a: no UI
cancellation-ignore-invalidSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-ignore-invalidtested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-ignore-invalid
cancellation-processing-should-ceaseSHOULDboth (receiver)tested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-processing-should-ceasetested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-processing-should-cease
cancellation-client-should-sendSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-client-should-send
cancellation-server-must-send-cancelled-on-listen-teardownMUSTservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/server-teardown-sends-cancelled-then-resultn/a: addresses the other side
cancellation-server-only-for-listenMUST NOT / MUSTservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-cancelled-only-for-listen
mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/server-teardown-sends-cancelled-then-result
n/a: addresses the other side
cancellation-http-disconnect-is-cancelMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-close-is-canceln/a: addresses the other side
cancellation-http-no-messages-after-closeMUST NOT / SHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-close-is-cancel
conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-silent-after-cancel
n/a: addresses the other side
cancellation-stdio-client-must-sendMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-stdio-client-must-send
cancellation-timeouts-establishSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-timeouts-establishtested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-timeouts-establish
cancellation-timeout-then-cancelSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-timeout-then-canceltested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-timeout-then-cancel
cancellation-timeouts-per-request-configurableSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-timeouts-per-request-configurabletested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-timeouts-per-request-configurable
cancellation-max-timeout-despite-progressSHOULD (+MAY)bothtested: conformance.TestUtilitiesServer/2026-07-28/cancellation/cancellation-max-timeout-despite-progresstested: conformance.TestUtilitiesClient/2026-07-28/cancellation/cancellation-max-timeout-despite-progress

completion

requirementlevelsidemcpx as servermcpx as client
completion-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2026-07-28/completion/completion-declare-capabilityn/a: addresses the other side
completion-max-100descr. + schemaservertested: conformance.TestUtilitiesServer/2026-07-28/completion/completion-max-100n/a: addresses the other side
completion-server-shouldSHOULDservertested: daemon.TestHandleCompleteRateLimitHotChangeAndZeroDisables@all
daemon.TestHandleCompleteRateLimitRefusesBeforePool@all
daemon.TestHandleCompleteServerWindowBindsAcrossCallers@all
daemon.TestLocalCompletionCapAfterRanking@all
daemon.TestLocalCompletionTiersPrompts@all
daemon.TestLocalCompletionTiersResources@all
n/a: addresses the other side
completion-client-shouldSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/completion/completion-client-should
completion-securityMUSTbothgap #1968: partial: completion inputs are validated and completion/complete is rate limited per caller (completion.perMinute) and per server (completion.serverPerMinute) since #2387, but there is no per-caller access control for sensitive suggestions and no completion-specific information-disclosure control; waiting on principals #1968 / permissive-auth #1972n/a: catalogue marks it n/a
completion-errorsSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/completion/completion-errorsn/a: addresses the other side
completion-context-argumentsshould (lowercase)clientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/completion/completion-context-arguments

discover

requirementlevelsidemcpx as servermcpx as client
discover-client-may-callMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/discover/discover-client-may-call
discover-supportedversionsREQUIRED (schema)servertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-supportedversionsn/a: addresses the other side
discover-client-choose-from-listshould (lowercase)clientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/discover/discover-client-choose-from-list
discover-capabilitiesREQUIRED (schema)servertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-capabilitiesn/a: addresses the other side
discover-serverinfo-in-metaSHOULDservertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-serverinfo-in-metan/a: addresses the other side
discover-serverinfo-not-for-behaviorSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/discover/discover-serverinfo-not-for-behavior
discover-instructions-optionalMAYservertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-instructions-optionaln/a: addresses the other side

discover / caching

requirementlevelsidemcpx as servermcpx as client
discover-cacheableREQUIRED (schema)servertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-cacheablen/a: addresses the other side

discover / meta

requirementlevelsidemcpx as servermcpx as client
discover-resulttypeMUSTservertested: conformance.TestLifecycleServer/2026-07-28/discover/discover-resulttypen/a: addresses the other side
discover-request-meta-requiredMUSTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/discover/discover-request-meta-required

elicitation

requirementlevelsidemcpx as servermcpx as client
elicitation-server-no-sensitive-info-in-form-modeMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-no-sensitive-info-in-form-moden/a: addresses the other side
elicitation-server-sensitive-via-url-modeMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-sensitive-via-url-moden/a: addresses the other side
elicitation-client-show-requesting-serverMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-show-requesting-server
elicitation-client-form-review-modify-responsesMUSTclientn/a: addresses the other sidetested: cli.TestRenderAnswerReviewMasksSensitiveFields@2025-11-25,2026-07-28
cli.TestRenderQuestionFormShowsSchemaDefaults@2025-11-25,2026-07-28
elicitation-client-decline-cancel-optionsMUSTclientn/a: addresses the other sidetested: elicit.TestAnExpiredQuestionBecomesCancelNotDecline@2025-06-18,2025-11-25,2026-07-28
elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-url-show-domain-and-consentMUSTclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-declare-capability-per-request-metaMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-declare-capability-per-request-meta
elicitation-empty-capability-means-form-only(definition)bothtested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-empty-capability-means-form-onlytested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-empty-capability-means-form-only
elicitation-client-support-at-least-one-modeMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-support-at-least-one-mode
elicitation-server-no-undeclared-modesMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-no-undeclared-modesn/a: addresses the other side
elicitation-server-may-request-during-client-requestMAYservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-may-request-during-client-requestn/a: addresses the other side
elicitation-request-must-include-mode-and-messageMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-request-must-include-mode-and-messagen/a: addresses the other side
elicitation-server-may-omit-mode-for-formMAYservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-may-omit-mode-for-formn/a: addresses the other side
elicitation-client-missing-mode-is-formMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-missing-mode-is-form
elicitation-form-request-shapeMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-form-request-shapen/a: addresses the other side
elicitation-form-schema-flat-primitivesMUST (schema-structural)servertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-form-schema-flat-primitivesn/a: addresses the other side
elicitation-client-prepopulate-defaultsSHOULDclientn/a: addresses the other sidetested: mcpclient.TestModernElicitationAppliesSchemaDefaults/2026-07-28/elicitation/client-applies-schema-defaults
elicitation-url-request-shapeMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-url-request-shapen/a: addresses the other side
elicitation-url-must-be-validMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-url-must-be-validn/a: addresses the other side
elicitation-client-manual-retry-cancel-controlsSHOULDclientn/a: addresses the other sidetested: e2e.TestElicitationsCanBeListedAndAnsweredFromTheCommandLine@2025-11-25,2026-07-28
elicitation-no-32042-in-2026MUST NOTbothtested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-no-32042-in-2026tested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-no-32042-in-2026
elicitation-server-stored-state-bound-to-userMUSTservergap #257: mcpx has no authenticated user: state is bound to the request, the session id is whatever the caller sendsn/a: addresses the other side
elicitation-state-storage-protectedMUSTservertested: elicit.TestOpenAtCreatesOwnerOnlyStore@2025-11-25,2026-07-28
elicit.TestOpenAtMigratesLegacyStore@2025-11-25,2026-07-28
n/a: addresses the other side
elicitation-remote-user-id-from-authorizationMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
elicitation-server-must-not-self-authorize-via-urlMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-must-not-self-authorize-via-urln/a: addresses the other side
elicitation-third-party-creds-not-via-clientMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-third-party-creds-not-via-clientn/a: addresses the other side
elicitation-no-token-passthroughMUST NOTservern/a: optional feature mcpx does not implementn/a: addresses the other side
elicitation-user-authorizes-server-directlyMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-user-authorizes-server-directlyn/a: addresses the other side
elicitation-server-not-transmit-url-creds-to-clientMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-not-transmit-url-creds-to-clientn/a: addresses the other side
elicitation-server-handle-decline-cancel-failureSHOULD NOT / MUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-handle-decline-cancel-failuren/a: addresses the other side
elicitation-server-bind-to-client-and-userMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-server-bind-to-client-and-usern/a: addresses the other side
elicitation-client-user-approval-controlsSHOULDclientn/a: addresses the other sidetested: elicit.TestRoutingSendsCredentialsToAHumanAndTheRestToTheAgent@2025-06-18,2025-11-25,2026-07-28
elicitation-client-allow-decline-any-timeSHOULDclientn/a: addresses the other sidetested: elicit.TestAnsweringAfterTheProcessDiedStillWorks@2025-06-18,2025-11-25,2026-07-28
elicitation-client-clear-what-and-whySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-clear-what-and-why
elicitation-client-validate-responsesSHOULDclientn/a: addresses the other sidetested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema/2026-07-28/elicitation/input-required-wrong-typed-answer-is-rejected
elicitation-server-validate-received-dataSHOULDservertested: mcpclient.TestElicitationAnswersValidatedAgainstRequestedSchema/2026-07-28/elicitation/input-required-wrong-typed-answer-is-rejectedn/a: addresses the other side
elicitation-url-no-sensitive-user-infoMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-url-no-sensitive-user-infon/a: addresses the other side
elicitation-url-not-pre-authenticatedMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-url-not-pre-authenticatedn/a: addresses the other side
elicitation-no-clickable-urls-in-formSHOULD NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-no-clickable-urls-in-formn/a: addresses the other side
elicitation-url-https-outside-devSHOULDservertested: conformance.TestClientFeaturesServer/2026-07-28/elicitation/elicitation-url-https-outside-devn/a: addresses the other side
elicitation-client-handle-urls-carefullyMUSTclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-no-url-prefetchMUST NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-no-url-prefetch
elicitation-client-no-open-without-consentMUST NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-no-open-without-consent
elicitation-client-show-full-urlMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-show-full-url
elicitation-client-open-url-securelyMUSTclientn/a: addresses the other sidetested: elicit.TestRoutingSendsCredentialsToAHumanAndTheRestToTheAgent@2025-06-18,2025-11-25,2026-07-28
elicitation-client-highlight-domainSHOULDclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLShowsRegistrableDomain@2025-11-25,2026-07-28
elicitation-client-warn-punycodeSHOULDclientn/a: addresses the other sidetested: cli.TestRenderQuestionURLWarnsOnPunycodeHost@2025-11-25,2026-07-28
elicitation-client-no-clickable-except-url-fieldSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/elicitation/elicitation-client-no-clickable-except-url-field
elicitation-server-no-trust-client-user-idMUST NOTservergap #257: mcpx has no authenticated user: state is bound to the request, the session id is whatever the caller sendsn/a: addresses the other side
elicitation-server-follow-best-practicesSHOULDservergap #255: requestState signing is sound and question storage is owner-only (0700/0600, #1676); there is no user identityn/a: addresses the other side
elicitation-url-verify-opening-userMUSTservern/a: mcpx issues no URL; the upstream that does sees mcpx’s identity, not the end user’sn/a: addresses the other side
elicitation-url-same-user-start-and-completeMUSTservern/a: see Implied: shared pooled upstreamn/a: addresses the other side
elicitation-url-identity-resilient-to-url-tamperingMUSTservern/a: catalogue marks it n/an/a: addresses the other side

errors

requirementlevelsidemcpx as servermcpx as client
messages-error-response-same-id-unless-unreadableMUSTbothtested: conformance.TestMessagesServer/2026-07-28/errors/messages-error-response-same-id-unless-unreadabletested: conformance.TestMessagesClient/2026-07-28/errors/messages-error-response-same-id-unless-unreadable
errors-error-has-code-and-messageMUSTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-error-has-code-and-messagetested: conformance.TestMessagesClient/2026-07-28/errors/errors-error-has-code-and-message
errors-codes-integersMUSTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-codes-integerstested: conformance.TestMessagesClient/2026-07-28/errors/errors-codes-integers
errors-message-concise-single-sentenceSHOULDbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-message-concise-single-sentencen/a: sends no errors except to server requests
errors-data-mayMAYbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-data-mayn/a: catalogue marks it n/a
errors-standard-jsonrpc-codes(definitional)bothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-standard-jsonrpc-codesn/a: catalogue marks it n/a
errors-legacy-subrange-no-new-codesMUST NOT / SHOULD NOTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-legacy-subrange-no-new-codestested: conformance.TestMessagesClient/2026-07-28/errors/errors-legacy-subrange-no-new-codes
errors-receivers-no-meaning-for-legacy-subrangeMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-receivers-no-meaning-for-legacy-subrangetested: conformance.TestMessagesClient/2026-07-28/errors/errors-receivers-no-meaning-for-legacy-subrange
errors-reserved-subrange-only-spec-codesMUST NOT / MUSTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-reserved-subrange-only-spec-codesn/a: catalogue marks it n/a
errors-do-not-emit-32002-and-32042MUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-do-not-emit-32002-and-32042n/a: catalogue marks it n/a
errors-client-accept-32002-from-legacySHOULDclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/errors/errors-client-accept-32002-from-legacy
errors-local-errors-not-mistaken-for-peershould (lowercase)bothgap #206: an upstream server’s failure reaches the client as mcpx’s own isError text or -32603, indistinguishable from mcpx failingn/a: catalogue marks it n/a
errors-new-codes-outside-jsonrpc-rangeSHOULDbothtested: conformance.TestMessagesServer/2026-07-28/errors/errors-new-codes-outside-jsonrpc-rangen/a: catalogue marks it n/a
errors-method-not-found-for-unadvertised-capability(schema guidance)servergap #257: mcpx answers methods whatever was negotiated (accept liberally, revisions.go); the schema guidance asks for -32601n/a: addresses the other side
errors-missing-required-client-capabilityMUSTservern/a: in practice: mcpx never requires a client capability; questions a client cannot answer go to the brokern/a: addresses the other side
versioning-unsupported-version-http-400MUSTservertested: conformance.TestMessagesServer/2026-07-28/errors/versioning-unsupported-version-http-400n/a: addresses the other side
errors-header-mismatch-http-400MUSTservertested: conformance.TestMessagesServer/2026-07-28/errors/errors-header-mismatch-http-400n/a: addresses the other side

errors (roots/sampling/elicitation)

requirementlevelsidemcpx as servermcpx as client
mrtr-missing-capability-error-32021MUSTservergap #257: through the gateway (mcpx_call) a call that needs input from a client that declared none goes to the broker instead of failing with -32021; the specification contradicts itself here (docs/spec/revision-conflicts.md). In pass-through mode the client’s declaration is relayed and the upstream’s -32021 returned (mcpserver.TestAPassThroughUpstreamsMissingCapabilityIsRelayed)n/a: addresses the other side

json-schema

requirementlevelsidemcpx as servermcpx as client
json-schema-default-2020-12(definitional)bothtested: conformance.TestMessagesServer/2026-07-28/json-schema/json-schema-default-2020-12n/a: catalogue marks it n/a
json-schema-may-declare-dialectMAYbothtested: conformance.TestMessagesServer/2026-07-28/json-schema/json-schema-may-declare-dialecttested: conformance.TestMessagesClient/2026-07-28/json-schema/json-schema-may-declare-dialect
json-schema-support-2020-12MUSTbothtested: mcpclient.TestCallToolRejectsInvalidArgumentsBeforeTheTransport@alln/a: passes through
json-schema-validate-per-dialect-and-error-on-unsupportedMUSTbothtested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
tested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
json-schema-document-dialectsSHOULDbothtested: schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
tested: schemaval.TestDeclaredDialectsCompile@all
schemaval.TestUnsupportedDialect@all
json-schema-recommend-2020-12RECOMMENDEDbothtested: conformance.TestMessagesServer/2026-07-28/json-schema/json-schema-recommend-2020-12n/a: catalogue marks it n/a
json-schema-schemas-validMUSTbothtested: conformance.TestMessagesServer/2026-07-28/json-schema/json-schema-schemas-validn/a: catalogue marks it n/a
json-schema-no-network-refMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/json-schema/json-schema-no-network-reftested: conformance.TestMessagesClient/2026-07-28/json-schema/json-schema-no-network-ref
json-schema-remote-ref-opt-in-off-by-defaultMAY / MUST / SHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
json-schema-reject-unresolved-refSHOULDbothtested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestRemoteRefMakesNoRequests@all
schemaval.TestUnresolvedInternalRef@all
tested: mcpclient.TestListToolsExcludesUncompilableSchemasWithWarning@all
schemaval.TestRemoteRefMakesNoRequests@all
schemaval.TestUnresolvedInternalRef@all
json-schema-bound-composition-costSHOULDbothtested: schemaval.TestSchemaTooLarge@alltested: schemaval.TestSchemaTooLarge@all
tools-schema-default-2020-12(definition)bothtested: conformance.TestMessagesServer/2026-07-28/json-schema/tools-schema-default-2020-12tested: conformance.TestMessagesClient/2026-07-28/json-schema/tools-schema-default-2020-12

lifecycle

requirementlevelsidemcpx as servermcpx as client
lifecycle-capability-sets-open(definitional)bothtested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-capability-sets-opentested: conformance.TestLifecycleClient/2026-07-28/lifecycle/lifecycle-capability-sets-open
lifecycle-implementation-name-version-requiredREQUIRED (schema field)bothtested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-implementation-name-version-requiredtested: conformance.TestLifecycleClient/2026-07-28/lifecycle/lifecycle-implementation-name-version-required
lifecycle-include-context-only-if-declaredSHOULDservertested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-include-context-only-if-declaredn/a: addresses the other side
lifecycle-stateless-no-reliance-on-prior-requestsMUST NOTservertested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-stateless-no-reliance-on-prior-requestsn/a: addresses the other side
lifecycle-stateless-multiple-conversationsSHOULDservertested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-stateless-multiple-conversationsn/a: addresses the other side
lifecycle-stateless-no-connection-reuse-requiredSHOULD NOTservertested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-stateless-no-connection-reuse-requiredn/a: addresses the other side
lifecycle-stateless-client-process-lifetimeSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/lifecycle/lifecycle-stateless-client-process-lifetime
lifecycle-stateless-explicit-handlesMUSTbothtested: conformance.TestLifecycleServer/2026-07-28/lifecycle/lifecycle-stateless-explicit-handlesn/a: catalogue marks it n/a

logging

requirementlevelsidemcpx as servermcpx as client
logging-declare-capabilityMUSTservertested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-declare-capabilityn/a: addresses the other side
logging-no-message-without-loglevelMUST NOTservertested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-no-message-without-logleveln/a: addresses the other side
logging-request-scoped-onlyMUST NOTservertested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-request-scoped-onlyn/a: addresses the other side
logging-may-send-before-responseMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
logging-invalid-loglevel-reject-requestSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-invalid-loglevel-reject-requestn/a: addresses the other side
logging-server-hygieneSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-server-hygienen/a: addresses the other side
logging-no-secrets-piiMUST NOTboth (emitter)tested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-no-secrets-piitested: conformance.TestUtilitiesClient/2026-07-28/logging/logging-no-secrets-pii
logging-impl-validate-controlSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-impl-validate-controltested: conformance.TestUtilitiesClient/2026-07-28/logging/logging-impl-validate-control
logging-deprecatedSHOULD NOT / SHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/logging/logging-deprecatedn/a: catalogue marks it n/a

messages

requirementlevelsidemcpx as servermcpx as client
messages-all-messages-follow-jsonrpc-2MUSTbothtested: conformance.TestJSONRPCFramesEveryRevision/2026-07-28/messages/all-messages-follow-jsonrpc-2-server-http
conformance.TestJSONRPCFramesEveryRevision/2026-07-28/messages/all-messages-follow-jsonrpc-2-server-stdio
conformance.TestMessagesServer/2026-07-28/messages/messages-all-messages-follow-jsonrpc-2
tested: conformance.TestJSONRPCFramesEveryRevision/2026-07-28/messages/all-messages-follow-jsonrpc-2-client
messages-other-components-mayMAYbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-other-components-maytested: conformance.TestMessagesClient/2026-07-28/messages/messages-other-components-may
messages-request-id-string-or-integerMUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-request-id-string-or-integertested: conformance.TestMessagesClient/2026-07-28/messages/messages-request-id-string-or-integer
messages-request-id-not-nullMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-request-id-not-nulltested: conformance.TestMessagesClient/2026-07-28/messages/messages-request-id-not-null
messages-request-id-unique-among-in-flightMUST NOTbothn/a: modern server sends no requeststested: conformance.TestMessagesClient/2026-07-28/messages/messages-request-id-unique-among-in-flight
messages-requests-client-to-server-only(definitional)bothn/a: on modern path; on legacy path mcpx still sends elicitation/sampling requests (allowed theretested: conformance.TestMessagesClient/2026-07-28/messages/messages-requests-client-to-server-only
messages-servers-must-not-initiate-requestsMUST NOTservertested: conformance.TestMessagesServer/2026-07-28/messages/messages-servers-must-not-initiate-requestsn/a: addresses the other side
messages-result-response-same-idMUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-result-response-same-idtested: conformance.TestMessagesClient/2026-07-28/messages/messages-result-response-same-id
messages-result-response-has-resultMUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-result-response-has-resulttested: conformance.TestMessagesClient/2026-07-28/messages/messages-result-response-has-result
messages-result-any-objectMAYbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-result-any-objecttested: conformance.TestMessagesClient/2026-07-28/messages/messages-result-any-object
messages-notification-no-responseMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-notification-no-responsetested: conformance.TestMessagesClient/2026-07-28/messages/messages-notification-no-response
messages-notification-no-idMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-notification-no-idtested: conformance.TestMessagesClient/2026-07-28/messages/messages-notification-no-id
messages-patterns-notifications-scoped-to-requestMAYservertested: conformance.TestMessagesServer/2026-07-28/messages/messages-patterns-notifications-scoped-to-requestn/a: addresses the other side
messages-resulttype-requiredMUSTservertested: conformance.TestMessagesServer/2026-07-28/messages/messages-resulttype-requiredn/a: addresses the other side
messages-resulttype-extension-valuesMAY / MUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/messages-resulttype-extension-valuestested: conformance.TestMessagesClient/2026-07-28/messages/messages-resulttype-extension-values
messages-resulttype-unknown-invalidMUSTclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/messages/messages-resulttype-unknown-invalid
messages-resulttype-absent-means-completeMUSTclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/messages/messages-resulttype-absent-means-complete
messages-resulttype-server-must-includeMUSTservertested: conformance.TestMessagesServer/2026-07-28/messages/messages-resulttype-server-must-includen/a: addresses the other side
transport-jsonrpc-utf8MUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/transport-jsonrpc-utf8tested: conformance.TestMessagesClient/2026-07-28/messages/transport-jsonrpc-utf8
transport-binding-message-directionsMUSTbothtested: conformance.TestMessagesServer/2026-07-28/messages/transport-binding-message-directionstested: conformance.TestMessagesClient/2026-07-28/messages/transport-binding-message-directions
transport-binding-may-mirror-metadataMAYbothtested: conformance.TestMessagesServer/2026-07-28/messages/transport-binding-may-mirror-metadatatested: conformance.TestMessagesClient/2026-07-28/messages/transport-binding-may-mirror-metadata

meta

requirementlevelsidemcpx as servermcpx as client
meta-no-assumptions-on-reserved-keysMUST NOTbothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-no-assumptions-on-reserved-keystested: conformance.TestMessagesClient/2026-07-28/meta/meta-no-assumptions-on-reserved-keys
meta-prefix-label-formatMUSTbothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-prefix-label-formattested: conformance.TestMessagesClient/2026-07-28/meta/meta-prefix-label-format
meta-reverse-dns-shouldSHOULDbothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-reverse-dns-shouldtested: conformance.TestMessagesClient/2026-07-28/meta/meta-reverse-dns-should
meta-reserved-prefix-second-label(reservation)bothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-reserved-prefix-second-labeltested: conformance.TestMessagesClient/2026-07-28/meta/meta-reserved-prefix-second-label
meta-name-formatMUST / MAYbothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-name-formattested: conformance.TestMessagesClient/2026-07-28/meta/meta-name-format
meta-schema-may-reserve-names(reservation)bothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-schema-may-reserve-namestested: conformance.TestMessagesClient/2026-07-28/meta/meta-schema-may-reserve-names
meta-progress-token-receiver-not-obligated(definitional)bothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-progress-token-receiver-not-obligatedtested: conformance.TestMessagesClient/2026-07-28/meta/meta-progress-token-receiver-not-obligated
meta-request-params-meta-requiredMUST / REQUIREDclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/meta/meta-request-params-meta-required
meta-server-rejects-missing-required-fieldMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side
meta-client-should-send-clientinfoSHOULDclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/meta/meta-client-should-send-clientinfo
meta-server-no-undeclared-client-capabilitiesMUST NOTservertested: conformance.TestMessagesServer/2026-07-28/meta/meta-server-no-undeclared-client-capabilitiesn/a: addresses the other side
meta-server-no-infer-caps-from-priorMUST NOTservertested: conformance.TestMessagesServer/2026-07-28/meta/meta-server-no-infer-caps-from-priorn/a: addresses the other side
meta-server-should-send-serverinfoSHOULDservertested: conformance.TestMessagesServer/2026-07-28/meta/meta-server-should-send-serverinfon/a: addresses the other side
meta-info-not-for-behavior-or-securitySHOULD NOTbothtested: conformance.TestMessagesServer/2026-07-28/meta/meta-info-not-for-behavior-or-securitytested: conformance.TestMessagesClient/2026-07-28/meta/meta-info-not-for-behavior-or-security
meta-subscription-id-on-listen-notificationsMUSTservertested: conformance.TestMessagesServer/2026-07-28/meta/meta-subscription-id-on-listen-notificationsn/a: addresses the other side
meta-otel-keys-w3c-formatMUSTbothn/a: does not emit); passes through? not verifiedn/a: catalogue marks it n/a
meta-icons-client-mime-supportMUST / SHOULDclientn/a: addresses the other siden/a: renders no icons
meta-icons-consumer-securityMUSTclientn/a: addresses the other siden/a: never fetches icons; passes metadata through
meta-icons-reject-unsafe-schemesMUSTclientn/a: addresses the other siden/a: does not dereference). Downstream host must do it
meta-icons-may-limit-sizeMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
meta-icons-same-originSHOULDclientn/a: addresses the other siden/a: catalogue marks it n/a
meta-request-required-fieldsMUSTclientn/a: addresses the other sidetested: conformance.TestMessagesClient/2026-07-28/meta/meta-request-required-fields

mrtr

requirementlevelsidemcpx as servermcpx as client
mrtr-server-requests-via-mrtrMUSTservertested: mcpserver.TestElicitationPerEra/2026-07-28/elicitation/inputRequests-carry-no-elicitationIdn/a: addresses the other side
mrtr-requeststate-opaque-clientMUST NOTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/mrtr/mrtr-requeststate-opaque-client
mrtr-supported-requests-onlyMAY / MUST NOTservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-supported-requests-onlyn/a: addresses the other side
mrtr-inputrequests-keys-valuesMUSTservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-inputrequests-keys-valuesn/a: addresses the other side
mrtr-requeststate-attacker-controlledMUSTservertested: mcpserver.TestMRTRServerRules/2026-07-28/mrtr/tampered-requestState-is-rejectedn/a: addresses the other side
mrtr-requeststate-replay-fieldsSHOULDservertested: mcpserver.TestMRTRServerRules/2026-07-28/mrtr/requestState-is-bound-to-the-originating-requestn/a: addresses the other side
mrtr-single-use-enforcedMUSTservern/a: binds only a server whose requestState must be consumed once; mcpx’s is re-minted every round and replaying it re-enters the same running calln/a: addresses the other side
mrtr-at-least-one-fieldMUSTservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-at-least-one-fieldn/a: addresses the other side
mrtr-only-declared-capabilitiesMUST NOTservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-only-declared-capabilitiesn/a: addresses the other side
mrtr-no-assume-retryMUST NOT / MAYservertested: mcpserver.TestMRTRServerRules/2026-07-28/mrtr/missing-input-response-asks-againn/a: addresses the other side
mrtr-client-fulfil-before-retryMUST / MAYclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/mrtr/mrtr-client-fulfil-before-retry
mrtr-client-echo-stateMUST / MUST NOTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/mrtr/mrtr-client-echo-state
mrtr-new-id-on-retryMUSTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/mrtr/mrtr-new-id-on-retry
mrtr-no-cross-request-useMUST NOTclientn/a: addresses the other sidetested: conformance.TestStatefulClient/2026-07-28/mrtr/mrtr-no-cross-request-use
mrtr-server-validate-responsesSHOULDservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-server-validate-responsesn/a: addresses the other side
mrtr-input-request-type-restrictedMUSTservertested: conformance.TestStatefulServer/2026-07-28/mrtr/mrtr-input-request-type-restrictedn/a: addresses the other side
mrtr-server-reask-missing-rather-than-errorSHOULDservertested: mcpserver.TestMRTRServerRules/2026-07-28/mrtr/missing-input-response-asks-againn/a: addresses the other side

pagination

requirementlevelsidemcpx as servermcpx as client
pagination-no-fixed-page-sizeMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/pagination/pagination-no-fixed-page-size
pagination-stable-cursorsSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/pagination/pagination-stable-cursorsn/a: addresses the other side
pagination-invalid-cursor-gracefulSHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/pagination/pagination-invalid-cursor-gracefuln/a: addresses the other side
pagination-missing-nextcursor-endSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/pagination/pagination-missing-nextcursor-end
pagination-support-both-flowsSHOULDclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/pagination/pagination-support-both-flows
pagination-cursor-opaqueMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/pagination/pagination-cursor-opaque
pagination-empty-cursor-not-endMUST NOTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/pagination/pagination-empty-cursor-not-end
pagination-invalid-cursor-32602SHOULDservertested: conformance.TestUtilitiesServer/2026-07-28/pagination/pagination-invalid-cursor-32602n/a: addresses the other side

progress

requirementlevelsidemcpx as servermcpx as client
progress-token-string-or-intMUSTboth (requester)n/a: as a server mcpx never requests progress; a host’s token is relayed back verbatimtested: conformance.TestUtilitiesClient/2026-07-28/progress/progress-token-string-or-int
progress-token-unique-clientMUSTclientn/a: addresses the other sidetested: conformance.TestUtilitiesClient/2026-07-28/progress/progress-token-unique-client
progress-server-may-sendMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
progress-must-increaseMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-must-increasen/a: catalogue marks it n/a
progress-message-human-readableSHOULDboth (notifier)tested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-message-human-readablen/a: catalogue marks it n/a
progress-only-active-tokensMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-only-active-tokensn/a: catalogue marks it n/a
progress-server-may-skipMAYservertested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-server-may-skipn/a: addresses the other side
progress-track-tokensSHOULDbothn/a: catalogue marks it n/atested: conformance.TestUtilitiesClient/2026-07-28/progress/progress-track-tokens
progress-rate-limitSHOULDbothtested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-rate-limittested: conformance.TestUtilitiesClient/2026-07-28/progress/progress-rate-limit
progress-stop-after-completionMUSTboth (notifier)tested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-stop-after-completionn/a: catalogue marks it n/a
progress-http-notifications-relate-to-requestMUSTservertested: conformance.TestUtilitiesServer/2026-07-28/progress/progress-http-notifications-relate-to-requestn/a: addresses the other side

prompts

requirementlevelsidemcpx as servermcpx as client
prompts-declare-capability-discoverMUSTservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-declare-capability-discovern/a: addresses the other side
prompts-list-must-respond-when-declaredMUSTservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-list-must-respond-when-declaredn/a: addresses the other side
prompts-list-not-per-connectionMUST NOTservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-list-not-per-connectionn/a: addresses the other side
prompts-list-may-vary-by-authMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
prompts-list-changed-notify-to-listenersSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-list-changed-notify-to-listenersn/a: addresses the other side
prompts-image-base64-mimeMUSTservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-image-base64-mimen/a: addresses the other side
prompts-audio-base64-mimeMUST (not bolded)servertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-audio-base64-mimen/a: addresses the other side
prompts-resource-link-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-resource-link-mayn/a: addresses the other side
prompts-embedded-must-includeMUSTservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-embedded-must-includen/a: addresses the other side
prompts-validate-argsSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-validate-argsn/a: addresses the other side
prompts-respect-capability-negotiationSHOULDbothtested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-respect-capability-negotiationtested: conformance.TestFeaturesClient/2026-07-28/prompts/prompts-respect-capability-negotiation
prompts-validate-ioMUSTbothtested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-validate-io; mcpclient.TestValidatePromptResultcovered

prompts / errors

requirementlevelsidemcpx as servermcpx as client
prompts-errors-32602-32603SHOULDservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-errors-32602-32603n/a: addresses the other side

prompts / mrtr

requirementlevelsidemcpx as servermcpx as client
prompts-get-input-required-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/prompts/prompts-get-input-required-mayn/a: addresses the other side

prompts / pagination

requirementlevelsidemcpx as servermcpx as client
prompts-client-paginateSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/prompts/prompts-client-paginate

resources

requirementlevelsidemcpx as servermcpx as client
resources-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-declare-capabilityn/a: addresses the other side
resources-subscribe-cap-meaning-2026(definition)servertested: e2e.TestResourceSubscriptionsReachUpstream/2026-07-28/subscriptions/listen-delivers-upstream-updates-and-acks-only-what-it-cann/a: addresses the other side
resources-cap-features-independentMAYservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-cap-features-independentn/a: addresses the other side
resources-list-must-respond-when-declaredMUSTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-list-must-respond-when-declaredn/a: addresses the other side
resources-list-not-per-connectionMUST NOTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-list-not-per-connectionn/a: addresses the other side
resources-list-may-vary-by-authMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-list-changed-notifySHOULDservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-list-changed-notifyn/a: addresses the other side
resources-read-multiple-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-read-multiple-mayn/a: addresses the other side
resources-read-https-direct-maymay (lowercase)clientn/a: addresses the other siden/a: optional feature mcpx does not implement
resources-updated-may-be-subresource(note, schema)clientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/resources/resources-updated-may-be-subresource
resources-https-only-if-client-fetchableSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-https-only-if-client-fetchablen/a: addresses the other side
resources-https-else-other-schemeSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-https-else-other-schemen/a: addresses the other side
resources-file-xdg-mime-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-file-xdg-mime-mayn/a: addresses the other side
resources-custom-scheme-rfc3986MUSTservertested: cli.TestMCPXResourceURIs/2026-07-28/resources/resources-custom-scheme-rfc3986n/a: addresses the other side
resources-no-empty-contents-for-missingMUST NOTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-no-empty-contents-for-missingn/a: addresses the other side
resources-sec-validate-urisMUSTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-sec-validate-urisn/a: addresses the other side
resources-sec-access-controlSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-binary-encodedMUSTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-sec-binary-encodedn/a: addresses the other side
resources-sec-permissionsSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
resources-sec-file-traversalMUSTservern/a: mcpx serves no file:// resources of its own; artifacts are addressed by opaque idsn/a: addresses the other side
resources-annotations-defs(definition)bothtested: conformance.TestFeaturesServer/2026-07-28/resources/resources-annotations-defsgap #207: mcpclient.Resource has no annotations field; they are dropped on parse

resources / errors

requirementlevelsidemcpx as servermcpx as client
resources-internal-32603SHOULDservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-internal-32603n/a: addresses the other side
resources-not-found-32602MUSTservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-not-found-32602n/a: addresses the other side
resources-client-accept-32002SHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/resources/resources-client-accept-32002

resources / mrtr

requirementlevelsidemcpx as servermcpx as client
resources-read-input-required-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/resources/resources-read-input-required-mayn/a: addresses the other side

resources / subscriptions

requirementlevelsidemcpx as servermcpx as client
resources-subscribe-via-listen(mechanism)clientn/a: addresses the other sidetested: mcpclient.TestModernListenStream/2026-07-28/subscriptions/resource-subscription-reopens-listen

roots

requirementlevelsidemcpx as servermcpx as client
roots-client-declare-capability-per-request-metaMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/roots/roots-client-declare-capability-per-request-meta
roots-server-list-via-input-requiredMUST (via MRTR note)servern/a: optional feature mcpx does not implementn/a: addresses the other side
roots-uri-must-be-file-schemeMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-only-expose-permitted-rootsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-uris-path-traversalMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-implement-access-controlsMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-accessibilityMUSTclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-handle-unavailable-rootsSHOULDservern/a: mcpx does not consume rootsn/a: addresses the other side
roots-server-respect-boundariesSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-validate-paths-against-rootsSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-client-prompt-consent-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-provide-root-management-uiSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-validate-accessibility-before-exposingSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-client-monitor-root-changesSHOULDclientn/a: addresses the other siden/a: mcpx exposes no roots – the daemon configures none, so roots/list is always empty and there is nothing to validate, monitor or consent to
roots-server-check-capability-before-useSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-server-cache-root-informationSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
roots-deprecated-new-impls-should-not-adoptSHOULD NOTbothn/a: optional feature mcpx does not implementtested: conformance.TestClientFeaturesClient/2026-07-28/roots/roots-deprecated-new-impls-should-not-adopt
roots-deprecated-existing-should-migrateSHOULDbothn/a: catalogue marks it n/atested: conformance.TestClientFeaturesClient/2026-07-28/roots/roots-deprecated-existing-should-migrate

sampling

requirementlevelsidemcpx as servermcpx as client
sampling-human-in-loop-can-denySHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-human-in-loop-can-deny
sampling-app-review-uiSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-view-edit-promptsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-app-review-responsesSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-client-declare-capability-per-request-metaMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-client-declare-capability-per-request-meta
sampling-client-declare-tools-capabilityMUSTclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-client-declare-tools-capability
sampling-server-no-tools-without-capabilityMUST NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-server-no-tools-without-capabilityn/a: addresses the other side
sampling-client-error-on-tools-without-capabilityMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernSamplingShape/2026-07-28/sampling/tools-without-capability-is-32602
sampling-server-includecontext-only-with-context-capabilitySHOULD NOTservertested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-server-includecontext-only-with-context-capabilityn/a: addresses the other side
sampling-server-avoid-includecontext-valuesSHOULDservergap #210: an upstream sampling request is relayed as-is: tools and includeContext reach a client that did not declare sampling.tools or sampling.contextn/a: addresses the other side
sampling-deprecated-new-impls-should-not-adoptSHOULD NOTbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-deprecated-new-impls-should-not-adopttested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-deprecated-new-impls-should-not-adopt
sampling-tool-result-message-only-tool-resultsMUSTbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-tool-result-message-only-tool-resultstested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-tool-result-message-only-tool-results
sampling-tool-use-result-balanceMUSTbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-tool-use-result-balancetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-tool-use-result-balance
sampling-server-answer-every-tooluseMUSTservertested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-server-answer-every-toolusen/a: addresses the other side
sampling-toolresult-id-must-match-tooluseMUSTbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-toolresult-id-must-match-toolusetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-toolresult-id-must-match-tooluse
sampling-toolchoice-required-model-must-use-toolMUSTclientn/a: addresses the other siden/a: mcpx never declares tools
sampling-toolchoice-none-model-must-not-use-toolsMUST NOTclientn/a: addresses the other siden/a: catalogue marks it n/a
sampling-parallel-tool-toggle-extension-onlyMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
sampling-tooluse-meta-preserveSHOULDclient (text says “Clients”; see Conflicts)n/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-tooluse-meta-preserve
sampling-toolresult-structured-conform-outputschemaSHOULDbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-toolresult-structured-conform-outputschematested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-toolresult-structured-conform-outputschema
sampling-message-must-have-role-and-contentMUSTbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-message-must-have-role-and-contenttested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-message-must-have-role-and-content
sampling-messages-not-retained-between-requestsSHOULD NOTclientn/a: addresses the other sidegap #255: terminal sampling rows are now pruned past the #1677 age bound, but a sampling request’s messages are still retained in elicit.db between separate requests until that bound; the SHOULD NOT is not met
sampling-client-must-respect-maxtokensMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-sample-fewer-tokensMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-temperature-stop-metadataMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-model-preferencesMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-modify-system-promptMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-may-ignore-includecontextMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-evaluated-in-orderMUSTclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hints-over-prioritiesSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-name-substringSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-hint-may-map-providerMAYclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-stopreason-custom-valuesMAYclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-stopreason-custom-values
sampling-client-user-approval-controlsSHOULDclientn/a: addresses the other sidegap #256: a sampling request is routed to the agent audience; nothing lets a person review or edit the prompt or the result
sampling-both-validate-message-contentSHOULDbothtested: conformance.TestSamplingValidation/2026-07-28/sampling/sampling-both-validate-message-contenttested: conformance.TestSamplingValidation/2026-07-28/sampling/sampling-both-validate-message-content
sampling-client-respect-hintsSHOULDclientn/a: addresses the other siden/a: mcpx runs no model; it relays the request unchanged to whatever answers it (the pass-through tests), which is where model choice and generation happen
sampling-client-rate-limitSHOULDclientn/a: addresses the other sidetested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-client-rate-limit
sampling-both-handle-sensitive-dataMUSTbothtested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
tested: daemon.TestElicitEventsAreSummaryOnly@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
elicit.TestOpenPrunesTerminalRowsPastTheAgeBound@2024-11-05,2025-03-26,2025-06-18,2025-11-25,2026-07-28
sampling-both-iteration-limits-tool-loopsSHOULDbothtested: conformance.TestClientFeaturesServer/2026-07-28/sampling/sampling-both-iteration-limits-tool-loopstested: conformance.TestClientFeaturesClient/2026-07-28/sampling/sampling-both-iteration-limits-tool-loops

subscriptions

requirementlevelsidemcpx as servermcpx as client
subscriptions-list-changed-via-listenSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-sse-notifications-must-relate
mcpserver.TestHTTPListenIsAStream/2026-07-28/subscriptions/http-listen-response-is-an-open-sse-stream
n/a: addresses the other side
subscriptions-only-requested-typesMUST NOTservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/concurrent-listens-are-kept-apart
mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/unrequested-type-is-never-sent
n/a: addresses the other side
subscriptions-ack-first-with-idMUST / MUST NOTservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/acknowledged-first-with-subscriptionId-in-metan/a: addresses the other side
subscriptions-stdio-ack-order-per-idMAYservern/a: catalogue marks it n/an/a: addresses the other side
subscriptions-ack-reports-agreed-subsetdescr. (schema-required field)servertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/acknowledged-first-with-subscriptionId-in-metan/a: addresses the other side
subscriptions-client-check-ackSHOULDclientn/a: addresses the other sidetested: mcpclient.TestModernListenStream/2026-07-28/subscriptions/client-checks-acknowledged-subset
subscriptions-tag-every-notificationMUSTservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/concurrent-listens-are-kept-apart
mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/every-notification-carries-the-subscriptionId
n/a: addresses the other side
subscriptions-stdio-client-correlateMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernListenStream/2026-07-28/transport-stdio/client-correlates-subscription-id
subscriptions-multiple-concurrentMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
subscriptions-server-teardown-respondSHOULDservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/server-teardown-sends-cancelled-then-resultn/a: addresses the other side
subscriptions-listen-result-metaschema-requiredservertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/server-teardown-sends-cancelled-then-resultn/a: addresses the other side
subscriptions-client-reconnect-on-dropMAYclientn/a: addresses the other siden/a: catalogue marks it n/a
subscriptions-stdio-resubscribeMUSTclientn/a: addresses the other siden/a: catalogue marks it n/a
subscriptions-request-scoped-not-on-listendescr. (bold “not”)servertested: mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/unrequested-type-is-never-sentn/a: addresses the other side

tasks

requirementlevelsidemcpx as servermcpx as client
ext-tasks-client-declare-per-requestmust (informal)clientn/a: addresses the other siden/a: optional feature mcpx does not implement
ext-tasks-server-advertise-discovermust (informal)servertested: mcpserver.TestCapabilitiesPerRevision/2026-07-28/capabilities/tasks-only-as-extensionn/a: addresses the other side
ext-tasks-never-unsolicitedmust (informal)servertested: mcpserver.TestTasksPerEra/2026-07-28/tasks/no-task-without-the-extension-task-param-ignoredn/a: addresses the other side
ext-tasks-server-decidesdescr.servertested: mcpserver.TestAQuestionAskedUpFrontIsAnsweredBeforeTheTaskExists@2026-07-28
mcpserver.TestATaskSupportingToolBecomesATaskWithoutWaitingTaskAfter@2026-07-28
mcpserver.TestTasksPerEra/2026-07-28/tasks/fast-call-is-answered-directly
mcpserver.TestTasksPerEra/2026-07-28/tasks/server-directed-CreateTaskResult-is-flat
n/a: addresses the other side
ext-tasks-durable-before-responsemust (informal)servertested: mcpserver.TestInjectedStoreKeepsMCPTasksAcrossReopen@2026-07-28n/a: addresses the other side
ext-tasks-createtaskresult-shapemust (informal)servertested: mcpserver.TestTasksPerEra/2026-07-28/tasks/server-directed-CreateTaskResult-is-flatn/a: addresses the other side
ext-tasks-get-carries-resultmust (informal)servertested: mcpserver.TestTasksPerEra/2026-07-28/tasks/server-directed-CreateTaskResult-is-flat
mcpserver.TestTasksPerEra/2026-07-28/tasks/tool-isError-is-completed-not-failed
n/a: addresses the other side
ext-tasks-get-input-requestsdescr.servertested: conformance.TestStatefulServer/2026-07-28/tasks/ext-tasks-get-input-requestsn/a: addresses the other side
ext-tasks-updatemust (informal)servertested: mcpserver.TestATaskAskingAQuestionIsInputRequiredAndTasksUpdateAnswersIt@2026-07-28
mcpserver.TestTasksPerEra/2026-07-28/tasks/update-and-cancel-ack-empty-unknown-is-32602
n/a: addresses the other side
ext-tasks-cancel-cooperativemust (informal)servergap #209: tasks/cancel forces the cancelled status rather than letting the work reach its own terminal statusn/a: addresses the other side
ext-tasks-client-polymorphicmust (informal)clientn/a: addresses the other siden/a: optional feature mcpx does not implement
ext-tasks-client-pollmust (informal)clientn/a: addresses the other siden/a: optional feature mcpx does not implement
ext-tasks-client-persist-idsmust (informal)clientn/a: addresses the other siden/a: optional feature mcpx does not implement
ext-tasks-notifications-via-listendescr. (MAY)bothtested: mcpserver.TestListenDeliversTaskStatusNotifications@2026-07-28
mcpserver.TestListenReportsATaskThatAlreadyFinished@2026-07-28
mcpserver.TestSubscriptionsListen/2026-07-28/subscriptions/taskIds-without-the-extension-is-32021
n/a: a MAY mcpx does not take: it declares no tasks extension upstream

tools

requirementlevelsidemcpx as servermcpx as client
tools-human-in-loop-denySHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-ui-expose-indicate-confirmSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-declare-capabilityMUSTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-declare-capabilityn/a: addresses the other side
tools-list-changed-means-emit(definition)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-changed-means-emitn/a: addresses the other side
tools-list-changed-notify-to-listenersSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-changed-notify-to-listenersn/a: addresses the other side
tools-list-must-respond-when-declaredMUSTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-must-respond-when-declaredn/a: addresses the other side
tools-list-not-per-connectionMUST NOTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-not-per-connectionn/a: addresses the other side
tools-list-may-vary-by-authMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-list-may-be-empty-changeMAYservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-may-be-empty-changen/a: addresses the other side
tools-list-deterministic-orderSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-list-deterministic-ordern/a: addresses the other side
tools-annotations-untrustedMUSTclientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-annotations-hints-no-decisionsshould (lowercase, schema)clientn/a: addresses the other sidetested: daemon.TestAnnotationClearsCallOnlyForLocallyDeclaredServers@2026-07-28
tools-inputschema-no-params-recommendedRECOMMENDEDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-inputschema-no-params-recommendedn/a: addresses the other side
tools-x-mcp-header-mayMAYservern/a: optional feature mcpx does not implementn/a: addresses the other side
tools-x-mcp-header-not-emptyMUST NOTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-tcharMUSTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-no-ctlMUST NOTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-unique-ciMUSTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-primitive-onlyMUSTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-int-safe-rangeMUSTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-statically-reachableMUSTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-x-mcp-header-reject-excludesMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernHTTPHeaders/2026-07-28/transport/client-excludes-tool-with-invalid-x-mcp-header
tools-x-mcp-header-reject-logSHOULDclientn/a: addresses the other sidetested: mcpclient.TestModernHTTPHeaders/2026-07-28/transport/client-excludes-tool-with-invalid-x-mcp-header
tools-x-mcp-header-stdio-may-ignoreMAYclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/tools/tools-x-mcp-header-stdio-may-ignore
tools-x-mcp-header-no-secretsSHOULD NOTservern/a: no tool mcpx serves declares an x-mcp-header parametern/a: addresses the other side
tools-name-lengthSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-name-lengthn/a: addresses the other side
tools-name-case-sensitiveSHOULDbothtested: conformance.TestFeaturesServer/2026-07-28/tools/tools-name-case-sensitivetested: conformance.TestFeaturesClient/2026-07-28/tools/tools-name-case-sensitive
tools-name-charsetSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-name-charsetn/a: addresses the other side
tools-name-no-specialSHOULD NOTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-name-no-specialn/a: addresses the other side
tools-name-unique-in-serverSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-name-unique-in-servern/a: addresses the other side
tools-aggregator-disambiguateSHOULDclientn/a: addresses the other sidetested: e2e.TestAliasExposesASubsetOfTheSameServer@2026-07-28
e2e.TestDuplicateNamespaceIsRejected@2026-07-28
tools-aggregator-not-by-servernameSHOULD NOTclientn/a: addresses the other sidetested: e2e.TestDuplicateNamespaceIsRejected@2026-07-28
tools-result-iserror-for-tool-errorsSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-result-iserror-for-tool-errorsn/a: addresses the other side
tools-result-lookup-errors-protocolshould (lowercase)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-result-lookup-errors-protocoln/a: addresses the other side
tools-error-unknown-tool-protocol(classification)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-error-unknown-tool-protocoln/a: addresses the other side
tools-error-input-validation-execution(classification)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-error-input-validation-executionn/a: addresses the other side
tools-client-exec-errors-to-llmSHOULDclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/tools/tools-client-exec-errors-to-llm
tools-client-protocol-errors-to-llm-mayMAYclientn/a: addresses the other sidetested: conformance.TestFeaturesClient/2026-07-28/tools/tools-client-protocol-errors-to-llm-may
tools-embedded-resource-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-embedded-resource-mayn/a: addresses the other side
tools-embedded-implies-resources-capSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-embedded-implies-resources-capn/a: addresses the other side
tools-resource-link-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-resource-link-mayn/a: addresses the other side
tools-resource-link-may-not-listed(note)bothtested: conformance.TestFeaturesServer/2026-07-28/tools/tools-resource-link-may-not-listedtested: conformance.TestFeaturesClient/2026-07-28/tools/tools-resource-link-may-not-listed
tools-structured-also-textSHOULDservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-structured-also-textn/a: addresses the other side
tools-structured-any-json(type)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-structured-any-jsonn/a: addresses the other side
tools-output-schema-conformMUSTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-output-schema-conformn/a: addresses the other side
tools-output-schema-client-validateSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
tools-display-name-precedence(rule)clientn/a: addresses the other sidegap #207: tool title and annotations.title are carried but nothing that displays a tool uses them
tools-server-sec-validate-inputsMUSTservern/a: optional feature mcpx does not implementn/a: addresses the other side

tools / json-schema

requirementlevelsidemcpx as servermcpx as client
tools-inputschema-valid-not-nullMUSTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-inputschema-valid-not-nulln/a: addresses the other side
tools-inputschema-type-object-rootREQUIRED (schema)servertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-inputschema-type-object-rootn/a: addresses the other side
tools-client-sec-ref-resolutionSHOULDclientn/a: addresses the other siden/a: mcpx never validates arguments against an upstream inputSchema, so it resolves no $ref for validation

tools / mrtr

requirementlevelsidemcpx as servermcpx as client
tools-call-input-required-mayMAYservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-call-input-required-mayn/a: addresses the other side
tools-call-inputrequests-declared-onlyMUST NOTservertested: conformance.TestFeaturesServer/2026-07-28/tools/tools-call-inputrequests-declared-onlyn/a: addresses the other side

transport-http-sse

requirementlevelsidemcpx as servermcpx as client
http-sse-deprecated-no-new-adoptionSHOULD NOTbothtested: conformance.TestTransportServer/2026-07-28/transport-http-sse/http-sse-deprecated-no-new-adoptiontested: conformance.TestTransportClient/2026-07-28/transport-http-sse/http-sse-deprecated-no-new-adoption
http-sse-server-backcompat-host-bothshould (lowercase)servern/a: optional feature mcpx does not implementn/a: addresses the other side
http-sse-client-backcompat-probe-non-modern-bodyshould (lowercase)clientn/a: addresses the other sidetested: mcpclient.TestHTTPEraProbe/2026-07-28/http-compat/legacy-refused-too-is-typed-for-http-sse

transport-stdio

requirementlevelsidemcpx as servermcpx as client
transport-custom-preserve-patterns-and-metadataMUSTbothn/a: no custom MCP transportn/a: catalogue marks it n/a
transport-custom-document-patternsSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
transport-custom-byte-stream-reuses-stdio-framingSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
stdio-no-embedded-newlinesMUST NOTbothtested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-no-embedded-newlinestested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-no-embedded-newlines
stdio-message-is-singleMUST (implied)bothtested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-message-is-singletested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-message-is-single
stdio-server-may-log-to-stderrMAYservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-may-log-to-stderrn/a: addresses the other side
stdio-client-may-capture-stderrMAYclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-may-capture-stderr
stdio-client-stderr-not-errorSHOULD NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-stderr-not-error
stdio-server-stdout-only-mcpMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-stdout-only-mcpn/a: addresses the other side
stdio-client-stdin-only-mcpMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-stdin-only-mcp
stdio-client-no-responsesMUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-no-responses
stdio-server-no-requestsMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-no-requestsn/a: addresses the other side
stdio-client-correlates-subscription-idMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernListenStream/2026-07-28/transport-stdio/client-correlates-subscription-id
stdio-client-cancel-by-notificationMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-cancel-by-notification
stdio-server-stop-cancelled-workSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-stop-cancelled-workn/a: addresses the other side
stdio-server-silent-after-cancelMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-silent-after-canceln/a: addresses the other side
stdio-server-cancelled-only-for-listenMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-cancelled-only-for-listenn/a: addresses the other side
stdio-client-shutdown-sequenceSHOULDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-client-shutdown-sequence
stdio-server-exit-on-eofSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-exit-on-eofn/a: addresses the other side
stdio-server-may-close-stdoutMAYservertested: conformance.TestTransportServer/2026-07-28/transport-stdio/stdio-server-may-close-stdoutn/a: addresses the other side
stdio-client-restart-crashed-serverSHOULDclientn/a: addresses the other sidegap #257: unverified: the in-flight call fails and the pool respawns only on the next acquire, subject to its start-failure cooldown
stdio-dual-era-client-probe-discoverSHOULDclientn/a: addresses the other siden/a: optional feature mcpx does not implement
stdio-no-fallback-on-modern-errorMUST NOT (informal “Do not”)clientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-no-fallback-on-modern-error
stdio-modern-only-client-probeRECOMMENDEDclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-stdio/stdio-modern-only-client-probe

transport-streamable-http

requirementlevelsidemcpx as servermcpx as client
streamable-http-server-single-endpoint-postMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-single-endpoint-postn/a: addresses the other side
streamable-http-server-validate-originMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-validate-originn/a: addresses the other side
streamable-http-server-403-invalid-originMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-403-invalid-originn/a: addresses the other side
streamable-http-server-bind-localhostSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-bind-localhostn/a: addresses the other side
streamable-http-server-authenticateSHOULDservern/a: optional feature mcpx does not implementn/a: addresses the other side
streamable-http-client-post-every-messageMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-client-post-every-message
streamable-http-client-accept-bothMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-client-accept-both
streamable-http-post-body-request-or-notificationMUST / MUST NOTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-post-body-request-or-notification
streamable-http-client-sends-metadata-headersMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernHTTPHeaders/2026-07-28/transport/client-sends-standard-and-param-headers
streamable-http-server-202-for-non-requestMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-202-for-non-requestn/a: addresses the other side
streamable-http-server-error-status-if-rejectedMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-error-status-if-rejectedn/a: addresses the other side
streamable-http-server-json-or-sse-for-requestMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-json-or-sse-for-requestn/a: addresses the other side
streamable-http-client-supports-json-and-sseMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-client-supports-json-and-sse
streamable-http-sse-notifications-must-relateMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-sse-notifications-must-relaten/a: addresses the other side
streamable-http-sse-no-requestsMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-sse-no-requestsn/a: addresses the other side
streamable-http-server-terminates-sse-after-responseSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-terminates-sse-after-responsen/a: addresses the other side
streamable-http-close-is-cancelMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-close-is-canceln/a: addresses the other side
streamable-http-stop-cancelled-workSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-stop-cancelled-workn/a: addresses the other side
streamable-http-silent-after-cancelMUST NOTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-silent-after-canceln/a: addresses the other side
streamable-http-no-resumability— (statement)bothtested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-no-resumabilitytested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-no-resumability
streamable-http-client-reissue-broken-requestMUST (changelog)clientn/a: addresses the other sidetested: mcpclient.TestModernReissueBrokenRequest/2026-07-28/transport/client-reissues-broken-request-once
streamable-http-protocol-version-header-every-postMUSTclientn/a: addresses the other sidetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-protocol-version-header-every-post
streamable-http-protocol-version-header-matches-metaMUSTbothtested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-protocol-version-header-matches-metatested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-protocol-version-header-matches-meta
streamable-http-unsupported-version-400MUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-unsupported-version-400n/a: addresses the other side
streamable-http-missing-capability-400MUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-missing-capability-400n/a: addresses the other side
streamable-http-unknown-method-404MUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-unknown-method-404n/a: addresses the other side
streamable-http-missing-version-header-legacyMAY / MUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-missing-version-header-legacyn/a: addresses the other side
streamable-http-standard-headers-requiredREQUIREDclientn/a: addresses the other sidetested: mcpclient.TestTheVersionHeaderFollowsTheFrame/2026-07-28/transport/standard-headers-mcp-method-and-mcp-name
streamable-http-mcp-name-base64MUSTclientn/a: addresses the other sidetested: mcpclient.TestHeaderValueEncoding/2026-07-28/transport/value-encoding-examples
streamable-http-x-mcp-header-server-mayMAYservern/a: but mcpx re-exports upstream tool schemas — an upstream x-mcp-header passes through, obliging mcpx’s HTTP clients and mcpx’s own validation (see Impliedn/a: addresses the other side
streamable-http-x-mcp-header-client-must-mirrorMUSTclientn/a: addresses the other sidetested: mcpclient.TestParamHeaders/2026-07-28/transport/param-headers-mirror-and-omit-null
streamable-http-x-mcp-header-constraintsMUST / MUST NOTservern/a: unless passing through upstream annotationsn/a: addresses the other side
streamable-http-client-rejects-invalid-x-mcp-headerMUSTclientn/a: addresses the other sidetested: mcpclient.TestModernHTTPHeaders/2026-07-28/transport/client-excludes-tool-with-invalid-x-mcp-header
mcpclient.TestToolHeaderAnnotations/2026-07-28/transport/client-rejects-invalid-x-mcp-header
streamable-http-param-value-encodingMUSTclientn/a: addresses the other sidetested: mcpclient.TestHeaderValueEncoding/2026-07-28/transport/value-encoding-examples
streamable-http-server-decodes-before-compareMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-decodes-before-comparen/a: addresses the other side
streamable-http-client-header-constructionMUSTclientn/a: addresses the other sidetested: mcpclient.TestParamHeaders/2026-07-28/transport/param-headers-mirror-and-omit-null
streamable-http-client-relist-on-header-mismatchSHOULDclientn/a: addresses the other sidetested: mcpclient.TestModernHTTPHeaders/2026-07-28/transport/client-relists-and-retries-on-header-mismatch
streamable-http-intermediary-forwards-unknown-paramMUSTintermediaryn/a: mcpx is not an HTTP intermediary; it terminates MCP and re-originatesn/a: catalogue marks it n/a
streamable-http-server-validates-param-headersMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-validates-param-headersn/a: addresses the other side
streamable-http-header-names-case-insensitiveMUSTbothtested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-header-names-case-insensitivetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-header-names-case-insensitive
streamable-http-server-rejects-header-body-mismatchMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-server-rejects-header-body-mismatchn/a: addresses the other side
streamable-http-header-mismatch-400-jsonrpcMUSTservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-header-mismatch-400-jsonrpcn/a: addresses the other side
streamable-http-numeric-compareSHOULDservern/a: catalogue marks it n/an/a: addresses the other side
streamable-http-intermediary-http-errorMUSTintermediaryn/a: catalogue marks it n/atested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-intermediary-http-error
streamable-http-intermediary-reject-unvalidated-versionSHOULDintermediaryn/a: catalogue marks it n/an/a: catalogue marks it n/a
streamable-http-x-accel-bufferingSHOULDservertested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-x-accel-bufferingn/a: addresses the other side
streamable-http-sse-comment-keepaliveshould/must (lowercase)bothtested: conformance.TestTransportServer/2026-07-28/transport-streamable-http/streamable-http-sse-comment-keepalivetested: conformance.TestTransportClient/2026-07-28/transport-streamable-http/streamable-http-sse-comment-keepalive
streamable-http-modern-only-server-legacy-trafficSHOULDservern/a: as written (mcpx is dual-era, not modern-only) — but mcpx mints a session on server/discover for modern clients by choice (to bind requestStaten/a: addresses the other side

versioning

requirementlevelsidemcpx as servermcpx as client
versioning-implementations-support-base-versioning-patternsMUSTbothtested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-implementations-support-base-versioning-patternstested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-implementations-support-base-versioning-patterns
meta-extension-ids-follow-meta-rulesMUSTbothtested: conformance.TestLifecycleServer/2026-07-28/versioning/meta-extension-ids-follow-meta-rulesn/a: declares no extensions
versioning-server-unsupported-version-errorMUSTservertested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-server-unsupported-version-errorn/a: addresses the other side
versioning-client-retry-with-supportedSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-client-retry-with-supported
mcpclient.TestVersionRetry/2026-07-28/versioning/client-retries-with-supported-version
versioning-server-must-implement-discoverMUSTservertested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-server-must-implement-discovern/a: addresses the other side
versioning-client-may-discover-firstMAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-client-may-discover-first
versioning-extension-fallback-or-rejectMUSTbothtested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-extension-fallback-or-rejectn/a: catalogue marks it n/a
versioning-extensions-document-fallbackSHOULDbothn/a: catalogue marks it n/an/a: catalogue marks it n/a
versioning-dual-era-server-mayMAYservertested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-dual-era-server-mayn/a: addresses the other side
versioning-era-cacheSHOULD / MAYclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-era-cache
versioning-modern-only-server-names-versions-to-initializeSHOULDservern/a: dual-era); for an initialize naming an unsupported version it does name the legacy listn/a: addresses the other side
versioning-modern-client-probe-legacy-stdioSHOULDclientn/a: addresses the other siden/a: unless protocol: force-discover; then discover is first (yes
versioning-dual-era-client-probe-discover-first-stdioSHOULDclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-dual-era-client-probe-discover-first-stdio
versioning-fallback-not-keyed-to-one-codeMUST NOTclientn/a: addresses the other sidetested: conformance.TestLifecycleClient/2026-07-28/versioning/versioning-fallback-not-keyed-to-one-code
versioning-dual-era-http-detectMAY / SHOULDclientn/a: addresses the other siden/a: legacy first
versioning-dual-era-server-selects-by-opening(normative description)servertested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-dual-era-server-selects-by-openingn/a: addresses the other side
versioning-dual-era-both-concurrentlyMAYservertested: conformance.TestLifecycleServer/2026-07-28/versioning/versioning-dual-era-both-concurrentlyn/a: addresses the other side
deprecated-should-not-adoptSHOULD NOT / SHOULDbothtested: conformance.TestLifecycleServer/2026-07-28/versioning/deprecated-should-not-adopttested: conformance.TestLifecycleClient/2026-07-28/versioning/deprecated-should-not-adopt

Authorization rows: accepts, or requires refusal (#1972)

61 authorization rows are split per side of the wire into 82 bound row-sides: 69 permissive and 13 validation. A permissive row-side is satisfied by an interface that accepts every credential (#1950) — endpoint shape, discovery documents, registration, flows. A validation row-side cannot pass against such an interface: it needs a real check, named below, to refuse or challenge a credential (#1972).

Validation row-sides per check: invalid 6, expired 5, wrong-resource 3, scope 5. Input: internal/conformance/authsplit.json; edits belong there, never in this file.

requirementsideverdict
authorization-http-should-conform-stdio-should-notserverpermissive
authorization-http-should-conform-stdio-should-notclientpermissive
authorization-custom-auth-mayserverpermissive
authorization-custom-auth-mayclientpermissive
streamable-http-auth-discovery-version-headerclientpermissive
authz-optionalserverpermissive
authz-optionalclientpermissive
authz-http-should-conformserverpermissive
authz-http-should-conformclientpermissive
authz-stdio-use-environmentserverpermissive
authz-stdio-use-environmentclientpermissive
authz-alt-transport-best-practiceserverpermissive
authz-alt-transport-best-practiceclientpermissive
authz-implement-oauth21serverpermissive
authz-implement-oauth21clientpermissive
authz-dcr-shouldserverpermissive
authz-dcr-shouldclientpermissive
authz-dcr-may-deprecatedclientpermissive
authz-rfc8414-server-should-client-mustserverpermissive
authz-rfc8414-server-should-client-mustclientpermissive
authz-grant-typesserverpermissive
authz-401-when-unauthorizedservervalidation: invalid — an unproven or invalid credential must be refused with 401
authz-base-url-discards-pathclientpermissive
authz-default-endpoints-fallbackclientpermissive
authz-bearer-headerclientpermissive
authz-token-every-requestclientpermissive
authz-no-token-in-queryclientpermissive
authz-server-validates-tokenservervalidation: invalid, expired — tokens are validated; invalid or expired ones must get 401
authz-server-validates-audienceservervalidation: wrong-resource — the token must be issued for this server as audience
authz-client-sends-only-own-as-tokensclientpermissive
authz-accept-only-own-tokensservervalidation: wrong-resource — only tokens valid for this server’s resources may be accepted
authz-no-token-passthroughserverpermissive
authz-error-status-codesservervalidation: invalid, expired, wrong-resource, scope — the refusal status code (401/403/400) for every authorization error
authz-2025-03-26-security-listservervalidation: invalid, expired — servers enforce token expiration and validate redirect URIs
authz-2025-03-26-security-listclientpermissive
authz-2025-03-26-implementation-reqsservervalidation: expired — token rotation and limited lifetimes are enforced server-side
authz-2025-03-26-implementation-reqsclientpermissive
authz-third-party-session-bindingservervalidation: invalid, expired — third-party token status validated and expiration handled
authz-server-prm-rfc9728serverpermissive
authz-server-prm-rfc9728clientpermissive
authz-prm-lists-authorization-serversserverpermissive
authz-as-metadata-rfc8414serverpermissive
authz-as-metadata-rfc8414clientpermissive
authz-as-metadata-rfc8414-or-oidcserverpermissive
authz-as-metadata-rfc8414-or-oidcclientpermissive
authz-401-www-authenticateservervalidation: invalid — the 401 refusal must carry the WWW-Authenticate metadata pointer
authz-prm-discovery-header-or-well-knownserverpermissive
authz-prm-discovery-header-or-well-knownclientpermissive
authz-client-parses-www-authenticateclientpermissive
authz-client-rfc8414-discoveryclientpermissive
authz-client-as-discovery-orderclientpermissive
authz-client-validates-issuer-in-metadataclientpermissive — metadata is checked deterministically; no credential is inspected
authz-client-per-as-registration-stateclientpermissive
authz-resource-indicatorclientpermissive
authz-canonical-uri-guidanceserverpermissive
authz-canonical-uri-guidanceclientpermissive
authz-secure-token-storageserverpermissive
authz-secure-token-storageclientpermissive
authz-https-and-redirect-urisserverpermissive
authz-https-and-redirect-urisclientpermissive
authz-pkceclientpermissive
authz-pkce-verify-s256clientpermissive — the client refuses to proceed on AS capability, not on a presented credential
authz-open-redirectionclientpermissive
authz-proxy-consent-per-clientserverpermissive — user consent is a flow gate, not a credential check; no credential is inspected
authz-client-registration-requiredclientpermissive
authz-registration-priorityclientpermissive
authz-cimdclientpermissive
authz-preregistrationclientpermissive
authz-dcr-application-typeclientpermissive
authz-credentials-bound-to-issuerclientpermissive
authz-scope-in-challengeservervalidation: scope — the refusal challenge must name the scope required
authz-scope-in-challengeclientpermissive
authz-scope-selection-orderclientpermissive
authz-insufficient-scope-403servervalidation: scope — insufficient scope must be refused with 403 insufficient_scope
authz-all-scopes-single-challengeservervalidation: scope — one refusal challenge listing every scope the operation needs
authz-step-upclientpermissive — the client reacts to a refusal it is given; it validates nothing itself
authz-server-scope-hierarchyservervalidation: scope — scope hierarchies must be accounted for when enforcing scope
authz-iss-validationclientpermissive — discovery/issuer metadata is checked deterministically; no credential is inspected
authz-refresh-tokensserverpermissive
authz-refresh-tokensclientpermissive
authz-follow-security-considerationsserverpermissive
authz-follow-security-considerationsclientpermissive