Class: VectorMCP::Transport::SSE::MessageHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/vector_mcp/transport/sse/message_handler.rb

Overview

Handles JSON-RPC message processing for POST requests. Processes incoming messages and sends responses via SSE streams.

Instance Method Summary collapse

Constructor Details

#initialize(server, session, logger) ⇒ MessageHandler

Initializes a new message handler.

Parameters:



16
17
18
19
20
# File 'lib/vector_mcp/transport/sse/message_handler.rb', line 16

def initialize(server, session, logger)
  @server = server
  @session = session
  @logger = logger
end

Instance Method Details

#handle_post_message(env, client_conn) ⇒ Array

Handles a POST message request from a client.

Parameters:

  • env (Hash)

    Rack environment hash

  • client_conn (ClientConnection)

    The client connection

Returns:

  • (Array)

    Rack response triplet



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/vector_mcp/transport/sse/message_handler.rb', line 27

def handle_post_message(env, client_conn)
  request_body = read_request_body(env)
  return error_response(nil, -32_600, "Request body is empty") if request_body.nil? || request_body.empty?

  message = parse_json_message(request_body, client_conn)
  return message if message.is_a?(Array) # Error response

  process_message(message, client_conn)
rescue VectorMCP::ProtocolError => e
  @logger.error { "Protocol error for client #{client_conn.session_id}: #{e.message}" }
  request_id = e.request_id || message&.dig("id")
  enqueue_error_response(client_conn, request_id, e.code, e.message, e.details)
  error_response(request_id, e.code, e.message, e.details)
rescue StandardError => e
  @logger.error { "Unexpected error for client #{client_conn.session_id}: #{e.message}\n#{e.backtrace.join("\n")}" }
  request_id = message&.dig("id")
  enqueue_error_response(client_conn, request_id, -32_603, "Internal server error")
  error_response(request_id, -32_603, "Internal server error")
end