Set default content to an empty array instead of nil

Follow-up to https://github.com/modelcontextprotocol/ruby-sdk/pull/147.

According to the specification schema, `content` is not optional and therefore cannot be omitted:

```typescript
interface CallToolResult {
  _meta?: { [key: string]: unknown };
  content: ContentBlock[];
  isError?: boolean;
  structuredContent?: { [key: string]: unknown };
  [key: string]: unknown;
}
```

https://modelcontextprotocol.io/specification/2025-06-18/schema#calltoolresult

Instead of `nil`, an empty array is set as the default value.

There may be a better value for `content`, but at the very least it should not be missing.
This commit is contained in:
Koichi ITO 2025-10-02 01:08:37 +09:00
commit 0034952df9
2 changed files with 14 additions and 3 deletions

View file

@ -13,7 +13,7 @@ module MCP
error = deprecated_error
end
@content = content
@content = content || []
@error = error
@structured_content = structured_content
end

View file

@ -101,13 +101,24 @@ module MCP
refute actual[:isError]
end
test "#to_h for a standard response with nil content and structured content" do
structured_content = { code: 401, message: "Unauthorized" }
response = Response.new(nil, structured_content: structured_content)
actual = response.to_h
assert_equal [:content, :isError, :structuredContent], actual.keys
assert_empty actual[:content]
assert_equal structured_content, actual[:structuredContent]
refute actual[:isError]
end
test "#to_h for a standard response with structured content only" do
structured_content = { code: 401, message: "Unauthorized" }
response = Response.new(structured_content: structured_content)
actual = response.to_h
assert_equal [:isError, :structuredContent], actual.keys
assert_nil actual[:content]
assert_equal [:content, :isError, :structuredContent], actual.keys
assert_empty actual[:content]
assert_equal structured_content, actual[:structuredContent]
refute actual[:isError]
end