Module: MCP::Server

Defined in:
lib/mcp/server.rb,
lib/mcp/server/http.rb,
lib/mcp/server/tool.rb,
lib/mcp/server/stdio/reader.rb,
lib/mcp/server/stdio/writer.rb,
lib/mcp/server/request_handler.rb,
lib/mcp/server/resource_template.rb

Defined Under Namespace

Modules: Stdio Classes: Http, RequestHandler, ResourceTemplate, Tool

Class Method Summary collapse

Class Method Details

.configure(&block) ⇒ Object



7
8
9
# File 'lib/mcp/server.rb', line 7

def configure(&block)
  self.instance_eval(&block) if block_given?
end

.httpObject



48
49
50
# File 'lib/mcp/server.rb', line 48

def http
  Http.new
end

.list_tools(&block) ⇒ Object



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

def list_tools(&block)
  request_handlers["tools/list"] = block
end

.request_handlersObject



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

def request_handlers
  @request_handlers ||= {}
end

.resource(uri, &block) ⇒ Object



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

def resource(uri, &block)
  resource_template = ResourceTemplate.new(uri)
  resource_template.instance_eval(&block)
  resource_templates[uri] = resource_template
end

.resource_templatesObject



24
25
26
# File 'lib/mcp/server.rb', line 24

def resource_templates
  @resource_templates ||= {}
end

.stdioObject



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/mcp/server.rb', line 52

def stdio
  reader = Stdio::Reader.new
  writer = Stdio::Writer.new
  request_handler = RequestHandler.new

  loop do
    reader.read do |request|
      response = request_handler.handle_request(request)
      writer.write(response)
    end
  end
end

.tool(name, &block) ⇒ Object



32
33
34
35
36
# File 'lib/mcp/server.rb', line 32

def tool(name, &block)
  tool = Tool.new(name)
  tool.instance_eval(&block)
  tools[name] = tool
end

.tools(tool_list = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/mcp/server.rb', line 11

def tools(tool_list = nil)
  if tool_list.nil?
    @tools ||= {}
  elsif tool_list.is_a?(Array)
    @tools ||= {}
    tool_list.each do |tool|
      @tools[tool.name] = tool
    end
  else
    raise ArgumentError, "Expected an array of tools"
  end
end