feat: McpClientTool replace Tool
This commit is contained in:
parent
d439d38bb9
commit
013901fc48
|
|
@ -19,8 +19,7 @@
|
||||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
|
||||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||||
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.0.0" />
|
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.0.0" />
|
||||||
<PackageVersion Include="System.Linq.AsyncEnumerable" Version="10.0.0-preview.1.25080.5" />
|
|
||||||
<PackageVersion Include="System.Memory.Data" Version="8.0.0" />
|
<PackageVersion Include="System.Memory.Data" Version="8.0.0" />
|
||||||
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
|
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
|
||||||
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
|
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||||
|
|
@ -110,8 +109,7 @@
|
||||||
<PackageVersion Include="MSTest.TestFramework" Version="3.1.1" />
|
<PackageVersion Include="MSTest.TestFramework" Version="3.1.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||||
<PackageVersion Include="ModelContextProtocol" Version="0.1.0-preview.2" />
|
<PackageVersion Include="ModelContextProtocol" Version="0.1.0-preview.2" />
|
||||||
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageVersion Include="BotSharp.Core" Version="$(BotSharpVersion)" />
|
<PackageVersion Include="BotSharp.Core" Version="$(BotSharpVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using BotSharp.Abstraction.Functions.Models;
|
using BotSharp.Abstraction.Functions.Models;
|
||||||
|
using ModelContextProtocol.Client;
|
||||||
using ModelContextProtocol.Protocol.Types;
|
using ModelContextProtocol.Protocol.Types;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
@ -8,15 +9,15 @@ namespace BotSharp.Core.MCP;
|
||||||
|
|
||||||
internal static class AIFunctionUtilities
|
internal static class AIFunctionUtilities
|
||||||
{
|
{
|
||||||
public static FunctionDef MapToFunctionDef(Tool tool)
|
public static FunctionDef MapToFunctionDef(McpClientTool tool)
|
||||||
{
|
{
|
||||||
if (tool == null)
|
if (tool == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(tool));
|
throw new ArgumentNullException(nameof(tool));
|
||||||
}
|
}
|
||||||
|
|
||||||
var properties = tool.InputSchema.GetProperty("properties");
|
var properties = tool.JsonSchema.GetProperty("properties");
|
||||||
var required = tool.InputSchema.GetProperty("required");
|
var required = tool.JsonSchema.GetProperty("required");
|
||||||
|
|
||||||
FunctionDef funDef = new FunctionDef
|
FunctionDef funDef = new FunctionDef
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ModelContextProtocol" />
|
<PackageReference Include="ModelContextProtocol" />
|
||||||
<PackageReference Include="System.Linq.AsyncEnumerable" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ namespace BotSharp.Core.Mcp.Functions;
|
||||||
|
|
||||||
public class McpToolAdapter : IFunctionCallback
|
public class McpToolAdapter : IFunctionCallback
|
||||||
{
|
{
|
||||||
private readonly Tool _tool;
|
private readonly McpClientTool _tool;
|
||||||
private readonly MCPClientManager _clientManager;
|
private readonly MCPClientManager _clientManager;
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
|
||||||
public McpToolAdapter(IServiceProvider provider, Tool tool, MCPClientManager client)
|
public McpToolAdapter(IServiceProvider provider, McpClientTool tool, MCPClientManager client)
|
||||||
{
|
{
|
||||||
_serviceProvider = provider ?? throw new ArgumentNullException(nameof(provider));
|
_serviceProvider = provider ?? throw new ArgumentNullException(nameof(provider));
|
||||||
_tool = tool ?? throw new ArgumentNullException(nameof(tool));
|
_tool = tool ?? throw new ArgumentNullException(nameof(tool));
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,9 @@ public class MCPToolAgentHook : AgentHookBase
|
||||||
var mcpClient = await mcpClientManager.GetMcpClientAsync(item.ServerId);
|
var mcpClient = await mcpClientManager.GetMcpClientAsync(item.ServerId);
|
||||||
if (mcpClient != null)
|
if (mcpClient != null)
|
||||||
{
|
{
|
||||||
var tools = await mcpClient.ListToolsAsync().ToListAsync();
|
var tools = await mcpClient.ListToolsAsync();
|
||||||
var toolnames = item.Functions.Select(x => x.Name).ToList();
|
var toolnames = item.Functions.Select(x => x.Name).ToList();
|
||||||
foreach (var tool in tools.Where(x => toolnames.Contains(x.Name, StringComparer.OrdinalIgnoreCase)))
|
foreach (var tool in tools.ToList().Where(x => toolnames.Contains(x.Name, StringComparer.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
var funDef = AIFunctionUtilities.MapToFunctionDef(tool);
|
var funDef = AIFunctionUtilities.MapToFunctionDef(tool);
|
||||||
functionDefs.Add(funDef);
|
functionDefs.Add(funDef);
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public class McpPlugin : IBotSharpPlugin
|
||||||
private async Task RegisterFunctionCall(IServiceCollection services, McpServerConfig server)
|
private async Task RegisterFunctionCall(IServiceCollection services, McpServerConfig server)
|
||||||
{
|
{
|
||||||
var client = await clientManager.GetMcpClientAsync(server.Id);
|
var client = await clientManager.GetMcpClientAsync(server.Id);
|
||||||
var tools = await client.ListToolsAsync().ToListAsync();
|
var tools = await client.ListToolsAsync();
|
||||||
|
|
||||||
foreach (var tool in tools)
|
foreach (var tool in tools)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -175,10 +175,10 @@ public class AgentController : ControllerBase
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("/agent/mcp/tools")]
|
[HttpGet("/agent/mcp/tools")]
|
||||||
public async Task<IEnumerable<Tool>> GetMCPTools(string serverId)
|
public async Task<IEnumerable<McpClientTool>> GetMCPTools(string serverId)
|
||||||
{
|
{
|
||||||
var client = await _clientManager.GetMcpClientAsync(serverId);
|
var client = await _clientManager.GetMcpClientAsync(serverId);
|
||||||
var tools = await client.ListToolsAsync().ToListAsync();
|
var tools = await client.ListToolsAsync();
|
||||||
|
|
||||||
return tools.Where(x => !string.IsNullOrWhiteSpace(x.Name))
|
return tools.Where(x => !string.IsNullOrWhiteSpace(x.Name))
|
||||||
.OrderBy(x => x.Name).ToList();
|
.OrderBy(x => x.Name).ToList();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue