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



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

def dynamic_resource_templates = []

.json_resource(uri, data) ⇒ Object



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

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



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

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



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

def register_tools(_server, _store); end

.static_resourcesObject



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

def static_resources = []

.text_resource(uri, mime_type, text) ⇒ Object



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

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.



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/stimulus_plumbers/mcp/plugins/base.rb', line 43

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