Merge pull request #179 from koic/add_draft_version

Add "Draft" protocol version to supported protocol versions
This commit is contained in:
Koichi ITO 2025-11-22 01:57:51 +09:00 • committed by GitHub
commit 11aea51c42
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 106 additions and 9 deletions

View file

@ -2,8 +2,10 @@
module MCP
class Configuration
DEFAULT_PROTOCOL_VERSION = "2025-06-18"
SUPPORTED_PROTOCOL_VERSIONS = [DEFAULT_PROTOCOL_VERSION, "2025-03-26", "2024-11-05"]
# DRAFT-2025-v3 is the latest draft protocol version:
# https://github.com/modelcontextprotocol/modelcontextprotocol/blob/14ec41c/schema/draft/schema.ts#L15
DRAFT_PROTOCOL_VERSION = "DRAFT-2025-v3"
SUPPORTED_STABLE_PROTOCOL_VERSIONS = ["2025-06-18", "2025-03-26", "2024-11-05"]
attr_writer :exception_reporter, :instrumentation_callback
@ -33,7 +35,7 @@ module MCP
end
def protocol_version
@protocol_version || DEFAULT_PROTOCOL_VERSION
@protocol_version || DRAFT_PROTOCOL_VERSION
end
def protocol_version?
@ -93,8 +95,8 @@ module MCP
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]}"
unless SUPPORTED_STABLE_PROTOCOL_VERSIONS.include?(protocol_version)
message = "protocol_version must be #{SUPPORTED_STABLE_PROTOCOL_VERSIONS[0...-1].join(", ")}, or #{SUPPORTED_STABLE_PROTOCOL_VERSIONS[-1]}"
raise ArgumentError, message
end
end

View file

@ -106,6 +106,8 @@ module MCP
def define_prompt(name: nil, title: nil, description: nil, arguments: [], &block)
prompt = Prompt.define(name:, title:, description:, arguments:, &block)
@prompts[prompt.name_value] = prompt
validate!
end
def define_custom_method(method_name:, &block)
@ -171,6 +173,21 @@ module MCP
private
def validate!
# NOTE: The draft protocol version is the next version after 2025-03-26.
if @configuration.protocol_version <= "2025-03-26"
if server_info.key?(:title)
message = "Error occurred in server_info. `title` is not supported in protocol version 2025-03-26 or earlier"
raise ArgumentError, message
end
primitive_titles = [@tools.values, @prompts.values, @resources, @resource_templates].flatten.map(&:title)
if primitive_titles.any?
message = "Error occurred in #{primitive_titles.join(", ")}. `title` is not supported in protocol version 2025-03-26 or earlier"
raise ArgumentError, message
end
end
if @configuration.protocol_version == "2024-11-05"
if @instructions
message = "`instructions` supported by protocol version 2025-03-26 or higher"