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 |
# 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"] unless client_protocol_version.is_a?(String) return send_jsonrpc_error(request_id, :invalid_params, "Missing or invalid 'protocolVersion'") end unless client_info.is_a?(Hash) && client_info["name"].is_a?(String) && client_info["version"].is_a?(String) 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 negotiated_version = if ActionMCP::SUPPORTED_VERSIONS.include?(client_protocol_version) client_protocol_version else ActionMCP::LATEST_VERSION end session.store_client_info(client_info) session.store_client_capabilities(client_capabilities) session.set_protocol_version(negotiated_version) unless session.begin_initialization! return send_jsonrpc_error(request_id, :invalid_request, "Session has already started initialization") end capabilities_payload = session.server_capabilities_payload capabilities_payload[:protocolVersion] = negotiated_version send_jsonrpc_response(request_id, result: capabilities_payload) end |