微软正在与 Anthropic 合作,为模型上下文协议(MCP)创建一个官方的 C# SDK。MCP 已经在人工智能社区得到了迅速的应用,这次合作旨在增强人工智能模型与 C#应用程序的集成。

  该 SDK 是作为一个开源项目在 modelcontextprotocol GitHub 组织中开发的,这使得开发人员很容易找到并在项目上进行协作。该库的 NuGet 包叫 ModelContextProtocol。

  这个库的起点是一个名为 mcpdotnet 的项目,由 Peder Holdgaard Pederson 发起。我们非常感谢 Peder 和其他贡献者所做的工作,他们为官方的 C# MCP 库奠定了坚实的基础。

MCP 是什么?

  模型上下文协议(MCP)是由 Anthropic 创建的一个开放协议,用于实现 LLM 应用程序与外部工具和数据源之间的集成。它最初于2024年11月发布,最近进行了更新,增加了新的流功能。该协议被设计为可扩展和灵活的,允许开发人员创建可用于 LLM 的自定义工具和数据源。

  许多微软产品已经增加了对 MCP 的支持,包括 Copilot Studio、VS Code 的新 GitHub Copilot Agent 模式和 Semantic Kernel。许多微软产品正在创建 MCP 服务器来访问它们的功能。GitHub MCP Server 和 用于浏览器自动化的 Playwright MCP 都是很受欢迎的例子,还有更多的正在开发中。

为什么是 C#?

  C# 是一种流行的编程语言,被许多开发人员使用,尤其是在企业领域。通过为 MCP 创建官方 C# SDK,微软旨在使开发人员更容易将 AI 模型集成到他们的 C# 应用程序中,并使用 C# 构建 MCP 服务器。C# SDK 还利用了现代 .NET 中显著的性能改进,为人工智能应用程序提供了出色的速度和效率。有了.NET 优化的运行时和对容器化的支持,服务在本地开发场景中表现良好。微软的许多核心产品都是用 C# 编写的,包括 Visual Studio、大部分 Azure 服务、支持 Microsoft Teams 和 XBOX 的服务等等。所有这些产品都可以从 MCP 中受益,C# SDK 为此提供了基础。

MCP的简要说明

  AI 应用程序可以使用 MCP 连接到外部工具和数据源,然后将其作为其上下文的一部分提供给 LLM。通过让 LLM 访问和使用外部数据和工具,增强其功能,使其能够执行更复杂的任务。

  AI 应用程序在 MCP 中称为 Host,通过 MCP 客户端与 MCP 服务器通信。MCP 客户端理解 MCP 协议,可以向 MCP 服务器发送请求,然后 MCP 服务器处理请求并返回响应。如下图所示:

  MCP 客户端和服务器端可以交换一组标准消息,包括:

消息

描述

InitializeRequest

该请求在客户端第一次连接时从客户端发送到服务器,要求服务器开始初始化

ListToolsRequest

从客户端发送请求服务器拥有的工具列表

CallToolRequest

客户端用来调用服务器提供的工具

ListResourcesRequest

从客户端发送,请求服务器拥有的资源列表

ReadResourceRequest

从客户端发送到服务器,读取特定的资源URI

ListPromptsRequest

从客户端发出,请求服务器所持有的提示词和提示词模板列表

GetPromptRequest

客户端用于获取服务器提供的提示词

PingRequest

由服务器或客户端发出的一种ping,用于检查对方是否还活着

CreateMessageRequest

服务器向客户端发出的通过客户端对大语言模型(LLM)进行采样的请求。客户端可以自主决定选择使用哪个模型。此外,客户端应在开始采样之前告知用户,以便用户能够检查该请求(引入人工干预环节),并决定是否批准该请求。

SetLevelRequest

从客户端到服务器的请求,以启用或调整日志记录

  正如您所看到的,MCP 协议被设计为灵活和可扩展的,允许开发人员创建可与 LLM 一起使用的自定义工具和数据源。而且已经有很多 MCP 服务器可用,每天都有更多的服务器被创建。modelcontextprotocol/servers repo 中的自述文件包含了参考服务器、第三方服务器和社区服务器的列表,这些服务器总共有数百个。

一个简单的例子——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 =>
{
// Configure all logs to go to stderr
consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
});
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync(); [McpServerToolType]
public static class EchoTool
{
[McpServerTool, Description("Echoes the message back to the client.")]
public static string Echo(string message) => $"hello {message}";
}

  注意:MCP C# SDK 处于预览阶段,Api 可能会发生变化。随着 SDK 的发展,我们将不断更新这个博客,但是如果您遇到上述代码的任何问题,请尝试使用 mcp-csharp README 中的“Getting Started (Server)”部分中的第一个代码示例。

  现在要查看服务器的运行情况,可以使用 MCP Inspector,这是 MCP 服务器的可视化测试工具。

  由于 MCP Inspector 是一个 node 应用程序,您不需要安装它,只需使用 npx 运行它即可。Inspector 的参数是一个将运行服务器的命令。在本例中,我们希望在当前目录下运行服务器,所以我们可以使用 dotnet run:

npx @modelcontextprotocol/inspector dotnet run

  系统可能会提示您安装 Inspector ,您可以按 y 并按 enter 键来安装。Inspector 将启动并执行用于启动服务器的命令。您会在终端上看到一些输出,表明服务器正在启动,然后它会显示一条消息,表明 Inspector UI 准备好了:

 MCP Inspector is up and running at http://localhost:5173 

  打开浏览器窗口并导航到终端中显示的 URL。您应该看到这样的内容:

  现在点击“Connect”按钮连接到服务器。Inspector 将连接到服务器并提供工具列表请求。如果服务器有任何资源或提示,它会提供请求资源或提示列表的功能。

  单击“List Tools”按钮查看服务器所拥有的工具列表。此时,只有一个工具可用,即 Echo 工具。

  现在点击“Echo”工具来查看工具的细节。您将看到工具描述和工具接受的参数的输入框—在本例中,Echo 工具接受一个名为“message”的参数。

  在“message”框中输入消息,然后单击“Run Tool”按钮。Inspector 将调用该工具并显示结果。

  这是一个非常简单的例子来介绍基本的概念。有关更复杂的示例,请参阅 SDK repo 中的 samples 目录。

结论

  这是对 MCP 和新的 MCP C# SDK 的快速介绍。SDK 仍处于早期阶段,但它已经是将 AI 模型集成到 C# 应用程序中的强大工具。SDK 是开源的,可以在 GitHub 上获得,我们欢迎来自社区的贡献。

  尝试 SDK 库中的一个示例,或者使用 SDK 创建自己的 MCP 服务器。如果遇到任何问题,请在 GitHub repo 上创建 issue。

  我们很高兴看到开发人员使用 MCP C# SDK 来发明创造,我们期待看到 MCP 生态系统的成长和发展。

原文连接:https://devblogs.microsoft.com/blog/microsoft-partners-with-anthropic-to-create-official-c-sdk-for-model-context-protocol

【译】微软与 Anthropic 合作为 MCP 创建官方 C# SDK的更多相关文章

  1. 微软Project Oxford帮助开发人员创建更智能的应用

    Oxford帮助开发人员创建更智能的应用" title="微软Project Oxford帮助开发人员创建更智能的应用"> 假设你是一名对关于健身的应用充满奇思妙想 ...

  2. 【Azure 机器人】微软Azure Bot 编辑器系列(1) : 创建一个天气对话机器人(The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  3. [译]终极塔防——运用HTML5从头创建一个塔防游戏

    翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...

  4. 【译】从现有的容器里创建新的Docker镜像

    如果你修改了一个容器的内容,你可以使用docker commit命令将现有的容器状态保存为一个镜像. 下面的例子展示了如何修改一个基于oraclelinux:6.6的容器使得其能够运行Apache H ...

  5. 【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务

    在我的上一篇文章中,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计划运行后台任务.不幸的是,由于Quartz.NET API的工作方式,在Quartz作业中使用 ...

  6. [原][译][osgearth]API加载地球(OE官方文档翻译)

    原文参考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creation 本人翻译水平有限... 加载 ...

  7. 微软智能云Azure – 中国首家官方支持CoreOS的公有云

    北京2016年6月24日, 在由中国开源软件推进联盟(COPU)主办, 开源社协办,微软赞助的“第十一届开源中国开源世界高峰论坛”上,微软亚太研发集团云计算高级总监梁戈碧女士正式对外宣布一个令人振奋的 ...

  8. Xcode8如何创建Framework静态SDK库

    iOS的软件开发工具包SDK,一般是以库的形式出现,从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.开发过程中,我们常常会用到第三方的SDK.尤其是微信.QQ.百度地图.支付功能等.其 ...

  9. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  10. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

随机推荐

  1. C#(面向对象的托管语言)类库(区别于应用程序)的异常处理思路

    1.不要做出任何应用程序才需要考虑抉择策略,不能想当然的决定一些错误情形.具体的一个体现形式是什么异常都捕获.这不是类库的职责,因为无法掌握所有的调用者的使用情形,这些不确定性是委托.虚方法.接口等特 ...

  2. mysql 无数据插入,有数据更新

    mysql的语法与sql server有很多不同,sql server执行插入更新时可以update后使用if判断返回的@@rowcount值,然后确定是否插入,mysql在语句中无法使用类似sql  ...

  3. 【编程思想】C# delegate 委托的本质:方法对象的应用

    一.前言 翻回之前写的博客,前期写的结构确实差很多, 这次细看了<委托那些事(一).(二)>,忍不住重新写一下,之前把简单的事情复杂化了. 为什么现在思维不一样了,有一点我认为是见识的计算 ...

  4. [Software Note ] Fibersim-export-OffsetedMesh

    输出Offseted 的Drape data 只在fibersim 导出界面打开Allow offset simulation 选项,输出的网格还是在layup surface 上: 输出的数据并未偏 ...

  5. 使用Win32控制台实现boost共享内存通信

    发送端: #define BOOST_DATE_TIME_NO_LIB #include <boost/interprocess/shared_memory_object.hpp> #in ...

  6. games101 作业4提高部分

    games101 作业4提高部分 作业四中,我们按照实验步骤完成bazier曲线之后,得到的结果有一定的锯齿感: 然后pdf中给出的思路是: 对于一个曲线上的点,不只把它对应于一个像素,你需要根据到像 ...

  7. Shell语言编程(炼气)

    1. Shell脚本执行方式 执行方式 应用及场景 通过sh或bash 书写脚本后,最常用的方式,在其他非红帽系统中,建议使用bash运行脚本 通过.点或source 加载/生效配置文件(环境变量,别 ...

  8. 【JDBC第5章】批量插入

    第5章:批量插入 5.1 批量执行SQL语句 当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 JDBC的 ...

  9. ubuntu 22.04安装harbor

    一.概述 Harbor 是一个企业级的云原生容器镜像仓库,由 VMware 开发并贡献给 Cloud Native Computing Foundation (CNCF).它在传统的 Docker R ...

  10. Linux poweroff 命令

    poweroff 命令命令用于关闭计算器并切断电源. 使用权限:系统管理者. 语法 poweroff [-n] [-w] [-d] [-f] [-i] [-h] 参数说明: -n : 在关机前不做将记 ...