diff --git a/src/All.slnx b/src/All.slnx index 79c4eb007d0..9e733eda2ae 100644 --- a/src/All.slnx +++ b/src/All.slnx @@ -194,6 +194,7 @@ + diff --git a/src/HotChocolate/Adapters/Adapters.slnx b/src/HotChocolate/Adapters/Adapters.slnx index df81d29adda..3a273f4655d 100644 --- a/src/HotChocolate/Adapters/Adapters.slnx +++ b/src/HotChocolate/Adapters/Adapters.slnx @@ -15,6 +15,7 @@ + diff --git a/src/HotChocolate/Adapters/src/Adapters.Mcp.Core/Serialization/McpSettingsSerializerContext.cs b/src/HotChocolate/Adapters/src/Adapters.Mcp.Core/Serialization/McpSettingsSerializerContext.cs index 0ecad385b6a..ce880c278f8 100644 --- a/src/HotChocolate/Adapters/src/Adapters.Mcp.Core/Serialization/McpSettingsSerializerContext.cs +++ b/src/HotChocolate/Adapters/src/Adapters.Mcp.Core/Serialization/McpSettingsSerializerContext.cs @@ -6,5 +6,6 @@ namespace HotChocolate.Adapters.Mcp.Serialization; [JsonSerializable(typeof(McpToolSettingsDto))] [JsonSourceGenerationOptions( PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + AllowOutOfOrderMetadataProperties = true)] internal partial class McpSettingsSerializerContext : JsonSerializerContext; diff --git a/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/HotChocolate.Adapters.Mcp.Core.Tests.csproj b/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/HotChocolate.Adapters.Mcp.Core.Tests.csproj new file mode 100644 index 00000000000..3f80bcdd5ac --- /dev/null +++ b/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/HotChocolate.Adapters.Mcp.Core.Tests.csproj @@ -0,0 +1,13 @@ + + + + + HotChocolate.Adapters.Mcp.Core.Tests + HotChocolate.Adapters.Mcp.Core + + + + + + + diff --git a/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/Serialization/McpPromptSettingsSerializerTests.cs b/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/Serialization/McpPromptSettingsSerializerTests.cs new file mode 100644 index 00000000000..327375ce5d9 --- /dev/null +++ b/src/HotChocolate/Adapters/test/Adapters.Mcp.Core.Tests/Serialization/McpPromptSettingsSerializerTests.cs @@ -0,0 +1,37 @@ +using System.Text.Json; +using HotChocolate.Adapters.Mcp.Serialization; + +namespace HotChocolate.Adapters.Mcp.Core.Serialization; + +public sealed class McpPromptSettingsSerializerTests +{ + [Fact] + public void Parse_WithPolymorphicMessages_ShouldSucceed() + { + // arrange + var document = + JsonDocument.Parse( + """ + { + "messages": [ + { + "role": "user", + "content": { + "text": "Get the person", + "type": "text" + } + } + ] + } + """); + + // act + var settings = McpPromptSettingsSerializer.Parse(document); + + // assert + var message = Assert.Single(settings.Messages); + Assert.Equal("user", message.Role); + var content = Assert.IsType(message.Content); + Assert.Equal("Get the person", content.Text); + } +}