Skip to content

Commit 1bb6fac

Browse files
committed
list templates
1 parent 03cd319 commit 1bb6fac

File tree

6 files changed

+76
-0
lines changed

6 files changed

+76
-0
lines changed

lib/ruby_mcp/handlers.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def self.parse(json)
2121
ResourcesRead
2222
when "logging/setLevel"
2323
LoggingSetLevel
24+
when "resources/templates/list"
25+
ResourcesTemplatesList
2426
end.new
2527
end
2628
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class RubyMCP::Handlers::ResourcesTemplatesList < RubyMCP::Handlers
2+
def handle(server, request)
3+
server.answer(request, resourceTemplates: server.resources.templates.map do |template, value|
4+
{
5+
uriTemplate: template,
6+
name: value.name,
7+
description: value.description,
8+
mimeType: value.mime_type
9+
}
10+
end)
11+
end
12+
end

lib/ruby_mcp/requests.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def self.parse(json)
2121
ResourcesRead
2222
when "logging/setLevel"
2323
LoggingSetLevel
24+
when "resources/templates/list"
25+
ResourcesTemplatesList
2426
else
2527
Request
2628
end.new(parsed)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class RubyMCP::Requests::ResourcesTemplatesList < RubyMCP::Request
2+
def allowed_in_lifecycle?(lifecycle)
3+
lifecycle.operation_phase?
4+
end
5+
end

lib/ruby_mcp/resources.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ def as_json
3434
end
3535
end
3636

37+
def templates
38+
@resource_templates
39+
end
40+
3741
private
3842

3943
def find_in_templates(uri)

test/capabilities/test_resources_capability.rb

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,55 @@ def test_read_template
159159
}
160160
)
161161
end
162+
163+
def test_list_templates
164+
@server.add_resource_template(
165+
uri_template: "https://{host}.de",
166+
name: "german_website",
167+
description: "Every german website",
168+
mime_type: "text/html",
169+
reader: ->(resource) {
170+
"The first demo content of #{resource.name}"
171+
}
172+
)
173+
174+
@server.add_resource_template(
175+
uri_template: "https://{host}.com",
176+
name: "com_website",
177+
description: "Every com website",
178+
mime_type: "text/html",
179+
reader: ->(resource) {
180+
"The first demo content of #{resource.name}"
181+
}
182+
)
183+
184+
@transport.client_message(
185+
jsonrpc: "2.0",
186+
id: 1,
187+
method: "resources/templates/list",
188+
)
189+
190+
@transport.process_message
191+
192+
assert_last_response(
193+
"jsonrpc": "2.0",
194+
"id": 1,
195+
"result": {
196+
"resourceTemplates": [
197+
{
198+
uriTemplate: "https://{host}.de",
199+
name: "german_website",
200+
description: "Every german website",
201+
mimeType: "text/html"
202+
},
203+
{
204+
uriTemplate: "https://{host}.com",
205+
name: "com_website",
206+
description: "Every com website",
207+
mimeType: "text/html"
208+
}
209+
]
210+
}
211+
)
212+
end
162213
end

0 commit comments

Comments
 (0)