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。
相关资源:
BotSharp + MCP 三步实现智能体开发的更多相关文章
- spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发
前言: 基于spring framework 4.x或spring boot 1.x开发环境 务必注意以下版本问题:Spring framework4.x(Spring boot1.x)对应sprin ...
- 三步学会用spring开发OSGI——(第一步:环境篇)
Spring-DM是什么 Spring-DM 指的是Spring Dynamic Modules. dm Server 是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和S ...
- 三步解决IDEA系列开发工具 RubyMine、IntelliJ IDEA 卡顿问题
近日有小伙伴跟我反映说自己的开发工具很卡,有没有什么解决方案?答案是当然有啦!接下来看看怎么设置! 1.打开RubyMine,或IDEA,上边工具栏选择Help,下拉选择Edit Custom VM ...
- iOS开发三步搞定百度推送
iOS开发三步搞定百度推送 百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...
- 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。
前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...
- EOS智能合约开发(三):EOS创建和管理账号
没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...
- 五步搞定Android开发环境部署
引言 在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入 Android浪潮的朋友们,为了确保大家能顺利完成开发 ...
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭 ...
- NEO智能合约开发(二)再续不可能的任务
NEO智能合约开发中,应用合约比较简单,是的你没看错,应用合约比较简单. 应用合约三部曲,发布.调用.看结果.除了看结果工具比较缺乏,发布调用neogui最起码可以支撑你测试. 鉴权合约比较麻 ...
- EOS智能合约开发(四):智能合约部署及调试(附编程示例)
EOS智能合约开发(一):EOS环境搭建和创建节点 EOS智能合约开发(二):EOS创建和管理钱包 EOS智能合约开发(三):EOS创建和管理账号 部署智能合约的示例代码如下: $ cleos set ...
随机推荐
- Golang-编译和工具链12
http://c.biancheng.net/golang/build/ go build命令(go语言编译命令)完全攻略 Go语言的编译速度非常快.Go 1.9 版本后默认利用Go语言的并发特性进行 ...
- Symbolic pg walkthrough Intermediate window 利用302进行文件csrf
nmap nmap -p- -A -sS -T4 192.168.239.177 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-15 03:39 ...
- oracle 根据节点id递归查询全部的父节点(转载)
本文转载自 https://blog.csdn.net/BondChenJ/article/details/78581625 1.适用状况:blog 适用树状结构数据,例如包含id,parent_ ...
- 对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文
DeepSeek是国内大模型技术的新秀,最近也在业界和媒体界火爆出圈,所以想学习一下其技术. 大模型时代,学习知识,当然首先想到利用大模型,由于在过去一年,对DeepSeek使用不多,所以想和文新一言 ...
- 玩转云端|天翼云边缘安全加速平台AccessOne实用窍门之保障热门产品发售服务安全稳定
本文分享自天翼云开发者社区<玩转云端|天翼云边缘安全加速平台AccessOne实用窍门之保障热门产品发售服务安全稳定>,作者:天翼云社区官方账号 随着社会经济的发展和人民生活水平的提高,越 ...
- Linux网络优化踩坑net.ipv4.tcp_tw_recycle
一.背景 来源于埋点上报服务,埋点上报服务是用户打开APP后点击.浏览.曝光等数据都会上报到埋点服务,收集数据后用来公司运营. 本次踩坑来源于监控到上课高峰期net.sockets.tcp.timew ...
- 性能测试-Oceanus 测试FLink mysql到Iceberg性能
一.任务依赖信息 1.mysql测试库信息 地址:127.0.0.1.gomysql_bdg_test 库:bdg_test 表:order_info1 2.iceberg库 hive地址:thrif ...
- 告别 DeepSeek 系统繁忙,七个 DeepSeek 曲线救国平替入口,官网崩溃也能用!
前言 DeepSeek作为一款备受瞩目的国产大模型,以其强大的功能和卓越的性能赢得了众多用户的青睐.然而,随着用户量的激增,DeepSeek官网近期频繁遭遇服务器繁忙甚至崩溃的问题,给广大用户带来了不 ...
- 中国最难入职的IT公司排行榜
在IT行业竞争日益白热化的今天,头部企业的招聘门槛不断刷新求职者的认知.根据最新行业调研和招聘数据,我们整理出2025年中国最难入职的几家互联网公司,并揭秘其背后严苛的选拔逻辑. 通常衡量难不难,会从 ...
- extern和static
extern和static extern和static两者之间是有一种相克的关系:用了extern的不能用static,用了static的不能用extern, extern是声明让别的文件中能够使用, ...