Skip to content

Commit d2852c0

Browse files
committed
Remove relaxed JSON encoder
1 parent 11408a9 commit d2852c0

File tree

2 files changed

+7
-14
lines changed

2 files changed

+7
-14
lines changed

src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using ModelContextProtocol.Protocol.Messages;
22
using ModelContextProtocol.Protocol.Types;
33
using System.Diagnostics.CodeAnalysis;
4-
using System.Text.Encodings.Web;
54
using System.Text.Json;
65
using System.Text.Json.Nodes;
76
using System.Text.Json.Serialization;
@@ -26,11 +25,6 @@ public static partial class McpJsonUtilities
2625
/// <item>Enables string-based enum serialization as implemented by <see cref="JsonStringEnumConverter"/>.</item>
2726
/// <item>Enables <see cref="JsonIgnoreCondition.WhenWritingNull"/> as the default ignore condition for properties.</item>
2827
/// <item>Enables <see cref="JsonNumberHandling.AllowReadingFromString"/> as the default number handling for number types.</item>
29-
/// <item>
30-
/// Enables <see cref="JavaScriptEncoder.UnsafeRelaxedJsonEscaping"/> when escaping JSON strings.
31-
/// Consuming applications must ensure that JSON outputs are adequately escaped before embedding in other document formats,
32-
/// such as HTML and XML.
33-
/// </item>
3428
/// </list>
3529
/// </para>
3630
/// </remarks>
@@ -58,15 +52,13 @@ private static JsonSerializerOptions CreateDefaultOptions()
5852
Converters = { new JsonStringEnumConverter() },
5953
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
6054
NumberHandling = JsonNumberHandling.AllowReadingFromString,
61-
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
6255
};
6356
}
6457
else
6558
{
59+
// Keep in sync with any additional settings above beyond what's in JsonContext below.
6660
options = new(JsonContext.Default.Options)
6761
{
68-
// Compile-time encoder setting not yet available
69-
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
7062
};
7163
}
7264

@@ -77,7 +69,8 @@ private static JsonSerializerOptions CreateDefaultOptions()
7769
internal static JsonTypeInfo<T> GetTypeInfo<T>(this JsonSerializerOptions options) =>
7870
(JsonTypeInfo<T>)options.GetTypeInfo(typeof(T));
7971

80-
internal static JsonElement DefaultMcpToolSchema = ParseJsonElement("{\"type\":\"object\"}"u8);
72+
internal static JsonElement DefaultMcpToolSchema { get; } = ParseJsonElement("""{"type":"object"}"""u8);
73+
8174
internal static bool IsValidMcpToolSchema(JsonElement element)
8275
{
8376
if (element.ValueKind is not JsonValueKind.Object)
@@ -129,5 +122,4 @@ private static JsonElement ParseJsonElement(ReadOnlySpan<byte> utf8Json)
129122
Utf8JsonReader reader = new(utf8Json);
130123
return JsonElement.ParseValue(ref reader);
131124
}
132-
133125
}

tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Extensions.Logging.Abstractions;
1+
using Microsoft.Extensions.AI;
2+
using Microsoft.Extensions.Logging.Abstractions;
23
using ModelContextProtocol.Protocol.Messages;
34
using ModelContextProtocol.Protocol.Transport;
45
using ModelContextProtocol.Protocol.Types;
@@ -193,11 +194,11 @@ public async Task SendMessageAsync_Should_Preserve_Unicode_Characters()
193194
output.GetStringBuilder().Clear();
194195
await transport.SendMessageAsync(chineseMessage, TestContext.Current.CancellationToken);
195196

196-
// Verify Chinese characters preserved
197+
// Verify Chinese characters preserved but encoded
197198
var chineseResult = output.ToString().Trim();
198199
var expectedChinese = JsonSerializer.Serialize(chineseMessage, McpJsonUtilities.DefaultOptions);
199200
Assert.Equal(expectedChinese, chineseResult);
200-
Assert.Contains(chineseText, chineseResult);
201+
Assert.Contains(JsonSerializer.Serialize(chineseText), chineseResult);
201202

202203
// Test 2: Emoji (non-BMP Unicode using surrogate pairs)
203204
var emojiText = "🔍 🚀 👍"; // Magnifying glass, rocket, thumbs up

0 commit comments

Comments
 (0)