Class: LittleGhost::MCP::CatalogValidatingTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/little_ghost/mcp/client.rb

Overview

:nodoc:

Constant Summary collapse

MAX_SCHEMA_DEPTH =
128
MAX_SCHEMA_NODES =
100_000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transport) ⇒ CatalogValidatingTransport

Returns a new instance of CatalogValidatingTransport.



20
21
22
23
24
25
# File 'lib/little_ghost/mcp/client.rb', line 20

def initialize(transport)
  @transport = transport
  @catalog_schema_nodes = 0
  @catalog_mutex = Mutex.new
  define_connect if transport.respond_to?(:connect)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name) ⇒ Object



38
39
40
41
42
# File 'lib/little_ghost/mcp/client.rb', line 38

def method_missing(name, ...)
  return super unless transport.respond_to?(name)

  transport.public_send(name, ...)
end

Instance Attribute Details

#transportObject (readonly)

Returns the value of attribute transport.



18
19
20
# File 'lib/little_ghost/mcp/client.rb', line 18

def transport
  @transport
end

Instance Method Details

#respond_to_missing?(name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/little_ghost/mcp/client.rb', line 44

def respond_to_missing?(name, include_private = false)
  transport.respond_to?(name, include_private) || super
end

#send_request(request:, &sent) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/little_ghost/mcp/client.rb', line 27

def send_request(request:, &sent)
  method = request[:method] || request["method"]
  response = transport.send_request(request:, &sent)
  validate_catalog(response, reset: first_catalog_page?(request)) if method == "tools/list"
  response
rescue SystemStackError
  raise unless method == "tools/list"

  raise ::MCP::Client::ValidationError, "tools/list inputSchema exceeds the SDK nesting limit"
end