Merge pull request #153 from modelcontextprotocol/prompt-spec-compliance
fix `Prompt` type gaps with 2025-06-18 spec
This commit is contained in:
commit
f312695798
2 changed files with 86 additions and 10 deletions
|
|
@ -8,13 +8,20 @@ module MCP
|
|||
attr_reader :title_value
|
||||
attr_reader :description_value
|
||||
attr_reader :arguments_value
|
||||
attr_reader :meta_value
|
||||
|
||||
def template(args, server_context: nil)
|
||||
raise NotImplementedError, "Subclasses must implement template"
|
||||
end
|
||||
|
||||
def to_h
|
||||
{ name: name_value, title: title_value, description: description_value, arguments: arguments_value.map(&:to_h) }.compact
|
||||
{
|
||||
name: name_value,
|
||||
title: title_value,
|
||||
description: description_value,
|
||||
arguments: arguments_value&.map(&:to_h),
|
||||
_meta: meta_value,
|
||||
}.compact
|
||||
end
|
||||
|
||||
def inherited(subclass)
|
||||
|
|
@ -23,6 +30,7 @@ module MCP
|
|||
subclass.instance_variable_set(:@title_value, nil)
|
||||
subclass.instance_variable_set(:@description_value, nil)
|
||||
subclass.instance_variable_set(:@arguments_value, nil)
|
||||
subclass.instance_variable_set(:@meta_value, nil)
|
||||
end
|
||||
|
||||
def prompt_name(value = NOT_SET)
|
||||
|
|
@ -61,7 +69,15 @@ module MCP
|
|||
end
|
||||
end
|
||||
|
||||
def define(name: nil, title: nil, description: nil, arguments: [], &block)
|
||||
def meta(value = NOT_SET)
|
||||
if value == NOT_SET
|
||||
@meta_value
|
||||
else
|
||||
@meta_value = value
|
||||
end
|
||||
end
|
||||
|
||||
def define(name: nil, title: nil, description: nil, arguments: [], meta: nil, &block)
|
||||
Class.new(self) do
|
||||
prompt_name name
|
||||
title title
|
||||
|
|
@ -70,6 +86,7 @@ module MCP
|
|||
define_singleton_method(:template) do |args, server_context: nil|
|
||||
instance_exec(args, server_context:, &block)
|
||||
end
|
||||
meta meta
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -3,17 +3,22 @@
|
|||
module MCP
|
||||
class Prompt
|
||||
class Argument
|
||||
attr_reader :name, :description, :required, :arguments
|
||||
attr_reader :name, :title, :description, :required
|
||||
|
||||
def initialize(name:, description: nil, required: false)
|
||||
def initialize(name:, title: nil, description: nil, required: false)
|
||||
@name = name
|
||||
@title = title
|
||||
@description = description
|
||||
@required = required
|
||||
@arguments = arguments
|
||||
end
|
||||
|
||||
def to_h
|
||||
{ name:, description:, required: }.compact
|
||||
{
|
||||
name: name,
|
||||
title: title,
|
||||
description: description,
|
||||
required: required,
|
||||
}.compact
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue