Module: MicroMcp::ValidationHelpers

Defined in:
lib/micro_mcp/validation_helpers.rb

Class Method Summary collapse

Class Method Details

.stringify_keys(obj) ⇒ Object

Helper to convert symbol keys to string keys recursively



48
49
50
51
52
53
54
55
56
57
# File 'lib/micro_mcp/validation_helpers.rb', line 48

def self.stringify_keys(obj)
  case obj
  when Hash
    obj.transform_keys(&:to_s).transform_values { |v| stringify_keys(v) }
  when Array
    obj.map { |v| stringify_keys(v) }
  else
    obj
  end
end

.validate_create_message_params(params) ⇒ Object

Validate create_message parameters before sending



6
7
8
9
10
11
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/micro_mcp/validation_helpers.rb', line 6

def self.validate_create_message_params(params)
  errors = []

  # Check required fields
  errors << "Missing 'messages' field" unless params.key?("messages")
  errors << "Missing 'maxTokens' field" unless params.key?("maxTokens")

  if params["messages"]
    # Validate messages structure
    if params["messages"].is_a?(Array)
      params["messages"].each_with_index do |msg, i|
        unless msg.is_a?(Hash)
          errors << "Message #{i} must be a hash"
          next
        end

        unless msg.key?("role")
          errors << "Message #{i} missing 'role' field"
        end

        unless msg.key?("content")
          errors << "Message #{i} missing 'content' field"
        end

        if msg["content"] && !msg["content"].is_a?(Hash)
          errors << "Message #{i} 'content' must be a hash"
        end
      end
    else
      errors << "'messages' must be an array"
    end
  end

  # Check for common mistakes
  if params.any? { |k, v| k.is_a?(Symbol) }
    errors << "Hash keys must be strings, not symbols. Use string keys throughout."
  end

  errors
end