| 1 |
Tools - listing |
docs/servers/tools.md:19-35 |
docs_src/tools/tutorial001.py |
PASS |
| 2 |
Tools - calling |
docs/client/index.md:80-133 |
docs_src/client/tutorial003.py:24-33 |
PASS |
| 3 |
Tools - text results |
docs/servers/tools.md:43-52 |
docs_src/tools/tutorial001.py |
PASS |
| 4 |
Tools - image results |
docs/servers/media.md:7-45 |
docs_src/media/tutorial001.py |
PASS |
| 5 |
Tools - audio results |
docs/servers/media.md:46-61 |
docs_src/media/tutorial002.py:18-21 |
PASS |
| 6 |
Tools - embedded resources |
docs/servers/media.md:84-100 |
docs_src/media/tutorial005.py:13-18 |
PASS |
| 7 |
Tools - error handling |
docs/servers/handling-errors.md:1-80 |
docs_src/handling_errors/tutorial001.py |
PASS |
| 8 |
Tools - change notifications |
docs/handlers/subscriptions.md:7-20 |
docs_src/subscriptions/tutorial001.py:29-33 |
PASS |
| 9 |
Resources - listing |
docs/servers/resources.md:9-43 |
docs_src/resources/tutorial001.py |
PASS |
| 10 |
Resources - reading text |
docs/servers/resources.md:34-38,99-121 |
docs_src/resources/tutorial001.py |
PASS |
| 11 |
Resources - reading binary |
docs/servers/resources.md:117-121 |
docs_src/resources/tutorial003.py:20-23 |
PASS |
| 12 |
Resources - templates |
docs/servers/resources.md:55-97 |
docs_src/resources/tutorial002.py:12-15 |
PASS |
| 13 |
Resources - template reading |
docs/servers/resources.md:76-82 |
docs_src/client/tutorial004.py:28 |
PASS |
| 14 |
Resources - subscribing |
docs/handlers/subscriptions.md:1-45 |
docs_src/subscriptions/tutorial001.py:17-21 |
PASS |
| 15 |
Resources - unsubscribing |
docs/client/subscriptions.md:60,84 |
docs_src/subscriptions/tutorial004_anyio.py:14,18-23 |
PASS |
| 16 |
Resources - change notifications |
docs/handlers/subscriptions.md:15-18 |
examples/stories/stickynotes/server.py:64,74,92 |
PASS |
| 17 |
Prompts - listing |
docs/servers/prompts.md:15-33 |
docs_src/prompts/tutorial001.py |
PASS |
| 18 |
Prompts - getting simple |
docs/servers/prompts.md:35-76 |
docs_src/prompts/tutorial001.py |
PASS |
| 19 |
Prompts - getting with arguments |
docs/servers/prompts.md:110-134 |
docs_src/prompts/tutorial003.py |
PASS |
| 20 |
Prompts - embedded resources |
docs/servers/prompts.md:141-159 |
docs_src/prompts/tutorial004.py:18-25 |
PASS |
| 21 |
Prompts - image content |
docs/servers/prompts.md:161-172 |
docs_src/prompts/tutorial005.py:11-17 |
PASS |
| 22 |
Prompts - change notifications |
docs/servers/prompts.md:174-184 |
docs_src/prompts/tutorial006.py:16-28 |
PASS |
| 23 |
Sampling - creating messages |
docs/handlers/sampling-and-roots.md:10-21,36-38 |
docs_src/sampling_and_roots/tutorial001.py |
PASS |
| 24 |
Elicitation - form mode |
docs/handlers/elicitation.md:7-111 |
docs_src/elicitation/tutorial001.py |
PASS |
| 25 |
Elicitation - URL mode |
docs/handlers/elicitation.md:10,113-125 |
docs_src/elicitation/tutorial002.py:7-17 |
PASS |
| 26 |
Elicitation - schema validation |
docs/handlers/elicitation.md:57-111 |
docs_src/elicitation/tutorial001.py:9-11,20-24 |
PASS |
| 27 |
Elicitation - default values |
docs/handlers/elicitation.md:59-82 |
docs_src/elicitation/tutorial001.py:11 |
PASS |
| 28 |
Elicitation - enum values |
docs/handlers/elicitation.md:84-86 |
examples/stories/legacy_elicitation/server_lowlevel.py:10-17 |
PASS |
| 29 |
Elicitation - complete notification |
docs/handlers/elicitation.md:125 |
docs_src/elicitation/tutorial002.py:20-24 |
PASS |
| 30 |
Roots - listing |
docs/handlers/sampling-and-roots.md:23-38 |
docs_src/sampling_and_roots/tutorial002.py |
PASS |
| 31 |
Roots - change notifications |
docs/deprecated.md:77-100 |
docs/deprecated.md:81-86 |
PASS |
| 32 |
Logging - sending log messages |
docs/handlers/logging.md:5 |
examples/snippets/servers/notifications.py:9-13 |
PASS |
| 33 |
Logging - setting level |
docs/client/callbacks.md:136 |
docs/migration.md:2857-2860 |
PASS |
| 34 |
Completions - resource argument |
docs/servers/completions.md:88-114 |
docs_src/completions/tutorial003.py:34-38 |
PASS |
| 35 |
Completions - prompt argument |
docs/servers/completions.md:20-86 |
docs_src/completions/tutorial002.py:21-29 |
PASS |
| 36 |
Ping |
docs/deprecated.md:14,21,53-75 |
docs/deprecated.md:57-61 |
PASS |
| 37 |
Streamable HTTP transport (client) |
docs/client/transports.md:24-79 |
docs_src/client_transports/tutorial002.py |
PASS |
| 38 |
Streamable HTTP transport (server) |
docs/run/index.md:54-84 |
docs_src/run/tutorial002.py |
PASS |
| 39 |
SSE transport - legacy (client) |
docs/client/transports.md:103-105 |
examples/clients/simple-auth-client/mcp_simple_auth_client/main.py:226-233 |
PASS |
| 40 |
SSE transport - legacy (server) |
docs/run/index.md:9-18 |
docs/migration.md:786-789 |
PASS |
| 41 |
stdio transport (client) |
docs/client/transports.md:81-101 |
docs_src/client_transports/tutorial004.py |
PASS |
| 42 |
stdio transport (server) |
docs/run/index.md:20-52 |
docs_src/run/tutorial001.py:12-13 |
PASS |
| 43 |
Progress notifications |
docs/handlers/progress.md:1-115 |
docs_src/progress/tutorial001.py |
PASS |
| 44 |
Cancellation |
docs/migration.md:1616-1622 |
examples/stories/streaming/client.py:36-52 |
PASS |
| 45 |
Pagination |
docs/advanced/pagination.md:1-80 |
docs_src/pagination/tutorial001.py:15-19 |
PASS |
| 46 |
Capability negotiation |
docs/client/callbacks.md:68-112 |
docs_src/client_callbacks/tutorial003.py:23-31 |
PASS |
| 47 |
Protocol version negotiation |
docs/protocol-versions.md:1-125 |
docs_src/protocol_versions/tutorial001.py-tutorial004.py |
PASS |
| 48 |
JSON Schema 2020-12 support |
docs/advanced/low-level-server.md:114-123 |
docs_src/lowlevel/tutorial007.py:4-17 |
PASS |
Python SDK — Tier 1 Assessment
SDK: modelcontextprotocol/python-sdk
Version: 2.0.0 (GA 2026-07-28) · assessed on
main@9057285(2.0.0 plus documentation and policy files; no API changes)Assessed: 2026-08-17
Requested tier: Tier 1 (unchanged — previous assessment #2304, v1.26.0, 2026-02-23)
Tool:
@modelcontextprotocol/conformancetier-check0.2.0-alpha.11(conformancemain@74edef3),--requirements 2025-11-25,2026-07-28, plus themcp-sdk-tier-auditskill's documentation and policy evaluationsResult
All Tier 1 requirements are met. tier-check:
"implied_tier": {"tier": 1, "tier1_blockers": [], "tier2_met": true}.2026-07-28spec tag (0d gap)Requirements Detail
1–2. Conformance — ✅ server 67/67, client 50/50
Scored against the frozen 2025-11-25 and 2026-07-28 requirement sets, each run at its own wire, with
examples/servers/everything-serveras the server under test and.github/actions/conformance/client.pyas the client. The SDK's CI runs the same suites on every push tomain(workflow; green run at the assessed commit).Not scored (informational, all
extension-tagged and listed in the SDK's expected-failures baseline): servertasks-*(SEP-2663 Tasks extension, not yet implemented — python-sdk#2806); clientauth/dpop,auth/dpop-nonce,auth/wif-jwt-bearer(DPoP /jwt-bearergrant not yet implemented). Every dated scenario passes; the per-revision baselines (expected-failures.2025-11-25.yml,.2026-07-28.yml) are empty.All 62 scored server scenarios
cachingcompletion-completedns-rebinding-protectionelicitation-sep1034-defaultselicitation-sep1330-enumshttp-custom-header-server-validationhttp-header-validationinput-required-result-basic-elicitationinput-required-result-basic-list-rootsinput-required-result-basic-samplinginput-required-result-capability-checkinput-required-result-ignore-extra-paramsinput-required-result-missing-input-responseinput-required-result-multi-roundinput-required-result-multiple-input-requestsinput-required-result-non-tool-requestinput-required-result-request-stateinput-required-result-result-typeinput-required-result-tampered-stateinput-required-result-unsupported-methodsinput-required-result-validate-inputjson-schema-2020-12logging-set-levelpingprompts-get-embedded-resourceprompts-get-simpleprompts-get-with-argsprompts-get-with-imageprompts-listresources-listresources-read-binaryresources-read-textresources-subscriberesources-templates-readresources-unsubscribesep-2164-resource-not-foundserver-initializeserver-session-lifecycleserver-sse-multiple-streamsserver-sse-pollingserver-statelesstasks-capability-negotiationtasks-dispatch-and-envelopetasks-lifecycletasks-mrtr-compositiontasks-mrtr-inputtasks-request-headerstasks-request-state-removaltasks-required-task-errortasks-status-notificationstasks-wire-fieldstools-call-audiotools-call-elicitationtools-call-embedded-resourcetools-call-errortools-call-imagetools-call-mixed-contenttools-call-samplingtools-call-simple-texttools-call-with-loggingtools-call-with-progresstools-listAll 42 scored client scenarios
auth/authorization-server-migrationauth/basic-cimdauth/client-credentials-basicauth/client-credentials-jwtauth/dpopauth/dpop-nonceauth/enterprise-managed-authorizationauth/iss-normalizedauth/iss-not-advertisedauth/iss-supportedauth/iss-supported-missingauth/iss-unexpectedauth/iss-wrong-issuerauth/metadata-defaultauth/metadata-issuer-mismatchauth/metadata-var1auth/metadata-var2auth/metadata-var3auth/offline-access-not-supportedauth/offline-access-scopeauth/pre-registrationauth/resource-mismatchauth/scope-from-scopes-supportedauth/scope-from-www-authenticateauth/scope-omitted-when-undefinedauth/scope-retry-limitauth/scope-step-upauth/token-endpoint-auth-basicauth/token-endpoint-auth-noneauth/token-endpoint-auth-postauth/wif-jwt-bearerelicitation-sep1034-client-defaultshttp-custom-headershttp-invalid-tool-headershttp-standard-headersinitializejson-schema-2020-12-preservationjson-schema-ref-no-derefrequest-metadatasep-2322-client-request-statesse-retrytools_call3. Issue Triage — ✅ 99.5%
196 of 197 open issues carry a label (tier-check method); the one exception, #3309, was opened Fri 2026-08-14 21:34Z and was inside two business days at assessment time. All 12 taxonomy labels exist (labels); the triage commitment is published in CONTRIBUTING.md § Issue Triage.
4. P0 Resolution — ✅ 0 open
No open P0s. P0 history: #1442, closed in 3 days (all P0 issues).
5–6. Stable Release and Spec Tracking — ✅ 2.0.0
2.0.0 (PyPI) implements the 2026-07-28 revision and negotiates every earlier one; it was published 2026-07-28T13:41Z, the same day as the spec release (16:47Z). tier-check reports a 0-day gap on conformance
main(which includes conformance#458, counting a release in the 24h before the spec tag); under the published0.2.0-alpha.11rule the same facts read as "20 days since spec, no release after it" and pass until day 30. Thev1.xmaintenance line released 1.29.0 the same day.7. Documentation — ✅ 48/48
Documentation site: https://py.sdk.modelcontextprotocol.io/ (sources:
docs/, runnable examples indocs_src/included into the pages, plusexamples/). All 48 non-experimental features from the audit's feature list have prose and an example; the five experimental Tasks features are not implemented (SEP-2663) and not required.Per-feature evidence (48/48)
docs/servers/tools.md:19-35docs_src/tools/tutorial001.pydocs/client/index.md:80-133docs_src/client/tutorial003.py:24-33docs/servers/tools.md:43-52docs_src/tools/tutorial001.pydocs/servers/media.md:7-45docs_src/media/tutorial001.pydocs/servers/media.md:46-61docs_src/media/tutorial002.py:18-21docs/servers/media.md:84-100docs_src/media/tutorial005.py:13-18docs/servers/handling-errors.md:1-80docs_src/handling_errors/tutorial001.pydocs/handlers/subscriptions.md:7-20docs_src/subscriptions/tutorial001.py:29-33docs/servers/resources.md:9-43docs_src/resources/tutorial001.pydocs/servers/resources.md:34-38,99-121docs_src/resources/tutorial001.pydocs/servers/resources.md:117-121docs_src/resources/tutorial003.py:20-23docs/servers/resources.md:55-97docs_src/resources/tutorial002.py:12-15docs/servers/resources.md:76-82docs_src/client/tutorial004.py:28docs/handlers/subscriptions.md:1-45docs_src/subscriptions/tutorial001.py:17-21docs/client/subscriptions.md:60,84docs_src/subscriptions/tutorial004_anyio.py:14,18-23docs/handlers/subscriptions.md:15-18examples/stories/stickynotes/server.py:64,74,92docs/servers/prompts.md:15-33docs_src/prompts/tutorial001.pydocs/servers/prompts.md:35-76docs_src/prompts/tutorial001.pydocs/servers/prompts.md:110-134docs_src/prompts/tutorial003.pydocs/servers/prompts.md:141-159docs_src/prompts/tutorial004.py:18-25docs/servers/prompts.md:161-172docs_src/prompts/tutorial005.py:11-17docs/servers/prompts.md:174-184docs_src/prompts/tutorial006.py:16-28docs/handlers/sampling-and-roots.md:10-21,36-38docs_src/sampling_and_roots/tutorial001.pydocs/handlers/elicitation.md:7-111docs_src/elicitation/tutorial001.pydocs/handlers/elicitation.md:10,113-125docs_src/elicitation/tutorial002.py:7-17docs/handlers/elicitation.md:57-111docs_src/elicitation/tutorial001.py:9-11,20-24docs/handlers/elicitation.md:59-82docs_src/elicitation/tutorial001.py:11docs/handlers/elicitation.md:84-86examples/stories/legacy_elicitation/server_lowlevel.py:10-17docs/handlers/elicitation.md:125docs_src/elicitation/tutorial002.py:20-24docs/handlers/sampling-and-roots.md:23-38docs_src/sampling_and_roots/tutorial002.pydocs/deprecated.md:77-100docs/deprecated.md:81-86docs/handlers/logging.md:5examples/snippets/servers/notifications.py:9-13docs/client/callbacks.md:136docs/migration.md:2857-2860docs/servers/completions.md:88-114docs_src/completions/tutorial003.py:34-38docs/servers/completions.md:20-86docs_src/completions/tutorial002.py:21-29docs/deprecated.md:14,21,53-75docs/deprecated.md:57-61docs/client/transports.md:24-79docs_src/client_transports/tutorial002.pydocs/run/index.md:54-84docs_src/run/tutorial002.pydocs/client/transports.md:103-105examples/clients/simple-auth-client/mcp_simple_auth_client/main.py:226-233docs/run/index.md:9-18docs/migration.md:786-789docs/client/transports.md:81-101docs_src/client_transports/tutorial004.pydocs/run/index.md:20-52docs_src/run/tutorial001.py:12-13docs/handlers/progress.md:1-115docs_src/progress/tutorial001.pydocs/migration.md:1616-1622examples/stories/streaming/client.py:36-52docs/advanced/pagination.md:1-80docs_src/pagination/tutorial001.py:15-19docs/client/callbacks.md:68-112docs_src/client_callbacks/tutorial003.py:23-31docs/protocol-versions.md:1-125docs_src/protocol_versions/tutorial001.py-tutorial004.pydocs/advanced/low-level-server.md:114-123docs_src/lowlevel/tutorial007.py:4-178–10. Policies — ✅
.github/dependabot.yml(monthly groupeduvand Actions updates).jwt-bearer).Reproduce This Assessment
AI Disclaimer