Module: DynamicMcp::Resources::ResourceGenerator

Defined in:
lib/dynamic_mcp/resources/resource_generator.rb

Class Method Summary collapse

Class Method Details

.define_resource(file) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/dynamic_mcp/resources/resource_generator.rb', line 26

def self.define_resource(file)
  parsed = FrontMatterParser::Parser.parse_file(file)

  klass = Class.new(FastMcp::Resource) do
    uri parsed.front_matter["uri"]
    resource_name parsed.front_matter["resource_name"]
    mime_type parsed.front_matter["mime_type"]
    @content = parsed.content

    def self.content
      @content
    end

    def content
      self.class.content
    end
  end

  klass
end

.generate(config) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/dynamic_mcp/resources/resource_generator.rb', line 7

def self.generate(config)
  resource_paths = config["dynamic_mcp"]["source_data"]["resources"]
  resource_files = resource_paths.flat_map { |path| ::DynamicMcp::Utilities::FileOps.get_all_files(config["server_root"], path) }

  resource_files.map do |file|
    ext = File.extname(file)
    
    if ext == ".rb"
      require file
      
      class_name = File.basename(file, ".rb").split('_').map(&:capitalize).join
      klass = Object.const_get(class_name)
      klass.ancestors.include?(FastMcp::Resource) ? klass : nil
    elsif ext == ".md" || ext == ".markdown"
      define_resource(file)
    end
  end
end