Merge pull request #273 from koic/use_accessor_in_server_context_with_meta
Use accessor method in `server_context_with_meta` instead of ivar
This commit is contained in:
commit
6b092797c9
2 changed files with 30 additions and 4 deletions
|
|
@ -531,14 +531,14 @@ module MCP
|
||||||
|
|
||||||
def server_context_with_meta(request)
|
def server_context_with_meta(request)
|
||||||
meta = request[:_meta]
|
meta = request[:_meta]
|
||||||
if meta && @server_context.is_a?(Hash)
|
if meta && server_context.is_a?(Hash)
|
||||||
context = @server_context.dup
|
context = server_context.dup
|
||||||
context[:_meta] = meta
|
context[:_meta] = meta
|
||||||
context
|
context
|
||||||
elsif meta && @server_context.nil?
|
elsif meta && server_context.nil?
|
||||||
{ _meta: meta }
|
{ _meta: meta }
|
||||||
else
|
else
|
||||||
@server_context
|
server_context
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1731,5 +1731,31 @@ module MCP
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "server_context_with_meta uses accessor method, not ivar directly" do
|
||||||
|
subclass = Class.new(Server) do
|
||||||
|
def server_context
|
||||||
|
{ custom: "from_accessor" }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
server = subclass.new(name: "test", tools: [])
|
||||||
|
|
||||||
|
received_context = nil
|
||||||
|
server.define_tool(name: "ctx_tool") do |server_context:|
|
||||||
|
received_context = server_context
|
||||||
|
Tool::Response.new([{ type: "text", text: "ok" }])
|
||||||
|
end
|
||||||
|
|
||||||
|
request = {
|
||||||
|
jsonrpc: "2.0",
|
||||||
|
method: "tools/call",
|
||||||
|
id: 1,
|
||||||
|
params: { name: "ctx_tool", arguments: {} },
|
||||||
|
}
|
||||||
|
|
||||||
|
server.handle(request)
|
||||||
|
assert_equal "from_accessor", received_context[:custom]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue