Merge pull request #107 from pusewicz/response-keyword-boolean
Response error keyword argument
This commit is contained in:
commit
002df2c774
3 changed files with 94 additions and 6 deletions
|
|
@ -3,15 +3,26 @@
|
|||
module MCP
|
||||
class Tool
|
||||
class Response
|
||||
attr_reader :content, :is_error
|
||||
NOT_GIVEN = Object.new.freeze
|
||||
|
||||
attr_reader :content
|
||||
|
||||
def initialize(content, deprecated_error = NOT_GIVEN, error: false)
|
||||
if deprecated_error != NOT_GIVEN
|
||||
warn("Passing `error` with the 2nd argument of `Response.new` is deprecated. Use keyword argument like `Response.new(content, error: error)` instead.", uplevel: 1)
|
||||
error = deprecated_error
|
||||
end
|
||||
|
||||
def initialize(content, is_error = false)
|
||||
@content = content
|
||||
@is_error = is_error
|
||||
@error = error
|
||||
end
|
||||
|
||||
def error?
|
||||
!!@error
|
||||
end
|
||||
|
||||
def to_h
|
||||
{ content:, isError: is_error }.compact
|
||||
{ content:, isError: error? }.compact
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
77
test/mcp/tool/response_test.rb
Normal file
77
test/mcp/tool/response_test.rb
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "test_helper"
|
||||
|
||||
module MCP
|
||||
class Tool
|
||||
class ResponseTest < ActiveSupport::TestCase
|
||||
test "#initialize with content" do
|
||||
content = [{
|
||||
type: "text",
|
||||
text: "Unauthorized",
|
||||
}]
|
||||
response = Response.new(content)
|
||||
|
||||
assert_equal content, response.content
|
||||
refute response.error?
|
||||
end
|
||||
|
||||
test "#initialize with content and error set to true" do
|
||||
content = [{
|
||||
type: "text",
|
||||
text: "Unauthorized",
|
||||
}]
|
||||
response = Response.new(content, error: true)
|
||||
|
||||
assert_equal content, response.content
|
||||
assert response.error?
|
||||
end
|
||||
|
||||
test "#initialize with content and error explicitly set to false" do
|
||||
content = [{
|
||||
type: "text",
|
||||
text: "Unauthorized",
|
||||
}]
|
||||
response = Response.new(content, error: false)
|
||||
|
||||
assert_equal content, response.content
|
||||
refute response.error?
|
||||
end
|
||||
|
||||
test "#error? for a standard response" do
|
||||
response = Response.new(nil, error: false)
|
||||
refute response.error?
|
||||
end
|
||||
|
||||
test "#error? for an error response" do
|
||||
response = Response.new(nil, error: true)
|
||||
assert response.error?
|
||||
end
|
||||
|
||||
test "#to_h for a standard response" do
|
||||
content = [{
|
||||
type: "text",
|
||||
text: "Unauthorized",
|
||||
}]
|
||||
response = Response.new(content)
|
||||
actual = response.to_h
|
||||
|
||||
assert_equal [:content, :isError].sort, actual.keys.sort
|
||||
assert_equal content, actual[:content]
|
||||
refute actual[:isError]
|
||||
end
|
||||
|
||||
test "#to_h for an error response" do
|
||||
content = [{
|
||||
type: "text",
|
||||
text: "Unauthorized",
|
||||
}]
|
||||
response = Response.new(content, error: true)
|
||||
actual = response.to_h
|
||||
assert_equal [:content, :isError].sort, actual.keys.sort
|
||||
assert_equal content, actual[:content]
|
||||
assert actual[:isError]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -45,7 +45,7 @@ module MCP
|
|||
tool = TestTool
|
||||
response = tool.call(message: "test")
|
||||
assert_equal response.content, [{ type: "text", content: "OK" }]
|
||||
assert_equal response.is_error, false
|
||||
refute response.error?
|
||||
end
|
||||
|
||||
test "allows declarative definition of tools as classes" do
|
||||
|
|
@ -250,7 +250,7 @@ module MCP
|
|||
tool = TypedTestTool
|
||||
response = tool.call(message: "test")
|
||||
assert_equal response.content, [{ type: "text", content: "OK" }]
|
||||
assert_equal response.is_error, false
|
||||
refute response.error?
|
||||
end
|
||||
|
||||
class TestToolWithoutServerContext < Tool
|
||||
|
|
|
|||
Loading…
Reference in a new issue