微软与Anthropic合作,为模型上下文协议(MCP)创建一个官方的C# SDK。MCP在AI社区中迅速被采用,这次合作旨在增强AI模型与C#应用的集成。
该SDK作为一个开源项目在modelcontextprotocol GitHub组织中开发,使开发者能够轻松找到并协作参与该项目。该库作为一个NuGet包提供,名为ModelContextProtocol。
这个库的起点是一个名为mcpdotnet的项目,由 Peder Holdgaard Pederson 发起。我们感谢Peder和其他贡献者在那存储库中所做的工作,为官方MCP C#库奠定了坚实的基础。
什么是MCP?
模型上下文协议(MCP)是由Anthropic创建的一个开放协议,旨在实现LLM应用与外部工具和数据源的集成。它最初于2024年11月发布,最近更新增加了新的流式传输功能。该协议设计得具有扩展性和灵活性,允许开发者创建可与LLM一起使用的自定义工具和数据源。
许多微软产品已经增加了对MCP的支持,包括Copilot Studio、VS Code的新GitHub Copilot代理模式和Semantic Kernel。许多微软产品正在创建MCP服务器以访问其功能。GitHub MCP服务器和用于浏览器自动化的Playwright MCP是受欢迎的例子,还有更多正在开发中。
为什么选择C#?
C#是一种深受许多开发者欢迎的编程语言,特别是在企业领域。通过为MCP创建一个官方C# SDK,微软旨在使开发者更容易将AI模型集成到他们的C#应用中,并使用C#构建MCP服务器。C# SDK还利用了现代.NET的显著性能改进,为AI应用提供了出色的速度和效率。凭借.NET优化的运行时和对容器化的支持,服务在本地开发场景中表现出色。微软的许多核心产品都是用C#编写的,包括Visual Studio、大多数Azure服务、支持Microsoft Teams和XBOX的服务等等。所有这些产品都可以从模型上下文协议中受益,而C# SDK为此提供了基础。
MCP简要说明
AI应用可以使用MCP连接到外部工具和数据源,然后将其作为上下文的一部分提供给LLM。这使得LLM能够访问和使用外部数据和工具,增强其能力并使其能够执行更复杂的任务。
在MCP中被称为Host的AI应用通过MCP客户端与MCP服务器通信。MCP客户端理解MCP协议,可以向MCP服务器发送请求,然后服务器处理请求并返回响应。以下是从MCP文档中改编的图表,说明了这一点:

MCP客户端和服务器可以交换一组标准消息,包括:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
正如你所见,MCP协议设计得灵活且可扩展,允许开发者创建可与LLM一起使用的自定义工具和数据源。目前已经有很多MCP服务器可用,并且每天都有更多服务器被创建。modelcontextprotocol/servers存储库中的Readme包含参考服务器、第三方服务器和社区服务器的列表,总数达到数百个。
一个简单示例 - Echo服务器
使用官方C# SDK创建一个简单的MCP服务器非常容易。这里我们将使用SDK README中包含的示例Echo服务器。Echo服务器简单地将从客户端接收的任何消息回显回去,前面加上“hello ”。
从一个新的dotnet控制台应用程序开始,添加Microsoft.Extensions.Hosting和预发布版ModelContextProtocol NuGet包:
dotnet add package Microsoft.Extensions.Hosting
dotnet add package ModelContextProtocol --prerelease
然后,将Program.cs文件中的代码替换为以下代码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddConsole(consoleLogOptions =>
{
// 配置所有日志输出到stderr
consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
});
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();
[McpServerToolType]
publicstaticclassEchoTool
{
[McpServerTool, Description("将消息回显给客户端。")]
public static string Echo(string message) => $"hello {message}";
}
注意:MCP C# SDK处于预览阶段,API可能会发生变化。我们将随着SDK的发展持续更新此博客,但如果您在使用上述代码时遇到任何问题,请尝试使用mcp-csharp README中“入门(服务器)”部分中的第一个代码示例。
现在要看到服务器的运行,您可以使用MCP Inspector,这是一个用于MCP服务器的可视化测试工具。
由于MCP Inspector是一个node应用程序,您无需安装它,只需使用npx运行即可。检查器的参数是一个将运行服务器的命令。在这种情况下,我们希望在当前目录中运行服务器,因此可以使用dotnet run:
npx @modelcontextprotocol/inspector dotnet run
您可能会被提示安装检查器,您可以通过按y并按回车键来完成安装。检查器将启动并执行指定的命令以启动服务器。您将在终端中看到一些输出,表明服务器正在启动,然后会显示一条消息,表明检查器UI已准备就绪:
🔍 MCP Inspector is up and running at http://localhost:5173🚀
打开浏览器窗口并导航到终端中显示的URL。您应该会看到类似这样的内容:

MCP Inspector启动
现在点击“连接”按钮以连接到服务器。检查器将连接到服务器并提供请求工具列表的选项。如果服务器有任何资源或提示,它还会提供请求资源或提示列表的选项。
点击“列出工具”按钮以查看服务器拥有的工具列表。在这种情况下,只有一个工具可用,即Echo工具。

MCP Inspector列出工具
现在点击“Echo”工具以查看工具的详细信息。您将看到工具描述和工具接受的任何参数的输入框——在这种情况下,Echo工具接受一个名为“message”的单一参数。
MCP Inspector显示工具
在“message”框中输入一条消息,然后点击“运行工具”按钮。检查器将调用工具并显示结果。
MCP Inspector运行工具
这是一个非常简单的示例,以基础级别介绍概念。要了解一些更复杂的示例,请查看SDK存储库中的samples目录。
结论
这是对模型上下文协议和新MCP C# SDK的快速介绍。SDK仍处于早期阶段,但它已经是将AI模型集成到C#应用中的强大工具。SDK是开源的,可在GitHub上获取,我们欢迎社区的贡献。
尝试SDK存储库中的一个示例,或使用SDK创建您自己的MCP服务器。如果您遇到任何问题,请在GitHub存储库上提出问题。
我们很期待看到开发者们将使用MCP C# SDK创造什么,我们期待看到MCP生态系统的成长和发展。

