Module: Legion::MCP::Utils

Defined in:
lib/legion/mcp/utils.rb

Overview

Lightweight summarization and formatting helpers extracted from LoggingSupport. These are pure functions — no logger dependency.

Class Method Summary collapse

Class Method Details

.blank?(value) ⇒ Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/legion/mcp/utils.rb', line 128

def blank?(value)
  value.nil? || value == '' || value == []
end

.format_fields(fields) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/legion/mcp/utils.rb', line 86

def format_fields(fields)
  fields.compact.filter_map do |key, value|
    next if blank?(value)

    "#{key}=#{format_value(value)}"
  end.join(' ')
end

.format_value(value) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/legion/mcp/utils.rb', line 94

def format_value(value)
  case value
  when String
    summarize_text(value).inspect
  when Symbol, Numeric, TrueClass, FalseClass
    value.inspect
  when Hash
    summarize_hash(value).inspect
  when Array
    summarize_array(value).inspect
  when NilClass
    'nil'
  else
    summarize_text(value.inspect).inspect
  end
end

.request_id_from(*sources) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/legion/mcp/utils.rb', line 10

def request_id_from(*sources)
  sources.compact.each do |source|
    next unless source.respond_to?(:[])

    %i[request_id correlation_id trace_id].each do |key|
      value = source[key]
      return value.to_s unless blank?(value)
    end

    %w[request_id correlation_id trace_id].each do |key|
      value = source[key]
      return value.to_s unless blank?(value)
    end
  end

  nil
end

.summarize_array(array, max_items: 6) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/legion/mcp/utils.rb', line 50

def summarize_array(array, max_items: 6)
  return '[]' unless array.is_a?(Array) && !array.empty?

  items = array.first(max_items).map { |value| summarize_value(value) }
  suffix = array.size > max_items ? " +#{array.size - max_items} more" : ''
  "[#{items.join(', ')}]#{suffix}"
end

.summarize_hash(hash, max_pairs: 6) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/legion/mcp/utils.rb', line 40

def summarize_hash(hash, max_pairs: 6)
  return '{}' unless hash.is_a?(Hash) && !hash.empty?

  pairs = hash.to_a.first(max_pairs).map do |key, value|
    "#{key}=#{summarize_value(value)}"
  end
  suffix = hash.size > max_pairs ? " +#{hash.size - max_pairs} more" : ''
  "{#{pairs.join(', ')}}#{suffix}"
end

.summarize_identity(identity) ⇒ Object



75
76
77
78
79
80
81
82
83
84
# File 'lib/legion/mcp/utils.rb', line 75

def summarize_identity(identity)
  case identity
  when Hash
    summarize_hash(identity, max_pairs: 4)
  when NilClass
    'none'
  else
    summarize_value(identity)
  end
end

.summarize_params(params, max_pairs: 6) ⇒ Object



36
37
38
# File 'lib/legion/mcp/utils.rb', line 36

def summarize_params(params, max_pairs: 6)
  summarize_hash(params, max_pairs: max_pairs)
end

.summarize_result(result) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/legion/mcp/utils.rb', line 58

def summarize_result(result)
  if result.respond_to?(:error?) && result.respond_to?(:content)
    return "mcp_response(error=#{result.error?}, content_items=#{Array(result.content).size})"
  end

  case result
  when Hash
    "hash(keys=#{result.keys.first(8).join(',')})"
  when Array
    "array(size=#{result.size})"
  when NilClass
    'nil'
  else
    summarize_value(result)
  end
end

.summarize_text(value, max: 120) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/legion/mcp/utils.rb', line 28

def summarize_text(value, max: 120)
  text = value.to_s.gsub(/\s+/, ' ').strip
  return '' if text.empty?
  return text if text.length <= max

  "#{text[0, max - 3]}..."
end

.summarize_value(value) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/legion/mcp/utils.rb', line 111

def summarize_value(value)
  case value
  when String
    summarize_text(value)
  when Symbol, Numeric, TrueClass, FalseClass
    value.to_s
  when Hash
    summarize_hash(value)
  when Array
    summarize_array(value)
  when NilClass
    'nil'
  else
    summarize_text(value.inspect)
  end
end