使用MCP C# SDK开发MCP Server + Client

chatHistory = [

new(ChatRole.System, """
   You are a helpful assistant delivering time in one sentence
   in a short format, like 'It is 10:08 in Paris, France.'
   """),

]; // Core Part: Get AI Tools from MCP Server var mcpTools = await mcpClient.ListToolsAsync(); var chatOptions = new ChatOptions() {

Tools = [..mcpTools]

}; // Prompt the user for a question. Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($“Assistant> How can I assist you today?”); while (true) {

// Read the user question.
Console.ForegroundColor = ConsoleColor.White;
Console.Write("User> ");
var question = Console.ReadLine();
// Exit the application if the user didn't type anything.
if (!string.IsNullOrWhiteSpace(question) && question.ToUpper() == "EXIT")
    break;

chatHistory.Add(new ChatMessage(ChatRole.User, question));

Console.ForegroundColor = ConsoleColor.Green;
var response = await chatClient.GetResponseAsync(chatHistory, chatOptions);
var content = response.ToString();
Console.WriteLine($"Assistant> {content}");
chatHistory.Add(new ChatMessage(ChatRole.Assistant, content));

Console.WriteLine(); }

最后的效果如下图所示:
![](https://cdn.res.knowhub.vip/c/2504/06/f1514c8b.png?G1QAAMTsdJxI8kKj26hD2jvFHc2ARBVBpZ71es9Z%2byb6fgdD4zNan74%2f%2fKH16ZRMVEBgZFYEzxBLVXGZhaJFxFRqXMMB)
# 创建一个基于ASP.NET的MCP Server
除了使用标准的IO协议,我们还可以实现一个基于ASP.NET Core的MCP SSE Server,顾名思义它就是使用SSE传输方式。
(1)创建一个.NET 8.0 ASP.NET WebAPI应用,假设命名为:EDT.McpServer.WebHost
(2)安装MCP SDK
```csharp
ModelContextProtocol 0.1.0-preview.4
ModelContextProtocol.AspNetCore 0.1.0-preview.4

(3)创建一个Tools目录,然后添加一个TimeTool.cs 这里和上面的一样,不再赘述。 (4)修改Program.cs完成MCP Server配置:

using EDT.McpServer.WebHost.Tools;
using ModelContextProtocol.AspNetCore;
try
{
    Console.WriteLine("Starting MCP Server...");
var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddMcpServer().WithToolsFromAssembly();
    var app = builder.Build();
app.UseHttpsRedirection();
    app.MapGet("/", () => "Hello MCP Server!");
    app.MapMcp();
app.Run();
    return 0;
}
catch (Exception ex)
{
    Console.WriteLine($"Host terminated unexpectedly : {ex.Message}");
    return 1;
}

可以看到,就是这么简单,通过MapMcp实现了/sse端点的映射。后续MCP Client要连接的就是这个/sse的端点。 (5)这时,你就可以把这个ASP.NET WebAPI应用启动起来,假设我们这里是 https://localhost:8443,你就可以通过下面的一点点修改,让之前的这个MCP Client连接上这个MCP Server:

await using var mcpClient = await McpClientFactory.CreateAsync(new()
{
    Id = "time",
    Name = "Time MCP Server",
    TransportType = TransportTypes.Sse,
    Location = "https://localhost:8443/sse"
});

可以看到,仅仅修改TransportType为SSE,然后指定Server的BaseUrl即可。 OK,让我们再来运行一下Client看看能否再次成功调用Tool: 看来这次使用SSE传输方式也能调用成功了!Perfect!

小结

本文介绍了MCP的基本概念和工作模式,然后演示了如何通过MCP C# SDK创建MCP Server和Client,以及基于ASP.NET WebAPI创建SSE Server,相信会对你有所帮助。 如果你也是.NET程序员希望参与AI应用的开发,那就快快了解和使用基于Microsoft.Extensioins.AI + MCP C# SDK 的生态组件库吧。

示例源码

GitHub:点此查看

参考内容

MCP C# SDK Samples 《MCP C# Sample Demos