Module: Hitch::MCP::Internal::ServerInfo
- Defined in:
- app/models/hitch/mcp/internal/server_info.rb
Overview
Validates the host's mcp.server_info result into the frozen, string-keyed identity hash the SDK boundary requires.
Constant Summary collapse
- KEY_MAP =
{ "name" => "name", "version" => "version", "title" => "title", "instructions" => "instructions", name: "name", version: "version", title: "title", instructions: "instructions" }.freeze
Class Method Summary collapse
Class Method Details
.normalize(value) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/models/hitch/mcp/internal/server_info.rb', line 22 def normalize(value) raise ArgumentError, "mcp.server_info must return a Hash" unless value.is_a?(Hash) unknown = value.keys - KEY_MAP.keys raise ArgumentError, "mcp.server_info contains unsupported keys" unless unknown.empty? canonical_keys = value.keys.map { |key| KEY_MAP.fetch(key) } raise ArgumentError, "mcp.server_info contains duplicate keys" unless canonical_keys.uniq == canonical_keys normalized = value.to_h do |key, field| [ KEY_MAP.fetch(key).dup.freeze, string_field(field) ] end %w[name version].each do |required| field = normalized[required] raise ArgumentError, "mcp.server_info requires name and version" unless field.is_a?(String) && !field.empty? end normalized.freeze end |
.string_field(value) ⇒ Object
41 42 43 44 45 |
# File 'app/models/hitch/mcp/internal/server_info.rb', line 41 def string_field(value) raise ArgumentError, "mcp.server_info values must be strings" unless value.is_a?(String) value.dup.freeze end |