diff --git a/MCPSharp.Test/ToolHandlerTests.cs b/MCPSharp.Test/ToolHandlerTests.cs new file mode 100644 index 0000000..445dd36 --- /dev/null +++ b/MCPSharp.Test/ToolHandlerTests.cs @@ -0,0 +1,36 @@ +using MCPSharp.Core.Tools; +using MCPSharp.Model; + +namespace MCPSharp.Test; + +[TestClass] +public class ToolHandlerTests +{ + [TestMethod] + public async Task HandleAsync_UsesDeclaredDefaultForMissingOptionalString() + { + var method = GetType().GetMethod(nameof(OptionalString))!; + var handler = new ToolHandler(new Tool { Name = method.Name }, method); + + var result = await handler.HandleAsync(new Dictionary()); + + Assert.IsFalse(result.IsError); + Assert.AreEqual("fallback", result.Content[0].Text); + } + + [TestMethod] + public async Task HandleAsync_UsesDeclaredDefaultForMissingOptionalValueType() + { + var method = GetType().GetMethod(nameof(OptionalCount))!; + var handler = new ToolHandler(new Tool { Name = method.Name }, method); + + var result = await handler.HandleAsync(new Dictionary()); + + Assert.IsFalse(result.IsError); + Assert.AreEqual("7", result.Content[0].Text); + } + + public string OptionalString(string value = "fallback") => value; + + public int OptionalCount(int count = 7) => count; +} diff --git a/MCPSharp/Core/Tools/ToolHandler.cs b/MCPSharp/Core/Tools/ToolHandler.cs index 9f541ee..9c81670 100644 --- a/MCPSharp/Core/Tools/ToolHandler.cs +++ b/MCPSharp/Core/Tools/ToolHandler.cs @@ -29,7 +29,9 @@ public async Task HandleAsync(Dictionary paramet } else { - inputValues.Add(par.Name, par.ParameterType.IsValueType ? Activator.CreateInstance(par.ParameterType) : null); + inputValues.Add(par.Name, par.HasDefaultValue + ? par.DefaultValue + : par.ParameterType.IsValueType ? Activator.CreateInstance(par.ParameterType) : null); } }