Skip to content

Commit 39a2f47

Browse files
Add test to verify DefaultSamplingMaxTokens is respected
Co-authored-by: MackinnonBuck <10456961+MackinnonBuck@users.noreply.github.com>
1 parent 63e1066 commit 39a2f47

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

tests/ModelContextProtocol.Tests/Server/McpServerExtensionsTests.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,54 @@ public async Task SampleAsync_Messages_Forwards_To_McpServer_SendRequestAsync()
152152
mockServer.Verify(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()), Times.Once);
153153
}
154154

155+
[Fact]
156+
public async Task SampleAsync_Messages_UsesDefaultSamplingMaxTokens_WhenNotSpecified()
157+
{
158+
var mockServer = new Mock<McpServer> { CallBase = true };
159+
160+
var resultPayload = new CreateMessageResult
161+
{
162+
Content = new TextContentBlock { Text = "resp" },
163+
Model = "test-model",
164+
Role = Role.Assistant,
165+
StopReason = "endTurn",
166+
};
167+
168+
const int customDefaultMaxTokens = 500;
169+
170+
mockServer
171+
.Setup(s => s.ClientCapabilities)
172+
.Returns(new ClientCapabilities() { Sampling = new() });
173+
174+
mockServer
175+
.Setup(s => s.ServerOptions)
176+
.Returns(new McpServerOptions { DefaultSamplingMaxTokens = customDefaultMaxTokens });
177+
178+
CreateMessageRequestParams? capturedRequest = null;
179+
mockServer
180+
.Setup(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()))
181+
.Callback<JsonRpcRequest, CancellationToken>((request, _) =>
182+
{
183+
capturedRequest = JsonSerializer.Deserialize<CreateMessageRequestParams>(
184+
request.Params ?? throw new InvalidOperationException(),
185+
McpJsonUtilities.DefaultOptions);
186+
})
187+
.ReturnsAsync(new JsonRpcResponse
188+
{
189+
Id = default,
190+
Result = JsonSerializer.SerializeToNode(resultPayload, McpJsonUtilities.DefaultOptions),
191+
});
192+
193+
IMcpServer server = mockServer.Object;
194+
195+
// Call SampleAsync without specifying MaxOutputTokens in options
196+
await server.SampleAsync([new ChatMessage(ChatRole.User, "hi")], cancellationToken: TestContext.Current.CancellationToken);
197+
198+
// Verify that the default value was used
199+
Assert.NotNull(capturedRequest);
200+
Assert.Equal(customDefaultMaxTokens, capturedRequest.MaxTokens);
201+
}
202+
155203
[Fact]
156204
public async Task RequestRootsAsync_Forwards_To_McpServer_SendRequestAsync()
157205
{

0 commit comments

Comments
 (0)