MCP SDK Tier Audit: modelcontextprotocol/ruby-sdk
SDK: modelcontextprotocol/ruby-sdk
Date: 2026-07-25
Branch: main (v1.0.0)
Requested tier: Tier 2
Auditor: mcp-sdk-tier-audit skill (automated + subagent evaluation)
Previous assessment: Tier 3 (#2340, 2026-03-03)
Tier Assessment: Tier 2
The Ruby SDK meets every Tier 2 requirement. Since the Tier 3 assessment (#2340), server conformance moved from 83.3% to 100%, a conformance client was implemented and now passes 100% of client scenarios (including draft and extension scenarios), the first stable release v1.0.0 shipped on 2026-07-24, and ROADMAP.md and VERSIONING.md were published. The expected-failures baseline is empty: no known conformance failures remain.
Requirements Summary
| # |
Requirement |
Tier 1 Standard |
Tier 2 Standard |
Current Value |
T1? |
T2? |
Gap |
| 1a |
Server Conformance |
100% pass rate |
>= 80% pass rate |
100% (30/30) |
PASS |
PASS |
None |
| 1b |
Client Conformance |
100% pass rate |
>= 80% pass rate |
100% (24/24, incl. draft/extension) |
PASS |
PASS |
None |
| 2 |
Issue Triage |
>= 90% within 2 biz days |
>= 80% within 1 month |
100% |
PASS |
PASS |
None |
| 2b |
Labels |
12 required labels |
12 required labels |
12/12 |
PASS |
PASS |
None |
| 3 |
Critical Bug Resolution |
All P0s within 7 days |
All P0s within 2 weeks |
0 open |
PASS |
PASS |
None |
| 4 |
Stable Release |
Required + clear versioning |
At least one stable release |
v1.0.0 (2026-07-24) |
PASS |
PASS |
None |
| 4b |
Spec Tracking |
Timeline agreed per release |
Within 6 months |
2025-11-25 revision implemented 46 days after spec release |
FAIL |
PASS |
No per-release timeline agreed yet |
| 5 |
Documentation |
Comprehensive w/ examples |
Basic docs for core features |
34/48 PASS, 5 PARTIAL, 9 FAIL |
FAIL |
PASS |
14 features lack full prose + examples; core features covered |
| 6 |
Dependency Policy |
Published update policy |
Published update policy |
.github/dependabot.yml |
PASS |
PASS |
None |
| 7 |
Roadmap |
Published roadmap |
Plan toward Tier 1 |
ROADMAP.md |
PASS |
PASS |
None |
| 8 |
Versioning Policy |
Documented breaking change policy |
N/A |
VERSIONING.md |
PASS |
N/A |
None |
Tier Determination
- Tier 1: FAIL — 8/10 requirements met (failing: spec tracking timeline, documentation)
- Tier 2: PASS — 9/9 requirements met
- Final Tier: 2
Server Conformance Details
Pass rate: 100% (30/30)
By Spec Version
| Spec Version |
Passed |
Failed |
Total |
Rate |
| 2025-06-18 |
26 |
0 |
26 |
100% |
| 2025-11-25 |
30 |
0 |
30 |
100% |
Scenario Results
| Scenario |
Status |
Checks |
Spec Versions |
| server-initialize |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| ping |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| logging-set-level |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| completion-complete |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-list |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-simple-text |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-image |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-audio |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-embedded-resource |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-mixed-content |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-with-logging |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-error |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-with-progress |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-sampling |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools-call-elicitation |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| elicitation-sep1034-defaults |
PASS |
5/5 |
2025-11-25 |
| elicitation-sep1330-enums |
PASS |
5/5 |
2025-11-25 |
| sse-multiple-streams |
PASS |
2/2 |
2025-11-25 |
| dns-rebinding-protection |
PASS |
2/2 |
2025-11-25 |
| resources-list |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| resources-read-text |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| resources-read-binary |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| resources-templates-read |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| resources-subscribe |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| resources-unsubscribe |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| prompts-list |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| prompts-get-simple |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| prompts-get-with-args |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| prompts-get-embedded-resource |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| prompts-get-with-image |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
The 5 failures reported in #2340 (progress, sampling, elicitation x3) are all resolved: the SDK now extracts _meta.progressToken and delivers notifications/progress, and server-to-client requests (sampling, elicitation) are implemented. conformance/expected_failures.yml is empty (server: []).
Client Conformance Details
Pass rate: 100% (24/24)
Client conformance was skipped in #2340 because no conformance client existed. The SDK now ships a conformance client (conformance/client.rb) exercising MCP::Client with the HTTP transport and OAuth provider. conformance/expected_failures.yml is empty (client: []).
By Spec Version
| Spec Version |
Passed |
Failed |
Total |
Rate |
| 2025-03-26 |
2 |
0 |
2 |
100% |
| 2025-06-18 |
5 |
0 |
5 |
100% |
| 2025-11-25 |
17 |
0 |
17 |
100% |
| draft (informational) |
1 |
0 |
1 |
100% |
| extension (informational) |
3 |
0 |
3 |
100% |
Scenario Results
| Scenario |
Status |
Checks |
Spec Versions |
| initialize |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| tools_call |
PASS |
1/1 |
2025-06-18, 2025-11-25 |
| sse-retry |
PASS |
3/3 |
2025-11-25 |
| elicitation-sep1034-client-defaults |
PASS |
5/5 |
2025-11-25 |
| auth/metadata-default |
PASS |
12/12 |
2025-11-25 |
| auth/metadata-var1 |
PASS |
12/12 |
2025-11-25 |
| auth/metadata-var2 |
PASS |
12/12 |
2025-11-25 |
| auth/metadata-var3 |
PASS |
12/12 |
2025-11-25 |
| auth/pre-registration |
PASS |
12/12 |
2025-11-25 |
| auth/basic-cimd |
PASS |
12/12 |
2025-11-25 |
| auth/token-endpoint-auth-basic |
PASS |
17/17 |
2025-06-18, 2025-11-25 |
| auth/token-endpoint-auth-post |
PASS |
17/17 |
2025-06-18, 2025-11-25 |
| auth/token-endpoint-auth-none |
PASS |
17/17 |
2025-06-18, 2025-11-25 |
| auth/scope-step-up |
PASS |
22/22 |
2025-11-25 |
| auth/scope-retry-limit |
PASS |
18/18 |
2025-11-25 |
| auth/scope-omitted-when-undefined |
PASS |
13/13 |
2025-11-25 |
| auth/scope-from-www-authenticate |
PASS |
13/13 |
2025-11-25 |
| auth/scope-from-scopes-supported |
PASS |
13/13 |
2025-11-25 |
| auth/2025-03-26-oauth-metadata-backcompat |
PASS |
11/11 |
2025-03-26 |
| auth/2025-03-26-oauth-endpoint-fallback |
PASS |
6/6 |
2025-03-26 |
| auth/resource-mismatch |
PASS |
2/2 |
draft |
| auth/cross-app-access-complete-flow |
PASS |
8/8 |
extension |
| auth/client-credentials-jwt |
PASS |
7/7 |
extension |
| auth/client-credentials-basic |
PASS |
7/7 |
extension |
Draft and extension scenarios are informational and not scored for tiering; they are included to show current coverage.
Issue Triage Details
Labels present: bug, enhancement, question, needs confirmation, needs repro, ready for work, good first issue, help wanted, P0, P1, P2, P3 (12/12)
| Metric |
Value |
T1 Req |
T2 Req |
Verdict |
| Compliance rate |
100% |
>= 90% |
>= 80% |
PASS |
| Exceeding SLA |
0 |
-- |
-- |
-- |
| Open P0s |
0 |
0 |
0 |
PASS |
Documentation Coverage
Documentation locations: README.md (~2,600 lines, primary), docs/building-servers.md, docs/building-clients.md, docs/installation.md, examples/ (runnable stdio/HTTP server and client examples, Rails integration example)
Feature Documentation Table
| # |
Feature |
Documented? |
Where |
Has Examples? |
Verdict |
| 1 |
Tools - listing |
Yes |
README.md, docs/building-servers.md |
Yes |
PASS |
| 2 |
Tools - calling |
Yes |
README.md, examples/rails |
Yes |
PASS |
| 3 |
Tools - text results |
Yes |
README.md (Tool::Response) |
Yes |
PASS |
| 4 |
Tools - image results |
No |
Implemented (MCP::Content::Image), not documented |
No |
FAIL |
| 5 |
Tools - audio results |
No |
Implemented (MCP::Content::Audio), not documented |
No |
FAIL |
| 6 |
Tools - embedded resources |
No |
Implemented (MCP::Content::EmbeddedResource), not documented |
No |
FAIL |
| 7 |
Tools - error handling |
Yes |
README.md (error: true, exception handling) |
Yes |
PASS |
| 8 |
Tools - change notifications |
Yes |
README.md (notify_tools_list_changed) |
Yes |
PASS |
| 9 |
Resources - listing |
Yes |
README.md, examples/rails |
Yes |
PASS |
| 10 |
Resources - reading text |
Yes |
README.md (TextContents, resources_read_handler) |
Yes |
PASS |
| 11 |
Resources - reading binary |
Partial |
README.md mentions BlobContents in prose; no code example |
No |
PARTIAL |
| 12 |
Resources - templates |
Yes |
README.md |
Yes |
PASS |
| 13 |
Resources - template reading |
Yes |
README.md (template read example) |
Yes |
PASS |
| 14 |
Resources - subscribing |
Yes |
README.md (resources_subscribe_handler) |
Yes |
PASS |
| 15 |
Resources - unsubscribing |
Yes |
README.md |
Yes |
PASS |
| 16 |
Resources - change notifications |
Partial |
README.md prose; no notify_resources_list_changed example |
No |
PARTIAL |
| 17 |
Prompts - listing |
Yes |
README.md |
Yes |
PASS |
| 18 |
Prompts - getting simple |
Yes |
README.md, docs/building-servers.md |
Yes |
PASS |
| 19 |
Prompts - getting with arguments |
Yes |
README.md (Prompt::Argument) |
Yes |
PASS |
| 20 |
Prompts - embedded resources |
No |
Only Content::Text documented for prompt messages |
No |
FAIL |
| 21 |
Prompts - image content |
No |
— |
No |
FAIL |
| 22 |
Prompts - change notifications |
Partial |
README.md prose; no code example |
No |
PARTIAL |
| 23 |
Sampling - creating messages |
Yes |
README.md (server side + client on_sampling) |
Yes |
PASS |
| 24 |
Elicitation - form mode |
Yes |
README.md |
Yes |
PASS |
| 25 |
Elicitation - URL mode |
Yes |
README.md (create_url_elicitation, URLElicitationRequiredError) |
Yes |
PASS |
| 26 |
Elicitation - schema validation |
No |
requested_schema shown, validation behavior not explained |
No |
FAIL |
| 27 |
Elicitation - default values |
Partial |
Client Elicitation.apply_defaults example; no prose |
Yes |
PARTIAL |
| 28 |
Elicitation - enum values |
No |
Not documented in elicitation context |
No |
FAIL |
| 29 |
Elicitation - complete notification |
Partial |
Appears in URL mode example; no prose |
Yes |
PARTIAL |
| 30 |
Roots - listing |
Yes |
README.md (list_roots) |
Yes |
PASS |
| 31 |
Roots - change notifications |
Yes |
README.md (roots_list_changed_handler) |
Yes |
PASS |
| 32 |
Logging - sending log messages |
Yes |
README.md (notify_log_message) |
Yes |
PASS |
| 33 |
Logging - setting level |
Yes |
README.md (logging/setLevel) |
Yes |
PASS |
| 34 |
Completions - resource argument |
Yes |
README.md (ref/resource) |
Yes |
PASS |
| 35 |
Completions - prompt argument |
Yes |
README.md (ref/prompt) |
Yes |
PASS |
| 36 |
Ping |
Yes |
README.md (server and client) |
Yes |
PASS |
| 37 |
Streamable HTTP transport (client) |
Yes |
README.md, docs/building-clients.md, examples/ |
Yes |
PASS |
| 38 |
Streamable HTTP transport (server) |
Yes |
README.md, docs/building-servers.md, examples/ |
Yes |
PASS |
| 39 |
SSE transport - legacy (client) |
No |
Not implemented; intentionally out of scope per ROADMAP.md |
No |
FAIL |
| 40 |
SSE transport - legacy (server) |
No |
Not implemented; intentionally out of scope per ROADMAP.md |
No |
FAIL |
| 41 |
stdio transport (client) |
Yes |
README.md, docs/building-clients.md, examples/ |
Yes |
PASS |
| 42 |
stdio transport (server) |
Yes |
README.md, docs/building-servers.md, examples/ |
Yes |
PASS |
| 43 |
Progress notifications |
Yes |
README.md (server side + client progress_token) |
Yes |
PASS |
| 44 |
Cancellation |
Yes |
README.md (server, client, custom transports) |
Yes |
PASS |
| 45 |
Pagination |
Yes |
README.md (page_size, nextCursor) |
Yes |
PASS |
| 46 |
Capability negotiation |
Yes |
README.md (Capabilities builder, connect(capabilities:)) |
Yes |
PASS |
| 47 |
Protocol version negotiation |
Yes |
README.md (protocol_version) |
Yes |
PASS |
| 48 |
JSON Schema 2020-12 support |
Yes |
README.md (SEP-2106, oneOf/$defs examples) |
Yes |
PASS |
Summary
- Total non-experimental features: 48
- PASS (documented with examples): 34/48
- PARTIAL: 5/48
- FAIL (not documented): 9/48
Tier 1 (all non-experimental features documented with examples): FAIL — 14 features are not fully documented. The gaps cluster in non-text content types (image/audio/embedded resources for tools and prompts, binary resources), notification code examples, and elicitation sub-options. Legacy SSE transport (#39, #40) is intentionally not implemented; TypeScript SDK v2 likewise no longer serves the legacy HTTP+SSE transport.
Tier 2 (basic docs covering core features): PASS — every core capability area (tools, resources, prompts, sampling, elicitation, roots, logging, completions, ping, both transports, progress, cancellation, pagination, capability and version negotiation) has prose documentation with code examples.
Policy Evaluation
1. Dependency Update Policy: PASS
| File |
Exists |
Content Verdict |
| .github/dependabot.yml |
Yes |
Configured |
Verdict: PASS
2. Roadmap: PASS
| File |
Exists |
Content Verdict |
| ROADMAP.md |
Yes (merged in #465) |
Substantive |
ROADMAP.md states the goal of a 100% conformance pass rate and SEP-1730 Tier 1, records the remaining work, declares legacy SSE transport intentionally out of scope, and describes how new spec revisions are tracked.
Verdict:
- Tier 1: PASS — Published roadmap tracking spec components
- Tier 2: PASS — Published plan toward Tier 1
3. Versioning Policy: PASS (Tier 1) / N/A (Tier 2)
| File |
Exists |
Content Verdict |
| VERSIONING.md |
Yes (merged in #466) |
Substantive |
VERSIONING.md documents the Semantic Versioning scheme, what constitutes a breaking change, the post-1.0.0 guarantee that breaking changes ship only in major releases, the narrow exceptions (MCP spec-conformance fixes and security fixes), and how breaking changes are communicated (CHANGELOG.md in Keep a Changelog format, GitHub Releases, deprecation warnings where practical).
Verdict:
Overall Policy Summary
| Policy Area |
Tier 1 |
Tier 2 |
| Dependency Update Policy |
PASS |
PASS |
| Roadmap |
PASS |
PASS |
| Versioning Policy |
PASS |
N/A |
Changes Since the Tier 3 Assessment (#2340)
| Area |
Tier 3 assessment (2026-03-03) |
This assessment (2026-07-25) |
| Server conformance |
83.3% (25/30), 5 baselined failures |
100% (30/30), empty baseline |
| Client conformance |
Skipped (no conformance client) |
100% (24/24), incl. draft/extension |
| Stable release |
0.8.0 |
v1.0.0 (2026-07-24) |
| Roadmap |
None |
ROADMAP.md |
| Versioning policy |
None |
VERSIONING.md |
| Documentation |
22/48 PASS |
34/48 PASS |
| Sampling / elicitation / progress |
Unimplemented |
Implemented (server and client) |
| OAuth client |
None |
Full flow incl. DCR, PKCE, scope handling, 2025-03-26 backcompat |
Remaining Gaps Toward Tier 1
- Documentation: 14 features lack full prose + examples (non-text content types, notification examples, elicitation sub-options)
- Spec tracking: agree an implementation timeline per spec release with the spec maintainers
- Legacy SSE transport is intentionally out of scope (declared in ROADMAP.md); guidance from the working group on how this affects the Tier 1 documentation requirement is welcome
MCP SDK Tier Audit: modelcontextprotocol/ruby-sdk
SDK: modelcontextprotocol/ruby-sdk
Date: 2026-07-25
Branch: main (v1.0.0)
Requested tier: Tier 2
Auditor: mcp-sdk-tier-audit skill (automated + subagent evaluation)
Previous assessment: Tier 3 (#2340, 2026-03-03)
Tier Assessment: Tier 2
The Ruby SDK meets every Tier 2 requirement. Since the Tier 3 assessment (#2340), server conformance moved from 83.3% to 100%, a conformance client was implemented and now passes 100% of client scenarios (including draft and extension scenarios), the first stable release v1.0.0 shipped on 2026-07-24, and ROADMAP.md and VERSIONING.md were published. The expected-failures baseline is empty: no known conformance failures remain.
Requirements Summary
Tier Determination
Server Conformance Details
Pass rate: 100% (30/30)
By Spec Version
Scenario Results
The 5 failures reported in #2340 (progress, sampling, elicitation x3) are all resolved: the SDK now extracts
_meta.progressTokenand deliversnotifications/progress, and server-to-client requests (sampling, elicitation) are implemented.conformance/expected_failures.ymlis empty (server: []).Client Conformance Details
Pass rate: 100% (24/24)
Client conformance was skipped in #2340 because no conformance client existed. The SDK now ships a conformance client (
conformance/client.rb) exercisingMCP::Clientwith the HTTP transport and OAuth provider.conformance/expected_failures.ymlis empty (client: []).By Spec Version
Scenario Results
Draft and extension scenarios are informational and not scored for tiering; they are included to show current coverage.
Issue Triage Details
Labels present: bug, enhancement, question, needs confirmation, needs repro, ready for work, good first issue, help wanted, P0, P1, P2, P3 (12/12)
Documentation Coverage
Documentation locations: README.md (~2,600 lines, primary), docs/building-servers.md, docs/building-clients.md, docs/installation.md, examples/ (runnable stdio/HTTP server and client examples, Rails integration example)
Feature Documentation Table
MCP::Content::Image), not documentedMCP::Content::Audio), not documentedMCP::Content::EmbeddedResource), not documentederror: true, exception handling)notify_tools_list_changed)TextContents,resources_read_handler)BlobContentsin prose; no code exampleresources_subscribe_handler)notify_resources_list_changedexamplePrompt::Argument)Content::Textdocumented for prompt messageson_sampling)create_url_elicitation,URLElicitationRequiredError)requested_schemashown, validation behavior not explainedElicitation.apply_defaultsexample; no proselist_roots)roots_list_changed_handler)notify_log_message)logging/setLevel)ref/resource)ref/prompt)progress_token)page_size,nextCursor)Capabilitiesbuilder,connect(capabilities:))protocol_version)oneOf/$defsexamples)Summary
Tier 1 (all non-experimental features documented with examples): FAIL — 14 features are not fully documented. The gaps cluster in non-text content types (image/audio/embedded resources for tools and prompts, binary resources), notification code examples, and elicitation sub-options. Legacy SSE transport (#39, #40) is intentionally not implemented; TypeScript SDK v2 likewise no longer serves the legacy HTTP+SSE transport.
Tier 2 (basic docs covering core features): PASS — every core capability area (tools, resources, prompts, sampling, elicitation, roots, logging, completions, ping, both transports, progress, cancellation, pagination, capability and version negotiation) has prose documentation with code examples.
Policy Evaluation
1. Dependency Update Policy: PASS
Verdict: PASS
2. Roadmap: PASS
ROADMAP.md states the goal of a 100% conformance pass rate and SEP-1730 Tier 1, records the remaining work, declares legacy SSE transport intentionally out of scope, and describes how new spec revisions are tracked.
Verdict:
3. Versioning Policy: PASS (Tier 1) / N/A (Tier 2)
VERSIONING.md documents the Semantic Versioning scheme, what constitutes a breaking change, the post-1.0.0 guarantee that breaking changes ship only in major releases, the narrow exceptions (MCP spec-conformance fixes and security fixes), and how breaking changes are communicated (CHANGELOG.md in Keep a Changelog format, GitHub Releases, deprecation warnings where practical).
Verdict:
Overall Policy Summary
Changes Since the Tier 3 Assessment (#2340)
Remaining Gaps Toward Tier 1