Class: MCPClient::Root

Inherits:
Object
  • Object
show all
Defined in:
lib/mcp_client/root.rb

Overview

Represents an MCP Root - a URI that defines a boundary where servers can operate Roots are declared by clients to inform servers about relevant resources and their locations

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri:, name: nil, meta: nil) ⇒ Root

Create a new Root

Parameters:

  • uri (String)

    The URI for the root. Per the MCP specification this MUST be a file:// URI ("This MUST be a file:// URI in the current specification" - client/roots.mdx, 2025-11-25)

  • name (String, nil) (defaults to: nil)

    Optional human-readable name for display purposes

  • meta (Hash, nil) (defaults to: nil)

    Optional _meta field attached to the root (schema.ts Root._meta)

Raises:

  • (ArgumentError)

    if uri is not a valid file:// URI or contains '..' path segments



18
19
20
21
22
23
24
25
26
# File 'lib/mcp_client/root.rb', line 18

def initialize(uri:, name: nil, meta: nil)
  validate_uri!(uri)
  # Root._meta is an object of arbitrary keys per the schema
  raise ArgumentError, "Root _meta must be a Hash, got #{meta.class}" if meta && !meta.is_a?(Hash)

  @uri = uri
  @name = name
  @meta = meta
end

Instance Attribute Details

#metaObject (readonly)

Returns the value of attribute meta.



9
10
11
# File 'lib/mcp_client/root.rb', line 9

def meta
  @meta
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/mcp_client/root.rb', line 9

def name
  @name
end

#uriObject (readonly)

Returns the value of attribute uri.



9
10
11
# File 'lib/mcp_client/root.rb', line 9

def uri
  @uri
end

Class Method Details

.from_json(json) ⇒ Root

Create a Root from a JSON hash

Parameters:

  • json (Hash)

    The JSON hash with 'uri' and optional 'name' and '_meta' keys

Returns:

Raises:

  • (ArgumentError)

    if the uri is missing or not a valid file:// URI



32
33
34
35
36
37
38
# File 'lib/mcp_client/root.rb', line 32

def self.from_json(json)
  new(
    uri: json['uri'] || json[:uri],
    name: json['name'] || json[:name],
    meta: json['_meta'] || json[:_meta]
  )
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?

Check equality



56
57
58
59
60
# File 'lib/mcp_client/root.rb', line 56

def ==(other)
  return false unless other.is_a?(Root)

  uri == other.uri && name == other.name && meta == other.meta
end

#hashObject



64
65
66
# File 'lib/mcp_client/root.rb', line 64

def hash
  [uri, name, meta].hash
end

#inspectObject



73
74
75
# File 'lib/mcp_client/root.rb', line 73

def inspect
  "#<MCPClient::Root uri=#{uri.inspect} name=#{name.inspect}>"
end

#to_hHash

Convert to JSON-serializable hash

Returns:

  • (Hash)


42
43
44
45
46
47
# File 'lib/mcp_client/root.rb', line 42

def to_h
  result = { 'uri' => @uri }
  result['name'] = @name if @name
  result['_meta'] = @meta if @meta
  result
end

#to_jsonString

Convert to JSON string

Returns:

  • (String)


51
52
53
# File 'lib/mcp_client/root.rb', line 51

def to_json(*)
  to_h.to_json(*)
end

#to_sObject

String representation



69
70
71
# File 'lib/mcp_client/root.rb', line 69

def to_s
  name ? "#{name} (#{uri})" : uri
end