Skip to content

Commit 0c38640

Browse files
authored
test: cover config default precedence in MCP schema
1 parent 2bf11bb commit 0c38640

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

src/Service.Tests/Mcp/DynamicCustomToolTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,33 @@ public void GetToolMetadata_ConfigFallback_MarksParamsWithoutDefaultsRequired()
801801
"Only 'userId' (no default) should be required in the config-based schema.");
802802
}
803803

804+
/// <summary>
805+
/// Config fallback should exclude parameters with defaults from the required array even when
806+
/// they are explicitly marked required.
807+
/// </summary>
808+
[TestMethod]
809+
public void GetToolMetadata_ConfigFallback_ExcludesRequiredParamWhenDefaultExists()
810+
{
811+
// Arrange
812+
ParameterMetadata[] parameters = new[]
813+
{
814+
new ParameterMetadata { Name = "userId", Required = true },
815+
new ParameterMetadata { Name = "tenant", Required = true, Default = "contoso" }
816+
};
817+
Entity entity = CreateTestStoredProcedureEntity(parameters: parameters);
818+
DynamicCustomTool tool = new("GetUser", entity);
819+
820+
// Act
821+
JsonElement schema = tool.GetToolMetadata().InputSchema;
822+
823+
// Assert
824+
Assert.IsTrue(schema.TryGetProperty("required", out JsonElement required));
825+
CollectionAssert.AreEquivalent(
826+
new[] { "userId" },
827+
EnumerateStrings(required),
828+
"Parameters with config defaults should not be required even when marked required.");
829+
}
830+
804831
/// <summary>
805832
/// Helper: Parses the "required" array values into a list of strings.
806833
/// </summary>

0 commit comments

Comments
 (0)