BotSharp + MCP 三步實現智能體開發
1. 簡介
1.1 什么是MCP
Model Context Protocol(MCP)模型上下文協議是一種標準化協議,它讓大模型能夠更容易地和外部的數據、工具連接起來。你可以把MCP想象成一個通用的插頭或者接口,就像USB-C一樣,不管是什么設備,只要插上這個接口,就能和電腦、充電器等連接起來。
注意,它連接的不是物理設備,而是AI模型和外部的數據源、工具等。有了MCP,AI模型就能更方便地獲取外部的信息,完成更多的任務。比如,通過MCP,AI模型可以操作電腦讀寫文件,或者模擬瀏覽器操作等。
1.2 為什么需要MCP
首先,MCP提供了一個標準化的接口,使得AI模型能夠輕松地與各種外部工具和數據源進行交互,無需為每個工具或數據源單獨開發集成代碼。
其次,MCP還解決了數據孤島問題,通過統一協議連接分散的數據源,使AI模型能夠實時訪問和利用最新的數據。
總的來說,MCP就像是一個橋梁,讓AI模型與外部世界更好地連接起來,從而發揮出更大的價值和潛力。
1.3 .NET與MCP架構
客戶端/服務器層:McpClient負責處理客戶端操作,而McpServer則管理服務器端協議操作。兩者都利用McpSession來進行通信管理。
會話層(McpSession):通過DefaultMcpSession實現來管理通信模式和狀態。
傳輸層(McpTransport):處理JSON-RPC 2.0消息的序列化和反序列化,并支持多種傳輸實現。
MCP客戶端是模型上下文協議(MCP)架構中的關鍵組件,負責建立和管理與MCP服務器的連接。它實現了協議的客戶端部分
MCP服務器是模型上下文協議(MCP)架構中的基礎組件,它為客戶端提供工具、資源和功能。它實現了協議的服務器端部分。
BotSharp 提供了非常方便的進行 MCP 的集成。接下來,我們將詳細的完成一個完整的MCP應用案例。
2. 實戰案例
2.1 服務端開發
我們將在 MCP 服務端提供3個外部功能:獲取pizza 價格、下訂單和支付。這里我們使用MCP C# SDK來實現ASP.NET Core的MCP SSE Server,顧名思義它就是使用SSE傳輸方式。
(1)創建一個.NET 8.0 ASP.NET WebAPI應用,假設命名為:BotSharp.PizzaBot.MCPServer
(2)安裝MCP SDK,添加2個nuget 包:
<PackageReference Include="ModelContextProtocol" />
<PackageReference Include="ModelContextProtocol.AspNetCore" />
(3)創建一個Tools目錄,然后添加3個工具,我們以MakePayment 為例做個介紹:
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace BotSharp.PizzaBot.MCPServer.Tools;
[McpServerToolType]
public static class MakePayment
{
[McpServerTool(Name = "make_payment"), Description("call this function to make payment.")]
public static string Make_Payment(
[Description("order number"),Required] string order_number,
[Description("total amount"),Required] int total_amount)
{
if (order_number is null)
{
throw new McpServerException("Missing required argument 'order_number'");
}
if (order_number is null)
{
throw new McpServerException("Missing required argument 'total_amount'");
}
return "Payment proceed successfully. Thank you for your business. Have a great day!";
}
}
可以看到基于SDK提供的Attribute,可以方便地將其指定為MCP Server Tools
(4)修改Program.cs設置為啟動MCP Server
同樣,也是很方便地就完成了MCP Server的創建,重點關注WithToolsFromAssembly這個擴展方法,它會掃描程序集中添加了McpServerTool標簽的類進行注冊。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer()
.WithToolsFromAssembly();
var app = builder.Build();
app.MapGet("/", () => "This is a test server with only stub functionality!");
app.MapMcp();
app.Run();
這時我們已經完成了MCP Server的創建,可以把它啟動起來了。
(5)測試MCP Server
但是,要完成測試MCP Server,我們可以用官方的測試工具MCP Inspector。MCP Inspector 是專為 Model Context Protocol(MCP)服務器設計的交互式調試工具,支持開發者通過多種方式快速測試與優化服務端功能。
無需安裝即可通過 npx 直接運行 Inspector:npx @modelcontextprotocol/inspector
2.2 Botsharp 中使用MCP Server
在Botsharp 程序中添加 MCP Server的配置:
"MCP": {
"Enabled": true,
"McpClientOptions": {
"ClientInfo": {
"Name": "SimpleToolsBotsharp",
"Version": "1.0.0"
}
},
"McpServerConfigs": [
{
"Id": "PizzaServer",
"Name": "PizzaServer",
"TransportType": "sse",
"TransportOptions": [],
"Location": "http://localhost:58905/sse"
}
]
}
McpServerConfigs 是一個宿主,可以支持配置多個MCP Server,Botsharp 有一個MCP集成的核心模塊BotSharp.Core.MCP, 目前已經實現將MCP Server的 Tools 注冊為BotSharp的IFunctionCallback ,然后就可以在具體的Agent 上配置對應的工具McpToolAdapter。
我們在測試的示例是BotSharp 的經典披薩示例,將原來的函數調用工具的相關定義移到MCP Server, 我就把披薩示例中的智能體Order 的工具get_pizza_price 和place_an_order 改成MCP Tools,把原來的代碼注釋了,配置上改成用McpTool:
智能體Order的McpTool的配置
我們也可以通過BotSharp的前端UI 來修改:
到這里我們就可以在BotSharp 中使用MCP Tools。具體是怎么用的,可以看Order 智能體的例程提示詞:
You are now a Pizza Ordering agent, and you can help customers order a pizza according to the user's preferences.
Follow below step to place order:
1: Ask user preferences, call function get_pizza_types to provide the variety of pizza options.
2: Confirm with user the pizza type and quantity.
3: Call function place_an_order to purchase.
4: Ask user how to pay for this order.
Use below information to help ordering process:
* Today is {{current_date}}, the time now is {{current_time}}, day of week is {{current_weekday}}.
測試結果
成功?。。?
總結
本文介紹了MCP的基本概念和工作模式,然后演示了如何通過MCP C# SDK創建基于ASP.NET WebAPI創建SSE Server,在Botsharp中如何使用MCP Tools,相信會對你有所幫助。如果你也是.NET程序員希望參與AI應用的開發,那就快快了解和使用基于Botsharp + MCP C# SDK 的生態組件庫吧。
示例源碼在Botsharp github倉庫的PR:https://github.com/SciSharp/BotSharp/pull/994 ,很快就會合并到master。
相關資源:
歡迎大家掃描下面二維碼成為我的客戶,扶你上云









浙公網安備 33010602011771號