Module: ActionMCP::Server::Capabilities
- Included in:
- TransportHandler
- Defined in:
- lib/action_mcp/server/capabilities.rb
Instance Method Summary collapse
-
#send_capabilities(request_id, params = {}) ⇒ Hash
Handles the ‘initialize’ request.
Instance Method Details
#send_capabilities(request_id, params = {}) ⇒ Hash
Handles the ‘initialize’ request. Validates parameters, checks protocol version, stores client info, initializes the session, and returns the server capabilities payload or an error payload.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/action_mcp/server/capabilities.rb', line 12 def send_capabilities(request_id, params = {}) client_protocol_version = params["protocolVersion"] client_info = params["clientInfo"] client_capabilities = params["capabilities"] session_id = params["sessionId"] unless client_protocol_version.is_a?(String) && client_protocol_version.present? return send_jsonrpc_error(request_id, :invalid_params, "Missing or invalid 'protocolVersion'") end unless ActionMCP::SUPPORTED_VERSIONS.include?(client_protocol_version) = "Unsupported protocol version. Client requested '#{client_protocol_version}' but server supports #{ActionMCP::SUPPORTED_VERSIONS.join(', ')}" error_data = { supported: ActionMCP::SUPPORTED_VERSIONS, requested: client_protocol_version } return send_jsonrpc_error(request_id, :invalid_params, , error_data) end unless client_info.is_a?(Hash) return send_jsonrpc_error(request_id, :invalid_params, "Missing or invalid 'clientInfo'") end unless client_capabilities.is_a?(Hash) return send_jsonrpc_error(request_id, :invalid_params, "Missing or invalid 'capabilities'") end # Handle session resumption if sessionId provided if session_id existing_session = ActionMCP::Session.find_by(id: session_id) if existing_session&.initialized? # Resume existing session - update transport reference transport.instance_variable_set(:@session, existing_session) # Return existing session info capabilities_payload = existing_session.server_capabilities_payload capabilities_payload[:protocolVersion] = client_protocol_version return send_jsonrpc_response(request_id, result: capabilities_payload) end end # Create new session if not resuming session.store_client_info(client_info) session.store_client_capabilities(client_capabilities) session.set_protocol_version(client_protocol_version) unless session.initialize! return send_jsonrpc_error(request_id, :internal_error, "Failed to initialize session") end capabilities_payload = session.server_capabilities_payload capabilities_payload[:protocolVersion] = client_protocol_version send_jsonrpc_response(request_id, result: capabilities_payload) end |