Make Tool.inputSchema nonoptional (#123)

This commit is contained in:
Mattt 2025-08-10 05:34:47 -07:00 • committed by GitHub
commit f3b9ba4a59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 11 deletions

View file

@ -14,7 +14,7 @@ public struct Tool: Hashable, Codable, Sendable {
/// The tool description
public let description: String
/// The tool input schema
public let inputSchema: Value?
public let inputSchema: Value
/// Annotations that provide display-facing and operational information for a Tool.
///
@ -86,7 +86,7 @@ public struct Tool: Hashable, Codable, Sendable {
public init(
name: String,
description: String,
inputSchema: Value? = nil,
inputSchema: Value,
annotations: Annotations = nil
) {
self.name = name
@ -183,7 +183,7 @@ public struct Tool: Hashable, Codable, Sendable {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
description = try container.decode(String.self, forKey: .description)
inputSchema = try container.decodeIfPresent(Value.self, forKey: .inputSchema)
inputSchema = try container.decode(Value.self, forKey: .inputSchema)
annotations =
try container.decodeIfPresent(Tool.Annotations.self, forKey: .annotations) ?? .init()
}
@ -192,9 +192,7 @@ public struct Tool: Hashable, Codable, Sendable {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
try container.encode(description, forKey: .description)
if let schema = inputSchema {
try container.encode(schema, forKey: .inputSchema)
}
try container.encode(inputSchema, forKey: .inputSchema)
if !annotations.isEmpty {
try container.encode(annotations, forKey: .annotations)
}

View file

@ -130,7 +130,8 @@ struct ToolTests {
func testToolWithEmptyAnnotations() throws {
var tool = Tool(
name: "test_tool",
description: "Test tool description"
description: "Test tool description",
inputSchema: [:]
)
do {
@ -163,7 +164,7 @@ struct ToolTests {
let tool = Tool(
name: "test_tool",
description: "Test tool description",
inputSchema: nil,
inputSchema: [:],
annotations: nil
)
@ -324,8 +325,8 @@ struct ToolTests {
@Test("ListTools result validation")
func testListToolsResult() throws {
let tools = [
Tool(name: "tool1", description: "First tool", inputSchema: nil),
Tool(name: "tool2", description: "Second tool", inputSchema: nil),
Tool(name: "tool1", description: "First tool", inputSchema: [:]),
Tool(name: "tool2", description: "Second tool", inputSchema: [:]),
]
let result = ListTools.Result(tools: tools, nextCursor: "next_page")
@ -399,7 +400,11 @@ struct ToolTests {
#expect(request.id == 1)
#expect(request.params.cursor == nil)
let testTool = Tool(name: "test_tool", description: "Test tool for verification")
let testTool = Tool(
name: "test_tool",
description: "Test tool for verification",
inputSchema: [:]
)
return ListTools.response(id: request.id, result: ListTools.Result(tools: [testTool]))
}