Merge pull request #145 from koic/add_validation_to_mcp_configuration_setters
Add validation to `MCP::Configuration` setters
This commit is contained in:
commit
010ae74edc
2 changed files with 43 additions and 11 deletions
|
|
@ -5,20 +5,29 @@ module MCP
|
||||||
DEFAULT_PROTOCOL_VERSION = "2025-06-18"
|
DEFAULT_PROTOCOL_VERSION = "2025-06-18"
|
||||||
SUPPORTED_PROTOCOL_VERSIONS = [DEFAULT_PROTOCOL_VERSION, "2025-03-26", "2024-11-05"]
|
SUPPORTED_PROTOCOL_VERSIONS = [DEFAULT_PROTOCOL_VERSION, "2025-03-26", "2024-11-05"]
|
||||||
|
|
||||||
attr_writer :exception_reporter, :instrumentation_callback, :protocol_version, :validate_tool_call_arguments
|
attr_writer :exception_reporter, :instrumentation_callback
|
||||||
|
|
||||||
def initialize(exception_reporter: nil, instrumentation_callback: nil, protocol_version: nil,
|
def initialize(exception_reporter: nil, instrumentation_callback: nil, protocol_version: nil,
|
||||||
validate_tool_call_arguments: true)
|
validate_tool_call_arguments: true)
|
||||||
@exception_reporter = exception_reporter
|
@exception_reporter = exception_reporter
|
||||||
@instrumentation_callback = instrumentation_callback
|
@instrumentation_callback = instrumentation_callback
|
||||||
@protocol_version = protocol_version
|
@protocol_version = protocol_version
|
||||||
if protocol_version && !SUPPORTED_PROTOCOL_VERSIONS.include?(protocol_version)
|
if protocol_version
|
||||||
message = "protocol_version must be #{SUPPORTED_PROTOCOL_VERSIONS[0...-1].join(", ")}, or #{SUPPORTED_PROTOCOL_VERSIONS[-1]}"
|
validate_protocol_version!(protocol_version)
|
||||||
raise ArgumentError, message
|
|
||||||
end
|
|
||||||
unless validate_tool_call_arguments.is_a?(TrueClass) || validate_tool_call_arguments.is_a?(FalseClass)
|
|
||||||
raise ArgumentError, "validate_tool_call_arguments must be a boolean"
|
|
||||||
end
|
end
|
||||||
|
validate_value_of_validate_tool_call_arguments!(validate_tool_call_arguments)
|
||||||
|
|
||||||
|
@validate_tool_call_arguments = validate_tool_call_arguments
|
||||||
|
end
|
||||||
|
|
||||||
|
def protocol_version=(protocol_version)
|
||||||
|
validate_protocol_version!(protocol_version)
|
||||||
|
|
||||||
|
@protocol_version = protocol_version
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_tool_call_arguments=(validate_tool_call_arguments)
|
||||||
|
validate_value_of_validate_tool_call_arguments!(validate_tool_call_arguments)
|
||||||
|
|
||||||
@validate_tool_call_arguments = validate_tool_call_arguments
|
@validate_tool_call_arguments = validate_tool_call_arguments
|
||||||
end
|
end
|
||||||
|
|
@ -83,6 +92,19 @@ module MCP
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def validate_protocol_version!(protocol_version)
|
||||||
|
unless SUPPORTED_PROTOCOL_VERSIONS.include?(protocol_version)
|
||||||
|
message = "protocol_version must be #{SUPPORTED_PROTOCOL_VERSIONS[0...-1].join(", ")}, or #{SUPPORTED_PROTOCOL_VERSIONS[-1]}"
|
||||||
|
raise ArgumentError, message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_value_of_validate_tool_call_arguments!(validate_tool_call_arguments)
|
||||||
|
unless validate_tool_call_arguments.is_a?(TrueClass) || validate_tool_call_arguments.is_a?(FalseClass)
|
||||||
|
raise ArgumentError, "validate_tool_call_arguments must be a boolean"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def default_exception_reporter
|
def default_exception_reporter
|
||||||
@default_exception_reporter ||= ->(exception, server_context) {}
|
@default_exception_reporter ||= ->(exception, server_context) {}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,21 @@ module MCP
|
||||||
assert_equal Configuration::DEFAULT_PROTOCOL_VERSION, config.protocol_version
|
assert_equal Configuration::DEFAULT_PROTOCOL_VERSION, config.protocol_version
|
||||||
end
|
end
|
||||||
|
|
||||||
test "allows setting a custom protocol version" do
|
test "raises ArgumentError when protocol_version is not a supported protocol version" do
|
||||||
config = Configuration.new
|
config = Configuration.new
|
||||||
custom_version = "2025-03-27"
|
exception = assert_raises(ArgumentError) do
|
||||||
config.protocol_version = custom_version
|
custom_version = "2025-03-27"
|
||||||
assert_equal custom_version, config.protocol_version
|
config.protocol_version = custom_version
|
||||||
|
end
|
||||||
|
assert_equal("protocol_version must be 2025-06-18, 2025-03-26, or 2024-11-05", exception.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "raises ArgumentError when protocol_version is not a boolean value" do
|
||||||
|
config = Configuration.new
|
||||||
|
exception = assert_raises(ArgumentError) do
|
||||||
|
config.validate_tool_call_arguments = "true"
|
||||||
|
end
|
||||||
|
assert_equal("validate_tool_call_arguments must be a boolean", exception.message)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "merges protocol version from other configuration" do
|
test "merges protocol version from other configuration" do
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue