Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/mcp/resource/contents.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def initialize(uri:, mime_type: nil)
end

def to_h
{ uri: uri, mime_type: mime_type }.compact
{ uri: uri, mimeType: mime_type }.compact
end
end

Expand All @@ -37,7 +37,7 @@ def initialize(data:, uri:, mime_type:)
end

def to_h
super.merge(data: data)
super.merge(blob: data)
end
end
end
Expand Down
75 changes: 75 additions & 0 deletions test/mcp/resource/contents_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# frozen_string_literal: true

require "test_helper"

module MCP
class Resource
class ContentsTest < ActiveSupport::TestCase
test "Contents#to_h returns hash with mimeType" do
contents = Resource::Contents.new(
uri: "test://example",
mime_type: "text/plain",
)

result = contents.to_h

assert_equal "test://example", result[:uri]
assert_equal "text/plain", result[:mimeType]
refute result.key?(:mime_type), "Should use camelCase 'mimeType' not snake_case 'mime_type'"
end

test "Contents#to_h omits mimeType when nil" do
contents = Resource::Contents.new(uri: "test://example")

result = contents.to_h

assert_equal({ uri: "test://example" }, result)
refute result.key?(:mimeType)
end

test "TextContents#to_h returns hash with text and mimeType" do
text_contents = Resource::TextContents.new(
uri: "test://text",
mime_type: "text/plain",
text: "Hello, world!",
)

result = text_contents.to_h

assert_equal "test://text", result[:uri]
assert_equal "text/plain", result[:mimeType]
assert_equal "Hello, world!", result[:text]
refute result.key?(:mime_type), "Should use camelCase 'mimeType' not snake_case 'mime_type'"
end

test "BlobContents#to_h returns hash with blob and mimeType" do
blob_contents = Resource::BlobContents.new(
uri: "test://binary",
mime_type: "image/png",
data: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
)

result = blob_contents.to_h

assert_equal "test://binary", result[:uri]
assert_equal "image/png", result[:mimeType]
assert_equal "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==", result[:blob]
refute result.key?(:data), "Should use 'blob' not 'data' per MCP specification"
refute result.key?(:mime_type), "Should use camelCase 'mimeType' not snake_case 'mime_type'"
end

test "BlobContents#to_h omits mimeType when nil" do
blob_contents = Resource::BlobContents.new(
uri: "test://binary",
mime_type: nil,
data: "base64data",
)

result = blob_contents.to_h

assert_equal({ uri: "test://binary", blob: "base64data" }, result)
refute result.key?(:mimeType)
end
end
end
end