Class: AdminSuite::Mcp::Tools::DescribeResources
- Inherits:
-
MCP::Tool
- Object
- MCP::Tool
- AdminSuite::Mcp::Tools::DescribeResources
- Defined in:
- lib/admin_suite/mcp/tools/describe_resources.rb
Class Method Summary collapse
Class Method Details
.call(server_context:) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/admin_suite/mcp/tools/describe_resources.rb', line 12 def self.call(server_context:) AdminSuite::Mcp.instrument(tool: "describe_resources", actor: server_context[:actor], request: server_context[:request]) do allowed = false if AdminSuite.config..nil? || Auth.normalize_actor(server_context[:actor]).nil? [Authorization.denied_response, nil, false] else allowed = true payload = Authorization .readable_resources(actor: server_context[:actor], request: server_context[:request]) .map { |config| describe(config) } response = ::MCP::Tool::Response.new([{ type: "text", text: Serializer.dump(payload) }]) [response, payload.size, true] end rescue StandardError => e Rails.logger&.warn("AdminSuite MCP describe_resources failed: #{e.class}: #{e.}") [Authorization.error_response("describe_resources failed"), nil, allowed] end end |
.describe(config) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/admin_suite/mcp/tools/describe_resources.rb', line 31 def self.describe(config) index = config.index_config { name: config.resource_name, model: config.model_class.to_s, portal: config.portal_name, section: config.section_name, fields: Array(index&.columns_list).map do |column| { name: column.name, label: column.header, type: column.type } end, filters: Array(index&.filters_list).map(&:name), sortable: Array(index&.sortable_fields), searchable: Array(index&.searchable_fields), default_page_size: index&.per_page, actions: declared_actions(config) } end |