From 699f89416d92e19b9cde15d4b76b6bc2956a140e Mon Sep 17 00:00:00 2001 From: Dongliang Xie Date: Sun, 24 May 2026 22:56:04 +0800 Subject: [PATCH] Require tool inputSchema during deserialization --- 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 8abbfd88c..ce17d9f7d 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 5b2160571..d8335c055 100644 --- a/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs +++ b/tests/ModelContextProtocol.Tests/Protocol/ToolTests.cs @@ -105,6 +105,14 @@ public static void ToolInputSchema_HasValidDefaultSchema() 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")]