Skip to content

Commit d0b4a49

Browse files
author
Wenbo Cao
committed
Merge branch 'master' of https://github.com/evan-cao-wb/BotSharp
2 parents f5bd6a9 + 03a6f85 commit d0b4a49

File tree

6 files changed

+94
-100
lines changed

6 files changed

+94
-100
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using BotSharp.Abstraction.Agents;
2+
using BotSharp.Abstraction.Functions;
3+
using BotSharp.Core.Mcp.Functions;
4+
using BotSharp.Core.Mcp.Settings;
5+
using BotSharp.Core.Mcp;
6+
using BotSharp.MCP.Hooks;
7+
using Microsoft.Extensions.Configuration;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using Microsoft.Extensions.Hosting;
10+
using ModelContextProtocol.Configuration;
11+
using System;
12+
using System.Collections.Generic;
13+
using System.Linq;
14+
using System.Text;
15+
using System.Threading.Tasks;
16+
using ModelContextProtocol.Client;
17+
18+
namespace BotSharp.MCP;
19+
20+
public static class BotSharpMCPExtensions
21+
{
22+
/// <summary>
23+
/// Add mcp
24+
/// </summary>
25+
/// <param name="services"></param>
26+
/// <param name="config"></param>
27+
/// <returns></returns>
28+
public static IServiceCollection AddBotSharpMCP(this IServiceCollection services,
29+
IConfiguration config)
30+
{
31+
var settings = config.GetSection("MCPSettings").Get<MCPSettings>();
32+
services.AddScoped<MCPSettings>(provider => { return settings; });
33+
if (settings != null)
34+
{
35+
36+
var clientManager = new MCPClientManager(settings);
37+
services.AddSingleton(clientManager);
38+
39+
foreach (var server in settings.McpServerConfigs)
40+
{
41+
RegisterFunctionCall(services, server, clientManager)
42+
.ConfigureAwait(false)
43+
.GetAwaiter()
44+
.GetResult();
45+
}
46+
// Register hooks
47+
services.AddScoped<IAgentHook, MCPToolAgentHook>();
48+
}
49+
return services;
50+
}
51+
52+
private static async Task RegisterFunctionCall(IServiceCollection services, McpServerConfig server, MCPClientManager clientManager)
53+
{
54+
var client = await clientManager.GetMcpClientAsync(server.Id);
55+
var tools = await client.ListToolsAsync();
56+
57+
foreach (var tool in tools)
58+
{
59+
services.AddScoped(provider => { return tool; });
60+
61+
services.AddScoped<IFunctionCallback>(provider =>
62+
{
63+
var funcTool = new McpToolAdapter(provider, tool, clientManager);
64+
return funcTool;
65+
});
66+
}
67+
}
68+
}

src/Infrastructure/BotSharp.MCP/McpPlugin.cs

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/Infrastructure/BotSharp.MCP/Settings/MCPSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ public class MCPSettings
88
{
99
public McpClientOptions McpClientOptions { get; set; }
1010

11-
public List<McpServerConfig> McpServerConfigs { get; set; }
11+
public List<McpServerConfig> McpServerConfigs { get; set; } = new();
1212

1313
}

src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using BotSharp.Abstraction.Agents.Models;
2-
using BotSharp.Core.Mcp;
3-
using ModelContextProtocol.Client;
4-
using ModelContextProtocol.Protocol.Types;
2+
3+
54

65
namespace BotSharp.OpenAPI.Controllers;
76

@@ -12,20 +11,17 @@ public class AgentController : ControllerBase
1211
private readonly IAgentService _agentService;
1312
private readonly IUserIdentity _user;
1413
private readonly IServiceProvider _services;
15-
private readonly MCPClientManager _clientManager;
16-
14+
1715
public AgentController(
1816
IAgentService agentService,
1917
IUserIdentity user,
20-
IServiceProvider services,
21-
MCPClientManager mCPClientManager
18+
IServiceProvider services
2219
)
2320
{
2421
_agentService = agentService;
2522
_user = user;
2623
_services = services;
27-
_clientManager = mCPClientManager;
28-
}
24+
}
2925

3026
[HttpGet("/agent/settings")]
3127
public AgentSettings GetSettings()
@@ -173,17 +169,7 @@ public IEnumerable<AgentUtility> GetAgentUtilityOptions()
173169
}
174170
return utilities.Where(x => !string.IsNullOrWhiteSpace(x.Name)).OrderBy(x => x.Name).ToList();
175171
}
176-
177-
[HttpGet("/agent/mcp/tools")]
178-
public async Task<IEnumerable<McpClientTool>> GetMCPTools(string serverId)
179-
{
180-
var client = await _clientManager.GetMcpClientAsync(serverId);
181-
var tools = await client.ListToolsAsync();
182-
183-
return tools.Where(x => !string.IsNullOrWhiteSpace(x.Name))
184-
.OrderBy(x => x.Name).ToList();
185-
}
186-
172+
187173
[HttpGet("/agent/labels")]
188174
public async Task<IEnumerable<string>> GetAgentLabels()
189175
{

src/WebStarter/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Serilog;
66
using BotSharp.Abstraction.Messaging.JsonConverters;
77
using StackExchange.Redis;
8+
using BotSharp.MCP;
89

910
var builder = WebApplication.CreateBuilder(args);
1011

@@ -23,6 +24,7 @@
2324
options.JsonSerializerOptions.Converters.Add(new RichContentJsonConverter());
2425
options.JsonSerializerOptions.Converters.Add(new TemplateMessageJsonConverter());
2526
}).AddBotSharpOpenAPI(builder.Configuration, allowedOrigins, builder.Environment, true)
27+
.AddBotSharpMCP(builder.Configuration)
2628
.AddBotSharpLogger(builder.Configuration);
2729

2830
// Add service defaults & Aspire components.

src/WebStarter/appsettings.json

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -171,23 +171,23 @@
171171
"Model": "gpt-4o-mini"
172172
}
173173
},
174-
"MCPSettings": {
175-
"McpClientOptions": {
176-
"ClientInfo": {
177-
"Name": "SimpleToolsBotsharp",
178-
"Version": "1.0.0"
179-
}
180-
},
181-
"McpServerConfigs": [
182-
{
183-
"Id": "PizzaServer",
184-
"Name": "PizzaServer",
185-
"TransportType": "sse",
186-
"TransportOptions": [],
187-
"Location": "http://localhost:58905/sse"
188-
}
189-
]
190-
},
174+
//"MCPSettings": {
175+
// "McpClientOptions": {
176+
// "ClientInfo": {
177+
// "Name": "SimpleToolsBotsharp",
178+
// "Version": "1.0.0"
179+
// }
180+
// },
181+
// "McpServerConfigs": [
182+
// {
183+
// "Id": "PizzaServer",
184+
// "Name": "PizzaServer",
185+
// "TransportType": "sse",
186+
// "TransportOptions": [],
187+
// "Location": "http://localhost:58905/sse"
188+
// }
189+
// ]
190+
//},
191191
"Conversation": {
192192
"DataDir": "conversations",
193193
"ShowVerboseLog": false,
@@ -413,7 +413,6 @@
413413
"BotSharp.Core.Crontab",
414414
"BotSharp.Core.Realtime",
415415
"BotSharp.Logger",
416-
"BotSharp.MCP",
417416
"BotSharp.Plugin.MongoStorage",
418417
"BotSharp.Plugin.Dashboard",
419418
"BotSharp.Plugin.OpenAI",

0 commit comments

Comments
 (0)