Class: Tools::FindPublicationsTool
- Inherits:
-
ApplicationTool
- Object
- MCP::Tool
- ApplicationTool
- Tools::FindPublicationsTool
- Defined in:
- app/mcp/tools/find_publications_tool.rb
Overview
MCP Tool for finding publications (PDFs, manuals, datasheets).
Publications contain installation guides, technical specifications, and product documentation.
Class Method Summary collapse
-
.call(query:, product_line: nil, limit: 5, _server_context: nil) ⇒ MCP::Tool::Response
Search current, fully extracted publication embeddings.
Class Method Details
.call(query:, product_line: nil, limit: 5, _server_context: nil) ⇒ MCP::Tool::Response
Search current, fully extracted publication embeddings.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'app/mcp/tools/find_publications_tool.rb', line 48 def call(query:, product_line: nil, limit: 5, _server_context: nil) limit = limit.to_i.clamp(1, 20) results = SemanticSearchService.search( query, limit: limit * 3, types: ['publications'], published_only: true ) candidates = results.filter_map do |result| publication = result[:record] next unless publication.is_a?(Item) && publication.is_publication? next unless publication.search_text.present? && publication.literature.present? next unless publication.publication_visible_to_public? next if publication.(:primary, locale: result[:embedding].locale) publication end if product_line.present? ActiveRecord::Associations::Preloader.new( records: candidates, associations: [:product_lines, { specific_items: :product_lines }] ).call end publications = candidates .select { |publication| product_line.blank? || matches_product_line?(publication, product_line) } .first(limit) json_response( query: query, product_line_filter: product_line, total_results: publications.size, publications: publications.map { |p| format_publication(p) } ) end |