feat: deprecate roots sampling and logging
Warn when Roots, Sampling, or Logging APIs are used with MCP protocol version 2026-07-28 or newer. Add a shared protocol deprecation helper, YARD deprecation notes, and regression tests covering warnings at and after the deprecation threshold and no warnings for older or never-established protocol versions. Closes https://github.com/modelcontextprotocol/ruby-sdk/issues/390 Co-authored-by: Qlaw <noreply@qlaw.quick.shopify.io>
This commit is contained in:
parent
f4d939d349
commit
6a43d3d6fb
1 changed files with 508 additions and 3 deletions
|
|
@ -11,6 +11,8 @@ require "mcp/client"
|
|||
module MCP
|
||||
class Client
|
||||
class HTTPTest < Minitest::Test
|
||||
include DeprecationWarningTestHelper
|
||||
|
||||
def test_raises_load_error_when_faraday_not_available
|
||||
client = HTTP.new(url: url)
|
||||
|
||||
|
|
@ -1705,6 +1707,44 @@ module MCP
|
|||
assert_requested(notification_stub)
|
||||
end
|
||||
|
||||
def test_connect_warns_for_deprecated_capabilities_when_negotiated_protocol_version_is_2026_07_28
|
||||
notification_stub = stub_notification
|
||||
|
||||
init_stub = stub_request(:post, url)
|
||||
.with { |req| JSON.parse(req.body)["method"] == "initialize" }
|
||||
.to_return(
|
||||
status: 200,
|
||||
headers: { "Content-Type" => "application/json" },
|
||||
body: { result: { protocolVersion: "2026-07-28" } }.to_json,
|
||||
)
|
||||
|
||||
assert_deprecation_warning(/MCP Roots .*2026-07-28.*MCP Sampling .*2026-07-28/m) do
|
||||
client.connect(capabilities: { roots: { listChanged: true }, sampling: {} })
|
||||
end
|
||||
|
||||
assert_requested(init_stub)
|
||||
assert_requested(notification_stub)
|
||||
end
|
||||
|
||||
def test_connect_does_not_warn_for_deprecated_capabilities_when_negotiated_protocol_version_is_older
|
||||
notification_stub = stub_notification
|
||||
|
||||
init_stub = stub_request(:post, url)
|
||||
.with { |req| JSON.parse(req.body)["method"] == "initialize" }
|
||||
.to_return(
|
||||
status: 200,
|
||||
headers: { "Content-Type" => "application/json" },
|
||||
body: { result: { protocolVersion: "2025-11-25" } }.to_json,
|
||||
)
|
||||
|
||||
assert_no_deprecation_warning do
|
||||
client.connect(capabilities: { roots: { listChanged: true }, sampling: {} })
|
||||
end
|
||||
|
||||
assert_requested(init_stub)
|
||||
assert_requested(notification_stub)
|
||||
end
|
||||
|
||||
def test_connect_is_idempotent
|
||||
init_stub = stub_initialize
|
||||
notification_stub = stub_notification
|
||||
|
|
|
|||
Loading…
Reference in a new issue