百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

使用 MCP C# SDK 实现 MCP Tool

yund56 2025-05-21 05:34 37 浏览

使用 MCP C# SDK 实现 MCP

Intro

MCP是由Anthropic创建的一个开放协议 现在有官方 C# SDK 了,官方 C# SDK 由原来的 mcpdotnet 发展而来,基于 Microsoft.Extensions.AI 实现,截止写文章的时候(2025-4-1)目前最新版本时 0.1.0-preview 4 了,这一版本中增加了
ModelContextProtocol.AspNetCore
NuGet 包,使得实现基于 ASP.NET Core SSE 的 Mcp Server 更加简单了,之前的版本中需要将示例中的扩展拷贝到自己项目中去,有了这个 NuGet 包之后就不需要了,McpServer 目前主要的两种实现方式是 Stdio(标准输入输出) 和 SSE(Server Sent Event),新的规范里提出了基于 Http 的支持,目前暂时还未支持

What

SSE Sample

首先我们需要在项目里添加 NuGet 包引用,这里我们直接引用
ModelContextProtocol.AspNetCore

dotnet add package ModelContextProtocol.AspNetCore --prerelease

然后注册我们的 McpServer 示例如下:

builder.Services
.AddMcpServer() // 注册 McpServer 相关服务
.WithToolsFromAssembly() // 从程序集中扫描添加 tools
;

之后需要注册 Mcp Sse 的 Endpoint

var app = builder.Build();

app.MapMcp(); // 注册 mcp sse endpoint

await app.RunAsync();

最后我们要实现我们 Mcp tool 了,来看一个最简单的示例

[McpServerToolType]
public static class EchoTool
{
[McpServerTool, Description("Echoes the input back to the client.")]
public static string Echo(string message)
{
return "hello " + message;
}
}

McpTool 类型需要添加 McpServerToolType 的 attribute,同时 tool 对应的方法也需要添加 McpServerTool 的 attribute,默认 tool 的名字是方法名,也可以通过 Name 来执行,同时可以通过 DescriptionAttribute 来描述这个 tool 的功能,客户端可以根据 tool 的介绍来选择合适的 tool 来实现功能

最简单的功能差不多就是这样了,最早的版本里也需要是静态方法才能注册,使得想要使用依赖注入的话可能得自己实现一个 service locator 得模式,在第二个版本中支持了简单得依赖注入,我们可以直接在方法参数中添加对应得服务,示例如下:

[McpServerToolType]
public class TranslationTool
{
[McpServerTool(Name = "translation"), Description("Translate English to Simplified Chinese")]
public static async Task<string> TranslationEnZh(
[Description("The source english text needs to be translated to Simplified Chinese"
)]
string sourceText,
IChatClient chatClient,
CancellationToken cancellationToken
)

{
var response = await chatClient.GetResponseAsync(
// ...
);
// ...
}
}

这里我们就可以跑起来我们的 McpServer 了,跑起来之后可以通过官方的 mcp inspector 来调试

可以使用 npx @
modelcontextprotocol/inspector
来运行 mcp inspector,运行起来之后效果如下:


我们可以选择 Transport Type 为 SSE,URL 为我们 web server 的地址 /sse,默认 path 是 sse 然后点击 Connect 按钮即可

Connect 成功之后,下面会显示 Connected,然后我们可以点击中间的 List Tools 去向 server 请求支持的 tools,之后会列出来 server 支持的 tool,我们可以点击任意一个 tool 在右侧会出现对应的参数信息,我们填写之后点击 Run Tool 就可以调用 server 端的这个 tool

tools
echo-tool
translation-tool
csharp-exec

除了 mcp inspector 和 Claude 目前也有一些 chat 工具支持了 mcp tool,我目前有用 Cherry Studio,已经支持了 Mcp Tool,我们也可以在 Cheery Studio 中试一下(如果之前已经安装但是没有 Mcp Server 支持,推荐更新到最新版本)

CherryStudio McpServer Configure

类似地,我们添加 Mcp Server 的时候可以选择 SSE 并填写刚才的 URL,最早支持 MCP 的版本没有列出来可以调用的工具,在新版本里列出来了可用的工具,更加直观和方便了

接着我们在聊天窗口中也需要启用一下 Mcp Server,默认没有启用

chat with Mcp Server

然后就可以测试我们的 Mcp Server 了

chery translation

可以看到这里调用了我们 translation tool 并根据返回的结果生成了回答

cherry exec-csharp-code

它背后是怎么实现的呢?我们可以抓个包看一看,在生成返回结果时有两个请求

requests

第一个请求会将当前上下文的信息和启用的 mcp server tools 放在 request 中,请求服务器

request1

服务器端返回是否需要调用某一个 tool,发现有一个 ExecCSharpCode 的 tool 可以调用

response1

接着客户端会去调用我们的 tool 之后再将 tool 返回的结果作为上下文的一部分再次请求服务器

request2
response2

这次服务器返回了给用户的回复,客户端也返回了回答

Stdio Sample

除了 SSE 之外 Stdio 标准输入输出也是一种常见的方式,不过个人不是太推荐,尤其是使用第三方的一些 mcp server 时,感觉有安全风险,你可能并不知道别人的程序会做一些什么样的操作,在本地执行时会不会出现问题,还有就是在调试的时候有遇到文件被占用需要手动去进程管理器里杀死进程

首先添加对 ModelContextProtocol 的 NuGet package 引用

Stdio 模式是直接运行一个可执行的应用程序

var builder = Host.CreateApplicationBuilder(args);
builder.Services
.AddMcpServer() // 注册 McpServer 相关服务
.WithStdioServerTransport() // 添加标准输入输出传输支持
.WithToolsFromAssembly() // 从程序集中扫描添加 tools
;
// ...

这样基于标准输入输出的 Mcp Server 骨架就搭好了,之后就和前面一样实现我们的 tools 就可以了,针对调试和使用也是类似的只是换成 stdio 方式即可,配置示例:

cherry-stdio-mcp-server-sample

Mcp Client

我们也可以基于 SDK 实现 MCP 客户端,示例代码如下:


var client = await McpClientFactory.CreateAsync(new()
{
Id = "aspnet-sample",
Name = "ASP.NET McpServerSample",
TransportType = TransportTypes.Sse,
Location = "http://localhost:5000/sse",
});

// Print the list of tools available from the server.
foreach (var tool inawait client.ListToolsAsync())
{
Console.WriteLine($"{tool.Name} ({tool.Description})");
}

// Execute a tool (this would normally be driven by LLM tool invocations).
var result = await client.CallToolAsync(
"Echo",
new Dictionary<string, object?> { ["message"] = "MCP!" },
CancellationToken.None);

// echo always returns one and only one text content object
Console.WriteLine(result.Content.First(c => c.Type == "text").Text);


McpClient output
这里像 inspector 一样调用 Mcp Server 的工具,如果要做到 Cherry Studio 中在聊天上下文中调用还需要借助大语言模型的能力来实现

References

  • https://github.com/modelcontextprotocol/csharp-sdk
  • https://github.com/WeihanLi/SamplesInPractice/tree/main/McpSample
  • https://github.com/PederHP/mcpdotnet
  • https://github.com/modelcontextprotocol/inspector
  • https://github.com/CherryHQ/cherry-studio/releases

相关推荐

SM小分队Girls on Top,女神战队少了f(x)?

这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...

韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出

AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...

韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend

身高163的Giselle,长腿傲人,身材比例绝了...

假唱而被骂爆的女团:IVE、NewJeans、aespa上榜

在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...

新女团Aespa登时尚大片 四个少女四种style

来源:环球网

韩国女团aespa新歌MV曝光 画面梦幻造型超美

12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...

女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA

女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...

人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?

现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...

韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞

WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...

aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」

记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...

南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典

女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...

章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相

搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...

Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相

作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...

AESPA女团成员柳智敏karina大美女

真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...

对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了

哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...