Class: StimulusPlumbers::MCP::Plugins::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/stimulus_plumbers/mcp/plugins/base.rb

Overview

Plugin contract: required members raise NotImplementedError; optional members have defaults.

Defined Under Namespace

Classes: NotFound

Class Method Summary collapse

Class Method Details

.dynamic_resource_templatesObject



28
29
30
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 28

def dynamic_resource_templates
  []
end

.json_resource(uri, data) ⇒ Object



39
40
41
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 39

def json_resource(uri, data)
  [{ uri: uri, mimeType: "application/json", text: JSON.generate(data) }]
end

.loaderObject

Raises:

  • (NotImplementedError)


16
17
18
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 16

def loader
  raise NotImplementedError, "#{name} must define .loader"
end

.loader_keyObject

Raises:

  • (NotImplementedError)


12
13
14
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 12

def loader_key
  raise NotImplementedError, "#{name} must define .loader_key"
end

.not_found(message) ⇒ Object



35
36
37
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 35

def not_found(message)
  NotFound.new(message)
end

.read(_uri, _store) ⇒ Object

Raises:

  • (NotImplementedError)


20
21
22
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 20

def read(_uri, _store)
  raise NotImplementedError, "#{name} must define .read"
end

.register_tools(_server, _store) ⇒ Object



32
33
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 32

def register_tools(_server, _store)
end

.static_resourcesObject



24
25
26
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 24

def static_resources
  []
end

.text_resource(uri, mime_type, text) ⇒ Object



43
44
45
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 43

def text_resource(uri, mime_type, text)
  [{ uri: uri, mimeType: mime_type, text: text }]
end

.text_tool(server, name:, description:, input_schema: nil, &block) ⇒ Object

Declaring **args makes the MCP gem inject :server_context, which tool blocks don't want — drop it.



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 48

def text_tool(server, name:, description:, input_schema: nil, &block)
  server.define_tool(name: name, description: description, input_schema: input_schema) do |**args|
    args.delete(:server_context)
    result = block.call(**args)
    if result.is_a?(NotFound)
      ::MCP::Tool::Response.new([{ type: "text", text: JSON.generate(error: result.message) }], error: true)
    else
      ::MCP::Tool::Response.new([{ type: "text", text: result }])
    end
  end
end