Skip to content
Open
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
10 changes: 1 addition & 9 deletions lib/mcp.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require_relative "json_rpc_handler"
require_relative "mcp/annotations"
require_relative "mcp/configuration"
require_relative "mcp/content"
require_relative "mcp/icon"
Expand Down Expand Up @@ -39,13 +40,4 @@ def configuration
@configuration ||= Configuration.new
end
end

class Annotations
attr_reader :audience, :priority

def initialize(audience: nil, priority: nil)
@audience = audience
@priority = priority
end
end
end
21 changes: 21 additions & 0 deletions lib/mcp/annotations.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

module MCP
class Annotations
attr_reader :audience, :priority, :last_modified

def initialize(audience: nil, priority: nil, last_modified: nil)
@audience = audience
@priority = priority
@last_modified = last_modified
end

def to_h
{
audience: audience,
priority: priority,
lastModified: last_modified,
}.compact
end
end
end
59 changes: 59 additions & 0 deletions test/mcp/annotations_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# frozen_string_literal: true

require "test_helper"

module MCP
class AnnotationsTest < ActiveSupport::TestCase
def test_initialization
annotations = Annotations.new(audience: ["developers"], priority: 0.8)

assert_equal(["developers"], annotations.audience)
assert_equal(0.8, annotations.priority)
assert_nil(annotations.last_modified)

assert_equal({ audience: ["developers"], priority: 0.8 }, annotations.to_h)
end

def test_initialization_with_all_attributes
timestamp = Time.utc(2025, 1, 12, 15, 0, 58).iso8601
annotations = Annotations.new(audience: ["developers"], priority: 0.8, last_modified: timestamp)

assert_equal(["developers"], annotations.audience)
assert_equal(0.8, annotations.priority)
assert_equal(timestamp, annotations.last_modified)

assert_equal({ audience: ["developers"], priority: 0.8, lastModified: timestamp }, annotations.to_h)
end

def test_initialization_by_default
annotations = Annotations.new

assert_nil(annotations.audience)
assert_nil(annotations.priority)
assert_nil(annotations.last_modified)

assert_empty(annotations.to_h)
end

def test_initialization_with_partial_attributes
annotations = Annotations.new(audience: ["developers"])

assert_equal(["developers"], annotations.audience)
assert_nil(annotations.priority)
assert_nil(annotations.last_modified)

assert_equal({ audience: ["developers"] }, annotations.to_h)
end

def test_initialization_with_last_modified_only
timestamp = Time.utc(2025, 1, 12, 15, 0, 58).iso8601
annotations = Annotations.new(last_modified: timestamp)

assert_nil(annotations.audience)
assert_nil(annotations.priority)
assert_equal(timestamp, annotations.last_modified)

assert_equal({ lastModified: timestamp }, annotations.to_h)
end
end
end