From 834bd40d29623c1a53b090fd45be80f3dc9d056e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Feb 2026 01:46:43 +0000 Subject: [PATCH 1/3] Initial plan From 84765acc40b6280575d81c3b77f0b9ae1756b38d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Feb 2026 01:52:39 +0000 Subject: [PATCH 2/3] Fix CreateMessageRequestParams.Metadata type from JsonElement? to JsonObject? Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Protocol/CreateMessageRequestParams.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs index 711f1fcea..ef5e57d2c 100644 --- a/src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs +++ b/src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs @@ -1,5 +1,5 @@ using System.Diagnostics.CodeAnalysis; -using System.Text.Json; +using System.Text.Json.Nodes; using System.Text.Json.Serialization; namespace ModelContextProtocol.Protocol; @@ -68,7 +68,7 @@ public sealed class CreateMessageRequestParams : RequestParams /// /// [JsonPropertyName("metadata")] - public JsonElement? Metadata { get; set; } + public JsonObject? Metadata { get; set; } /// /// Gets or sets the server's preferences for which model to select. From 9463045af9d4302b77c315af03ae3f6247964a1e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Feb 2026 01:58:19 +0000 Subject: [PATCH 3/3] Add serialization roundtrip test for CreateMessageRequestParams.Metadata Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../CreateMessageRequestParamsTests.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/ModelContextProtocol.Tests/Protocol/CreateMessageRequestParamsTests.cs b/tests/ModelContextProtocol.Tests/Protocol/CreateMessageRequestParamsTests.cs index f57faf1d8..4771f550b 100644 --- a/tests/ModelContextProtocol.Tests/Protocol/CreateMessageRequestParamsTests.cs +++ b/tests/ModelContextProtocol.Tests/Protocol/CreateMessageRequestParamsTests.cs @@ -1,5 +1,6 @@ using ModelContextProtocol.Protocol; using System.Text.Json; +using System.Text.Json.Nodes; namespace ModelContextProtocol.Tests.Protocol; @@ -166,6 +167,37 @@ public void WithToolChoiceNone_SerializationRoundtrips() Assert.NotNull(deserialized.ToolChoice); Assert.Equal("none", deserialized.ToolChoice.Mode); } + + [Fact] + public void WithMetadata_SerializationRoundtrips() + { + CreateMessageRequestParams requestParams = new() + { + MaxTokens = 500, + Messages = + [ + new SamplingMessage + { + Role = Role.User, + Content = [new TextContentBlock { Text = "Hello" }] + } + ], + Metadata = new JsonObject + { + ["provider"] = "test-provider", + ["custom_setting"] = 42 + } + }; + + var json = JsonSerializer.Serialize(requestParams, McpJsonUtilities.DefaultOptions); + var deserialized = JsonSerializer.Deserialize(json, McpJsonUtilities.DefaultOptions); + + Assert.NotNull(deserialized); + Assert.Equal(500, deserialized.MaxTokens); + Assert.NotNull(deserialized.Metadata); + Assert.Equal("test-provider", (string?)deserialized.Metadata["provider"]); + Assert.Equal(42, (int)deserialized.Metadata["custom_setting"]!); + } }