Class: ToolRegistry::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/stack-service-base/mcp_tool_registry.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Definition

Returns a new instance of Definition.



9
10
11
12
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 9

def initialize(name)
  @name = name.to_s
  @inputs = {}
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 7

def name
  @name
end

Instance Method Details

#call(arguments) ⇒ Object

Raises:



46
47
48
49
50
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 46

def call(arguments)
  raise JsonRpcError.new(code: 500, message: "Tool #{name} missing executor") unless @executor

  ExecutionContext.new.instance_exec(symbolize_keys(arguments || {}), &@executor)
end

#description(text = nil) ⇒ Object



14
15
16
17
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 14

def description(text = nil)
  return @description if text.nil?
  @description = text
end

#execute(&block) ⇒ Object



36
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 36

def execute(&block) = @executor = block

#input(fields = {}) ⇒ Object



19
20
21
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 19

def input(fields = {})
  @inputs.merge!(fields.transform_keys(&:to_s))
end

#input_schemaObject



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 23

def input_schema
  properties = {}
  required = []

  @inputs.each do |field, config|
    cfg = config.transform_keys { |key| key.is_a?(Symbol) ? key : key.to_sym }
    required << field if cfg.delete(:required)
    properties[field] = cfg.transform_keys(&:to_s)
  end

  { type: "object", properties: properties, required: required }
end

#to_hObject



38
39
40
41
42
43
44
# File 'lib/stack-service-base/mcp_tool_registry.rb', line 38

def to_h
  {
    name: name,
    description: description,
    inputSchema: input_schema
  }
end