Skip to content

Commit 4af7820

Browse files
committed
spec complicance 2025-06-18
1 parent a17b23e commit 4af7820

File tree

5 files changed

+55
-13
lines changed

5 files changed

+55
-13
lines changed

lib/mcp/prompt.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,20 @@ class << self
88
attr_reader :title_value
99
attr_reader :description_value
1010
attr_reader :arguments_value
11+
attr_reader :meta_value
1112

1213
def template(args, server_context: nil)
1314
raise NotImplementedError, "Subclasses must implement template"
1415
end
1516

1617
def to_h
17-
{ name: name_value, title: title_value, description: description_value, arguments: arguments_value.map(&:to_h) }.compact
18+
{
19+
name: name_value,
20+
title: title_value,
21+
description: description_value,
22+
arguments: arguments_value&.map(&:to_h),
23+
_meta: meta_value
24+
}.compact
1825
end
1926

2027
def inherited(subclass)
@@ -23,6 +30,7 @@ def inherited(subclass)
2330
subclass.instance_variable_set(:@title_value, nil)
2431
subclass.instance_variable_set(:@description_value, nil)
2532
subclass.instance_variable_set(:@arguments_value, nil)
33+
subclass.instance_variable_set(:@meta_value, nil)
2634
end
2735

2836
def prompt_name(value = NOT_SET)
@@ -61,6 +69,14 @@ def arguments(value = NOT_SET)
6169
end
6270
end
6371

72+
def meta(value = NOT_SET)
73+
if value == NOT_SET
74+
@meta_value
75+
else
76+
@meta_value = value
77+
end
78+
end
79+
6480
def define(name: nil, title: nil, description: nil, arguments: [], &block)
6581
Class.new(self) do
6682
prompt_name name

lib/mcp/prompt/argument.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33
module MCP
44
class Prompt
55
class Argument
6-
attr_reader :name, :description, :required, :arguments
6+
attr_reader :name, :title, :description, :required
77

8-
def initialize(name:, description: nil, required: false)
8+
def initialize(name:, title: nil, description: nil, required: false)
99
@name = name
10+
@title = title
1011
@description = description
1112
@required = required
12-
@arguments = arguments
1313
end
1414

1515
def to_h
16-
{ name:, description:, required: }.compact
16+
{
17+
name: name,
18+
title: title,
19+
description: description,
20+
required: required
21+
}.compact
1722
end
1823
end
1924
end

lib/mcp/resource.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,29 @@
22

33
module MCP
44
class Resource
5-
attr_reader :uri, :name, :title, :description, :mime_type
5+
attr_reader :name, :title, :uri, :description, :mime_type, :annotations, :size, :meta
66

7-
def initialize(uri:, name:, title: nil, description: nil, mime_type: nil)
8-
@uri = uri
7+
def initialize(uri:, name:, title: nil, description: nil, mime_type: nil, annotations: nil, size: nil, meta: {})
98
@name = name
109
@title = title
10+
@uri = uri
1111
@description = description
1212
@mime_type = mime_type
13+
@annotations = annotations
14+
@size = size
15+
@meta = meta
1316
end
1417

1518
def to_h
1619
{
17-
uri: uri,
1820
name: name,
1921
title: title,
22+
uri: uri,
2023
description: description,
2124
mimeType: mime_type,
25+
annotations: annotations&.to_h,
26+
size: size,
27+
_meta: meta
2228
}.compact
2329
end
2430
end

lib/mcp/resource_template.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@
22

33
module MCP
44
class ResourceTemplate
5-
attr_reader :uri_template, :name, :title, :description, :mime_type
5+
attr_reader :name, :title, :uri_template, :description, :mime_type, :annotations, :meta
66

7-
def initialize(uri_template:, name:, title: nil, description: nil, mime_type: nil)
8-
@uri_template = uri_template
7+
def initialize(uri_template:, name:, title: nil, description: nil, mime_type: nil, annotations: nil, meta: nil)
98
@name = name
109
@title = title
10+
@uri_template = uri_template
1111
@description = description
1212
@mime_type = mime_type
13+
@annotations = annotations
14+
@meta = meta || {}
1315
end
1416

1517
def to_h
1618
{
17-
uriTemplate: uri_template,
1819
name: name,
1920
title: title,
21+
uriTemplate: uri_template,
2022
description: description,
2123
mimeType: mime_type,
24+
annotations: annotations&.to_h,
25+
_meta: meta.empty? ? nil : meta
2226
}.compact
2327
end
2428
end

lib/mcp/tool.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class << self
88
attr_reader :title_value
99
attr_reader :description_value
1010
attr_reader :annotations_value
11+
attr_reader :meta_value
1112

1213
def call(*args, server_context: nil)
1314
raise NotImplementedError, "Subclasses must implement call"
@@ -21,6 +22,7 @@ def to_h
2122
inputSchema: input_schema_value.to_h,
2223
outputSchema: @output_schema_value&.to_h,
2324
annotations: annotations_value&.to_h,
25+
_meta: meta_value
2426
}.compact
2527
end
2628

@@ -32,6 +34,7 @@ def inherited(subclass)
3234
subclass.instance_variable_set(:@input_schema_value, nil)
3335
subclass.instance_variable_set(:@output_schema_value, nil)
3436
subclass.instance_variable_set(:@annotations_value, nil)
37+
subclass.instance_variable_set(:@meta_value, nil)
3538
end
3639

3740
def tool_name(value = NOT_SET)
@@ -100,6 +103,14 @@ def annotations(hash = NOT_SET)
100103
end
101104
end
102105

106+
def meta(value = NOT_SET)
107+
if value == NOT_SET
108+
@meta_value
109+
else
110+
@meta_value = value
111+
end
112+
end
113+
103114
def define(name: nil, title: nil, description: nil, input_schema: nil, output_schema: nil, annotations: nil, &block)
104115
Class.new(self) do
105116
tool_name name

0 commit comments

Comments
 (0)