Skip to content

Commit 404c627

Browse files
committed
Test README prompt usage example
1 parent 7bef5a2 commit 404c627

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ e.g. around authentication state or user preferences.
429429

430430
Register prompts with the MCP server:
431431

432+
<!-- SNIPPET ID: prompts_usage -->
432433
```ruby
433434
server = MCP::Server.new(
434435
name: "my_server",
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
require "mcp"
4+
5+
MyPrompt = MCP::Prompt.define(
6+
name: "my_prompt",
7+
description: "Test prompt",
8+
arguments: [
9+
MCP::Prompt::Argument.new(
10+
name: "message",
11+
description: "Input message",
12+
required: true,
13+
),
14+
],
15+
) do |_args, server_context:|
16+
MCP::Prompt::Result.new(
17+
description: "Response with user context",
18+
messages: [
19+
MCP::Prompt::Message.new(
20+
role: "user",
21+
content: MCP::Content::Text.new("User ID: #{server_context[:user_id]}"),
22+
),
23+
],
24+
)
25+
end
26+
27+
current_user = Object.new
28+
def current_user.id = 123
29+
30+
b = binding
31+
eval(File.read("code_snippet.rb"), b) # rubocop:disable Security/Eval -- We need to run the snippet in this context
32+
server = b.local_variable_get(:server)
33+
34+
puts server.handle_json({
35+
jsonrpc: "2.0",
36+
id: "1",
37+
method: "prompts/get",
38+
params: { name: "my_prompt", arguments: { message: "Test message" } },
39+
}.to_json)

test/integration/readme_code_snippets_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,24 @@ class ReadmeCodeSnippetsTest < ActiveSupport::TestCase
221221
)
222222
end
223223

224+
test "Prompt usage example works exactly as documented in README" do
225+
assert_json_lines(
226+
[
227+
{
228+
jsonrpc: "2.0",
229+
id: "1",
230+
result: {
231+
description: "Response with user context",
232+
messages: [
233+
{ role: "user", content: { type: "text", text: "User ID: 123" } },
234+
],
235+
},
236+
},
237+
],
238+
run_code_snippet("prompts_usage"),
239+
)
240+
end
241+
224242
private
225243

226244
def assert_json_lines(expected, actual, message = "Expected the given JSON lines")

0 commit comments

Comments
 (0)