Class: StimulusPlumbers::MCP::Plugins::ControllerDocs

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

Overview

Shares the controller:// scheme with Plugins::ControllerSchema, distinguished by the docs/ path segment (ControllerSchema is per-identifier schema data; docs/ is narrative markdown, grouped by controller family, not individual identifier).

Class Method Summary collapse

Methods inherited from Base

json_resource, not_found, text_resource, text_tool

Class Method Details

.dynamic_resource_templatesObject



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/stimulus_plumbers/mcp/plugins/controller_docs.rb', line 31

def dynamic_resource_templates
  [
    ::MCP::ResourceTemplate.new(
      uri_template: "controller://docs/{name}",
      name:         "controller-doc",
      description:  "Narrative usage doc for a controller family, for plain-JS/Hotwire consumers " \
                    "without Rails helpers",
      mime_type:    "text/markdown"
    )
  ].freeze
end

.loaderObject



15
16
17
# File 'lib/stimulus_plumbers/mcp/plugins/controller_docs.rb', line 15

def loader
  ControllerDocsLoader
end

.loader_keyObject



11
12
13
# File 'lib/stimulus_plumbers/mcp/plugins/controller_docs.rb', line 11

def loader_key
  :controller_docs
end

.read(uri, store) ⇒ Object



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

def read(uri, store)
  docs = store[:controller_docs]

  case uri
  when "controller://docs"
    json_resource(uri, docs.keys)
  when %r{\Acontroller://docs/(.+)\z}
    key = Regexp.last_match(1).to_sym
    docs[key] ? text_resource(uri, "text/markdown", docs[key]) : missing(uri, key)
  end
end

.register_tools(server, store) ⇒ Object



55
56
57
58
59
60
# File 'lib/stimulus_plumbers/mcp/plugins/controller_docs.rb', line 55

def register_tools(server, store)
  docs = store[:controller_docs]

  register_list_controller_docs(server, docs)
  register_get_controller_docs(server, docs)
end

.static_resourcesObject



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/stimulus_plumbers/mcp/plugins/controller_docs.rb', line 19

def static_resources
  [
    ::MCP::Resource.new(
      uri:         "controller://docs",
      name:        "controller-docs-index",
      description: "Index of JS controller narrative docs, grouped by controller family " \
                   "(e.g. :calendar covers calendar-month/-year/-decade)",
      mime_type:   "application/json"
    )
  ].freeze
end