Skip to content

Commit 4436dba

Browse files
committed
Log more efficiently in HttpListenerSseServerTransport
1 parent 7512c6c commit 4436dba

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

src/ModelContextProtocol/Protocol/Transport/HttpListenerServerProvider.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public HttpListenerServerProvider(int port)
2828
}
2929

3030
public required Func<Stream, CancellationToken, Task> OnSseConnectionAsync { get; set; }
31-
public required Func<string, CancellationToken, Task<bool>> OnMessageAsync { get; set; }
31+
public required Func<Stream, CancellationToken, Task<bool>> OnMessageAsync { get; set; }
3232

3333
/// <inheritdoc/>
3434
public Task StartAsync(CancellationToken cancellationToken = default)
@@ -169,15 +169,8 @@ private async Task HandleMessageAsync(HttpListenerContext context, CancellationT
169169
var request = context.Request;
170170
var response = context.Response;
171171

172-
// Read the request body
173-
string requestBody;
174-
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
175-
{
176-
requestBody = await reader.ReadToEndAsync(cancellationToken).ConfigureAwait(false);
177-
}
178-
179172
// Process the message asynchronously
180-
if (await OnMessageAsync(requestBody, cancellationToken))
173+
if (await OnMessageAsync(request.InputStream, cancellationToken))
181174
{
182175
// Return 202 Accepted
183176
response.StatusCode = 202;

src/ModelContextProtocol/Protocol/Transport/HttpListenerSseServerTransport.cs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,11 @@ public override async Task SendMessageAsync(IJsonRpcMessage message, Cancellatio
7373

7474
try
7575
{
76-
var json = JsonSerializer.Serialize(message, McpJsonUtilities.DefaultOptions.GetTypeInfo<IJsonRpcMessage>());
77-
_logger.TransportSendingMessage(EndpointName, id, json);
76+
if (_logger.IsEnabled(LogLevel.Debug))
77+
{
78+
var json = JsonSerializer.Serialize(message, McpJsonUtilities.DefaultOptions.GetTypeInfo<IJsonRpcMessage>());
79+
_logger.TransportSendingMessage(EndpointName, id, json);
80+
}
7881

7982
await _sseResponseStreamTransport.SendMessageAsync(message, cancellationToken).ConfigureAwait(false);
8083

@@ -117,13 +120,27 @@ private async Task OnSseConnectionAsync(Stream responseStream, CancellationToken
117120
/// Handles HTTP messages received by the HTTP server provider.
118121
/// </summary>
119122
/// <returns>true if the message was accepted (return 202), false otherwise (return 400)</returns>
120-
private async Task<bool> OnMessageAsync(string request, CancellationToken cancellationToken)
123+
private async Task<bool> OnMessageAsync(Stream requestStream, CancellationToken cancellationToken)
121124
{
122-
_logger.TransportReceivedMessage(EndpointName, request);
125+
string request;
126+
IJsonRpcMessage? message = null;
127+
128+
if (_logger.IsEnabled(LogLevel.Information))
129+
{
130+
using var reader = new StreamReader(requestStream);
131+
request = await reader.ReadToEndAsync(cancellationToken).ConfigureAwait(false);
132+
message = JsonSerializer.Deserialize(request, McpJsonUtilities.DefaultOptions.GetTypeInfo<IJsonRpcMessage>());
133+
134+
_logger.TransportReceivedMessage(EndpointName, request);
135+
}
136+
else
137+
{
138+
request = "(Enable information-level logs to see the request)";
139+
}
123140

124141
try
125142
{
126-
var message = JsonSerializer.Deserialize(request, McpJsonUtilities.DefaultOptions.GetTypeInfo<IJsonRpcMessage>());
143+
message ??= await JsonSerializer.DeserializeAsync(requestStream, McpJsonUtilities.DefaultOptions.GetTypeInfo<IJsonRpcMessage>());
127144
if (message != null)
128145
{
129146
string messageId = "(no id)";

0 commit comments

Comments
 (0)