From df0c102d75ecd615ec6a4a479a5cd64ab3ace252 Mon Sep 17 00:00:00 2001 From: DragonFSKY <38503900+DragonFSKY@users.noreply.github.com> Date: Fri, 5 Jun 2026 16:54:07 -0700 Subject: [PATCH] Require Tool inputSchema during deserialization (#1600) --- src/ModelContextProtocol.Core/Protocol/Tool.cs | 1 + tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/ModelContextProtocol.Core/Protocol/Tool.cs b/src/ModelContextProtocol.Core/Protocol/Tool.cs index 8abbfd8..ce17d9f 100644 --- a/src/ModelContextProtocol.Core/Protocol/Tool.cs +++ b/src/ModelContextProtocol.Core/Protocol/Tool.cs @@ -64,6 +64,7 @@ public sealed class Tool : IBaseMetadata /// /// [JsonPropertyName("inputSchema")] + [JsonRequired] public JsonElement InputSchema { get => field; diff --git a/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs b/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs index 5b21605..d8335c0 100644 --- a/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs +++ b/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs @@ -105,6 +105,14 @@ public static class ToolTests Assert.Equal("object", typeElement.GetString()); } + [Fact] + public static void ToolInputSchema_DeserializationRejectsMissingInputSchema() + { + const string json = """{"name":"test"}"""; + + Assert.Throws(() => JsonSerializer.Deserialize(json, McpJsonUtilities.DefaultOptions)); + } + [Theory] [InlineData("null")] [InlineData("false")]