摘要:• 创建符合 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 文档:
PropertyGroupGenerateDocumentationFile>true
NoWarn>$(NoWarn);1591NoWarn
PropertyGroup
使得可以快速更改 MCP 工具的名称和描述,而无需重新编译。
MCPSharp 提供了一套完整且易用的工具链,帮助快速构建符合 MCP 标准的服务器和客户端。无论是创建 AI 助手工具,还是将现有代码暴露为标准化端点,MCPSharp 都能显著简化开发流程并提升效率。其强大的扩展性和灵活性,使其成为构建现代化 AI 应用的理想选择。
来源:opendotnet