Class: DocOpsLab::MCP::ResourcePack

Inherits:
Object
  • Object
show all
Defined in:
lib/docopslab/mcp/resource_pack.rb

Overview

Resolves MCP resources from a YAML manifest and packaged assets.

Direct Known Subclasses

ReleaseHx::MCP::ResourcePack

Defined Under Namespace

Classes: Resource

Instance Method Summary collapse

Constructor Details

#initialize(manifest:, asset_root:) ⇒ ResourcePack

Returns a new instance of ResourcePack.

Raises:

  • (ArgumentError)


9
10
11
12
13
14
# File 'lib/docopslab/mcp/resource_pack.rb', line 9

def initialize manifest:, asset_root:
  raise ArgumentError, 'asset_root is required' if asset_root.nil? || asset_root == ''

  @manifest = manifest
  @asset_root = asset_root
end

Instance Method Details

#find(uri) ⇒ Object



32
33
34
# File 'lib/docopslab/mcp/resource_pack.rb', line 32

def find uri
  resources.find { |entry| entry.uri == uri }
end

#listObject



28
29
30
# File 'lib/docopslab/mcp/resource_pack.rb', line 28

def list
  resources.map(&:uri)
end

#read(uri) ⇒ Object

Raises:

  • (ArgumentError)


36
37
38
39
40
41
42
43
# File 'lib/docopslab/mcp/resource_pack.rb', line 36

def read uri
  resource = find(uri)
  raise ArgumentError, "Unknown MCP resource: #{uri}" unless resource

  raise Errno::ENOENT, "Missing MCP resource file: #{resource.path}" unless File.exist?(resource.path)

  File.read(resource.path)
end

#resourcesObject



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/docopslab/mcp/resource_pack.rb', line 16

def resources
  @manifest.resources.map do |entry|
    normalized = @manifest.normalize_resource(entry)
    Resource.new(
      uri: normalized[:uri],
      name: normalized[:name],
      description: normalized[:description],
      mime_type: normalized[:mime_type],
      path: File.join(@asset_root, normalized[:packaged_name]))
  end
end