Class: Explicit::MCPServer::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/explicit/mcp_server/builder.rb

Instance Method Summary collapse

Constructor Details

#initializeBuilder

Returns a new instance of Builder.



4
5
6
# File 'lib/explicit/mcp_server/builder.rb', line 4

def initialize
  @tools = []
end

Instance Method Details

#add(request) ⇒ Object



14
15
16
# File 'lib/explicit/mcp_server/builder.rb', line 14

def add(request)
  @tools << ::Explicit::MCPServer::Tool.new(request)
end

#call(env) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/explicit/mcp_server/builder.rb', line 18

def call(env)
  request = ::Explicit::MCPServer::Request.from_rack_env(env)

  if respond_to?(:authorize)
    params = ::Rack::Utils.parse_nested_query(env["QUERY_STRING"]).with_indifferent_access

    case authorize(params:, headers: request.headers)
    in { headers: }
      request.headers.merge!(headers)
    in false
      return [403, {}, []]
    else
      nil
    end
  end

  response = router.handle(request)

  [200, { "Content-Type" => "application/json" }, [response.to_json]]
end

#get_nameObject



9
# File 'lib/explicit/mcp_server/builder.rb', line 9

def get_name = @name

#get_versionObject



12
# File 'lib/explicit/mcp_server/builder.rb', line 12

def get_version = @version

#name(name) ⇒ Object



8
# File 'lib/explicit/mcp_server/builder.rb', line 8

def name(name) = (@name = name)

#proxy_with(headers:) ⇒ Object



47
48
49
# File 'lib/explicit/mcp_server/builder.rb', line 47

def proxy_with(headers:)
  { headers: }
end

#routerObject



39
40
41
42
43
44
45
# File 'lib/explicit/mcp_server/builder.rb', line 39

def router
  @router ||= ::Explicit::MCPServer::Router.new(
    name: @name,
    version: @version,
    tools: @tools
  )
end

#version(version) ⇒ Object



11
# File 'lib/explicit/mcp_server/builder.rb', line 11

def version(version) = (@version = version)