MCPSharp:构建Model Context Protocol (MCP) 服务器和客户端的 .NET 库

B站影视 日本电影 2025-04-08 08:41 2

摘要:• 创建符合 MCP 标准的工具和函数,供 AI 模型发现和使用。• 使用简单易用的客户端直接连接到现有的 MCP 服务器。• 通过简单的属性标记将 .NET 方法暴露为 MCP 端点。• 无缝处理 MCP 协议细节和 JSON-RPC 通信。

MCPSharp 是一个用于帮助开发者构建 Model Context Protocol (MCP) 服务器和客户端的 .NET 库。通过 MCPSharp,我们可以:

• 创建符合 MCP 标准的工具和函数,供 AI 模型发现和使用。

• 使用简单易用的客户端直接连接到现有的 MCP 服务器。

• 通过简单的属性标记将 .NET 方法暴露为 MCP 端点。

• 无缝处理 MCP 协议细节和 JSON-RPC 通信。

MCP(Model Context Protocol)是一种协议,用于帮助AI模型更安全、便捷地连接和访问外部数据源和工具。它通过标准化的接口,让AI可以更好地理解和使用外部信息,提升AI的应用效果。

当您需要以下功能时,可以选择使用 MCPSharp:

• 创建可供像 Anthropic's Claude Desktop 这样的 AI 助手使用的工具。

• 构建符合 MCP 标准的 API,而无需处理协议细节。

• 将现有的 .NET 代码暴露为 MCP 端点。

• 通过标准化接口为应用程序添加 AI 能力。

• 在不锁定单一厂商的情况下集成 Microsoft.Extensions.AI 和/或 Semantic Kernel。

1. 定义一个工具using MCPSharp;

public classCalculator
{
[McpTool("add", "Adds two numbers")]// 注意:[McpFunction] 已废弃,使用 [McpTool] 替代
public staticintAdd([McpParameter(true)]inta, [McpParameter(true)]intb)
{
return a + b;
}
}2. 启动服务器await MCPServer.StartAsync("CalculatorServer", "1.0.0");StartAsync方法会自动查找基程序集中标记了[McpTool]属性的方法。如果您的方法位于引用库中,可以通过调用MCPServer.Register;手动注册这些方法。如果方法使用了 Semantic Kernel 属性,同样可以正常工作。如果客户端支持列表变更通知,它将在工具注册时收到通知。动态工具注册

注册具有自定义实现的动态工具:

MCPServer.AddToolHandler(new Tool
{
Name = "dynamicTool",
Description = "A dynamic tool",
InputSchema = new InputSchema {
Type = "object",
Required = ["input"],
Properties = new Dictionarystring, ParameterSchema> {
{"input", new ParameterSchema { Type = "string", Description = "Input value" }}
}
}
}, (stringinput) => { return $"You provided: {input}"; });与 Microsoft.Extensions.AI 集成// 客户端集成
MCPClient client = new("AIClient", "1.0", "path/to/mcp/server");
IList functions = await client.GetFunctionsAsync;

此列表可以插入到 ChatOptions.Tools属性中,使 MCP 服务器能够与任何IChatClient实现无缝协作。

Semantic Kernel 集成using Microsoft.SemanticKernel;

public classMySkillClass
{
[KernelFunction("MyFunction")]
[Description("Description of my function")]
publicstringMyFunction(stringinput) => $"Processed: {input}";
}

// 注册到 MCPServer
MCPServer.Register;

目前,这是将 Semantic Kernel 方法注册到 MCP 服务器的唯一方式。

属性

• [McpTool]:标记类或方法为 MCP 工具。

• 可选参数:

• Name:工具名称(默认为类/方法名)。

• Description:工具描述。

• [McpParameter]:为函数参数提供元数据。

• 可选参数:

• Description:参数描述。

• Required:是否为必填参数(默认为false)。

• [McpResource]:标记属性或方法为 MCP 资源。

• 参数:

• Name:资源名称。

• URI:资源 URI(可包含模板)。

• MimeType:资源 MIME 类型。

• Description:资源描述。

服务器方法

• MCPServer.StartAsync(string serverName, string version):启动 MCP 服务器。

• MCPServer.Register:注册包含工具或资源的类。

• MCPServer.AddToolHandler(Tool tool, Delegate func):注册动态工具。

客户端方法

• new MCPClient(string name, string version, string server, string args = , IDictionary env = ):创建客户端实例。

• client.GetToolsAsync:获取可用工具。

• client.CallToolAsync(string name, Dictionary parameters):调用工具。

• client.GetResourcesAsync:获取可用资源。

• client.GetFunctionsAsync:获取工具作为 AIFunctions。

MCPSharp 自动从 XML 注释中提取文档:

///
/// 提供数学运算
///
publicclassCalculator
{
///
/// 将两个数字相加
///
///

要相加的第一个数字


///

要相加的第二个数字


/// 两个数字的和
[McpTool]
public staticintAdd(
[McpParameter(true)]inta,
[McpParameter(true)]intb)
{
return a + b;
}
}

在项目文件中启用 XML 文档:

PropertyGroup
GenerateDocumentationFile>true
NoWarn>$(NoWarn);1591NoWarn
PropertyGroup

使得可以快速更改 MCP 工具的名称和描述,而无需重新编译。

MCPSharp 提供了一套完整且易用的工具链,帮助快速构建符合 MCP 标准的服务器和客户端。无论是创建 AI 助手工具,还是将现有代码暴露为标准化端点,MCPSharp 都能显著简化开发流程并提升效率。其强大的扩展性和灵活性,使其成为构建现代化 AI 应用的理想选择。

来源:opendotnet

相关推荐