Skip to content

Commit ab51400

Browse files
authored
Make CallToolResult.IsError optional (#573)
Match the spec, and avoid sending the property in the success case.
1 parent fc29342 commit ab51400

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

src/ModelContextProtocol.Core/Protocol/CallToolResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,5 @@ public sealed class CallToolResult : Result
4444
/// and potentially self-correct in subsequent requests.
4545
/// </remarks>
4646
[JsonPropertyName("isError")]
47-
public bool IsError { get; set; }
47+
public bool? IsError { get; set; }
4848
}

tests/ModelContextProtocol.AspNetCore.Tests/HttpServerIntegrationTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public async Task CallTool_Sse_EchoServer()
9494

9595
// assert
9696
Assert.NotNull(result);
97-
Assert.False(result.IsError);
97+
Assert.Null(result.IsError);
9898
var textContent = Assert.Single(result.Content.OfType<TextContentBlock>());
9999
Assert.Equal("Echo: Hello MCP!", textContent.Text);
100100
}
@@ -115,9 +115,9 @@ public async Task CallTool_EchoSessionId_ReturnsTheSameSessionId()
115115
Assert.NotNull(result2);
116116
Assert.NotNull(result3);
117117

118-
Assert.False(result1.IsError);
119-
Assert.False(result2.IsError);
120-
Assert.False(result3.IsError);
118+
Assert.Null(result1.IsError);
119+
Assert.Null(result2.IsError);
120+
Assert.Null(result3.IsError);
121121

122122
var textContent1 = Assert.Single(result1.Content.OfType<TextContentBlock>());
123123
var textContent2 = Assert.Single(result2.Content.OfType<TextContentBlock>());
@@ -298,7 +298,7 @@ public async Task CallTool_Sse_EchoServer_Concurrently()
298298
);
299299

300300
Assert.NotNull(result);
301-
Assert.False(result.IsError);
301+
Assert.Null(result.IsError);
302302
var textContent = Assert.Single(result.Content.OfType<TextContentBlock>());
303303
Assert.Equal($"Echo: Hello MCP! {i}", textContent.Text);
304304
}

tests/ModelContextProtocol.AspNetCore.Tests/MapMcpTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public async Task Sampling_DoesNotCloseStream_Prematurely()
171171
}, cancellationToken: TestContext.Current.CancellationToken);
172172

173173
Assert.NotNull(result);
174-
Assert.False(result.IsError);
174+
Assert.Null(result.IsError);
175175
var textContent = Assert.Single(result.Content);
176176
Assert.Equal("text", textContent.Type);
177177
Assert.Equal("Sampling completed successfully. Client responded: Sampling response from client", Assert.IsType<TextContentBlock>(textContent).Text);

tests/ModelContextProtocol.Tests/ClientIntegrationTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public async Task CallTool_Stdio_EchoServer(string clientId)
9191

9292
// assert
9393
Assert.NotNull(result);
94-
Assert.False(result.IsError);
94+
Assert.Null(result.IsError);
9595
var textContent = Assert.Single(result.Content.OfType<TextContentBlock>());
9696
Assert.Equal("Echo: Hello MCP!", textContent.Text);
9797
}
@@ -107,7 +107,7 @@ public async Task CallTool_Stdio_EchoSessionId_ReturnsEmpty()
107107

108108
// assert
109109
Assert.NotNull(result);
110-
Assert.False(result.IsError);
110+
Assert.Null(result.IsError);
111111
var textContent = Assert.Single(result.Content.OfType<TextContentBlock>());
112112
Assert.Empty(textContent.Text);
113113
}
@@ -485,7 +485,7 @@ public async Task CallTool_Stdio_MemoryServer()
485485

486486
// assert
487487
Assert.NotNull(result);
488-
Assert.False(result.IsError);
488+
Assert.Null(result.IsError);
489489
Assert.Single(result.Content, c => c.Type == "text");
490490

491491
await client.DisposeAsync();

0 commit comments

Comments
 (0)