Add ToolAnnotations support (#124)
* Add ToolAnnotations support * Address feedback
This commit is contained in:
parent
2c1672cc1a
commit
62e92fa154
1 changed files with 645 additions and 394 deletions
|
|
@ -10,8 +10,8 @@ namespace ModelContextProtocol.Tests.Client;
|
|||
|
||||
public class McpClientExtensionsTests
|
||||
{
|
||||
private Pipe _clientToServerPipe = new();
|
||||
private Pipe _serverToClientPipe = new();
|
||||
private readonly Pipe _clientToServerPipe = new();
|
||||
private readonly Pipe _serverToClientPipe = new();
|
||||
private readonly IMcpServer _server;
|
||||
|
||||
public McpClientExtensionsTests()
|
||||
|
|
@ -22,8 +22,10 @@ public class McpClientExtensionsTests
|
|||
for (int f = 0; f < 10; f++)
|
||||
{
|
||||
string name = $"Method{f}";
|
||||
sc.AddSingleton(McpServerTool.Create((int i) => $"{name} Result {i}", name));
|
||||
sc.AddSingleton(McpServerTool.Create((int i) => $"{name} Result {i}", new() { Name = name }));
|
||||
}
|
||||
sc.AddSingleton(McpServerTool.Create([McpServerTool(Destructive = false, OpenWorld = true)](string i) => $"{i} Result", new() { Name = "ValuesSetViaAttr" }));
|
||||
sc.AddSingleton(McpServerTool.Create([McpServerTool(Destructive = false, OpenWorld = true)](string i) => $"{i} Result", new() { Name = "ValuesSetViaOptions", Destructive = true, OpenWorld = false, ReadOnly = true }));
|
||||
_server = sc.BuildServiceProvider().GetRequiredService<IMcpServer>();
|
||||
}
|
||||
|
||||
|
|
@ -60,10 +62,24 @@ public class McpClientExtensionsTests
|
|||
IMcpClient client = await CreateMcpClientForServer();
|
||||
|
||||
var tools = await client.ListToolsAsync(TestContext.Current.CancellationToken);
|
||||
Assert.Equal(10, tools.Count);
|
||||
Assert.Equal(12, tools.Count);
|
||||
var echo = tools.Single(t => t.Name == "Method4");
|
||||
var result = await echo.InvokeAsync(new Dictionary<string, object?>() { ["i"] = 42 }, TestContext.Current.CancellationToken);
|
||||
Assert.Contains("Method4 Result 42", result?.ToString());
|
||||
|
||||
var valuesSetViaAttr = tools.Single(t => t.Name == "ValuesSetViaAttr");
|
||||
Assert.Null(valuesSetViaAttr.ProtocolTool.Annotations?.Title);
|
||||
Assert.Null(valuesSetViaAttr.ProtocolTool.Annotations?.ReadOnlyHint);
|
||||
Assert.Null(valuesSetViaAttr.ProtocolTool.Annotations?.IdempotentHint);
|
||||
Assert.False(valuesSetViaAttr.ProtocolTool.Annotations?.DestructiveHint);
|
||||
Assert.True(valuesSetViaAttr.ProtocolTool.Annotations?.OpenWorldHint);
|
||||
|
||||
var valuesSetViaOptions = tools.Single(t => t.Name == "ValuesSetViaOptions");
|
||||
Assert.Null(valuesSetViaOptions.ProtocolTool.Annotations?.Title);
|
||||
Assert.True(valuesSetViaOptions.ProtocolTool.Annotations?.ReadOnlyHint);
|
||||
Assert.Null(valuesSetViaOptions.ProtocolTool.Annotations?.IdempotentHint);
|
||||
Assert.True(valuesSetViaOptions.ProtocolTool.Annotations?.DestructiveHint);
|
||||
Assert.False(valuesSetViaOptions.ProtocolTool.Annotations?.OpenWorldHint);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Reference in a new issue