MCPSharp 是一个 .NET 库,帮助您构建模型上下文协议(MCP)服务器和客户端——这是AI助手和模型使用的标准化API协议。通过 MCPSharp,您可以:
当您想要:
[McpTool],[McpResource])dotnet add package MCPSharp
创建一个类,并使用 [McpTool] 属性标记您的方法:
using MCPSharp;
public class Calculator
{
[McpTool("add", "Adds two numbers")] // 注意:[McpFunction] 已废弃,改为使用 [McpTool]
public static int Add([McpParameter(true)] int a, [McpParameter(true)] int b)
{
return a + b;
}
}
await MCPServer.StartAsync("CalculatorServer", "1.0.0");
StartAsync() 方法会自动查找基程序集中带有McpTool属性的方法。为了添加引用库中的方法,可以通过调用 MCPServer.Register<T>(); 来手动注册它们,其中 T 是包含所需方法的类。如果您的方法带有语义内核属性,这同样适用。如果客户端支持列表更改通知,它将在额外的工具被注册时收到通知。
使用自定义实现动态注册工具:
MCPServer.AddToolHandler(new Tool()
{
Name = "dynamicTool",
Description = "A dynamic tool",
InputSchema = new InputSchema {
Type = "object",
Required = ["input"],
Properties = new Dictionary<string, ParameterSchema>{
{"input", new ParameterSchema{Type="string", Description="Input value"}}
}
}
}, (string input) => { return $"You provided: {input}"; });
// 客户端集成
MCPClient client = new("AIClient", "1.0", "path/to/mcp/server");
IList<AIFunction> functions = await client.GetFunctionsAsync();
此列表可以插入到IChatClient的ChatOptions.Tools属性中,使MCP服务器能够无缝地与任何IChatClient实现一起使用。
using Microsoft.SemanticKernel;
public class MySkillClass
{
[KernelFunction("MyFunction")]
[Description("Description of my function")]
public string MyFunction(string input) => $"Processed: {input}";
}
// 注册到MCPServer
MCPServer.Register<MySkillClass>();
目前,这是使语义内核方法可注册到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<T>() - 注册包含工具或资源的类MCPServer.AddToolHandler(Tool tool, Delegate func) - 注册动态工具new MCPClient(string name, string version, string server, string args = null, IDictionary<string, string> env = null) - 创建客户端实例client.GetToolsAsync() - 获取可用工具client.CallToolAsync(string name, Dictionary<string, object> parameters) - 调用工具client.GetResourcesAsync() - 获取可用资源client.GetFunctionsAsync() - 获取工具作为AIFunctionsMCPSharp 自动从XML注释中提取文档:
/// <summary>
/// 提供数学运算
/// </summary>
public class Calculator
{
/// <summary>
/// 将两个数字相加
/// </summary>
/// <param name="a">要相加的第一个数字</param>
/// <param name="b">要相加的第二个数字</param>
/// <returns>两个数字之和</returns>
[McpTool]
public static int Add(
[McpParameter(true)] int a,
[McpParameter(true)] int b)
{
return a + b;
}
}
在项目文件中启用XML文档:
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
这允许您快速更改MCP工具的名称和描述,而无需重新编译。例如,如果您发现模型难以正确理解如何使用它。
[McpFunction] 已废弃,替换为 [McpTool] 以更好地符合MCP标准。MCPServer.Register<T>() 而不是 MCPServer.RegisterTool<T>() 以保持一致性(旧方法仍然有效但已废弃)。我们欢迎贡献!请随时提交Pull Request。
该项目采用MIT许可证。