使用说明
MCPSharp
MCPSharp是一家。NET库,帮助您构建模型上下文协议(MCP)服务器和客户端-人工智能助手和模型使用的标准化API协议。使用MCPSharp,您可以:
- 创建符合MCP的工具和功能,人工智能模型可以发现和使用
- 使用易于使用的客户端从C#代码直接连接到现有的MCP服务器
- 暴露你的。NET方法作为具有简单属性的MCP端点
- 无缝处理MCP协议细节和JSON-RPC通信
🚀 MCPSharp的新功能
- 微软。扩展。人工智能集成:MCPSharp现在与微软集成。扩展。AI,允许工具作为AIFunctions公开
- 语义内核支持:使用语义内核的KernelFunctionAttribute添加工具
- 动态工具注册:使用自定义实现逻辑动态注册工具
- 工具更改通知:服务器现在会在添加、更新或删除工具时通知客户端
- 复杂对象参数支持:更好地处理工具参数中的复杂对象
- 更好的错误处理:通过详细的堆栈跟踪改进了错误处理
何时使用MCPSharp
在以下情况下使用MCPSharp:
- 创建人工智能助手(如Anthropic的Claude Desktop)可以使用的工具
- 构建符合MCP的API,而无需处理协议细节
- 暴露现有。NET代码作为MCP端点
- 通过标准化界面为您的应用程序添加人工智能功能
- 与Microsoft集成。扩展。AI和/或语义内核,无需锁定单个供应商
特性
- 易于使用的基于属性的API(
[McpTool],[McpResource]) - 内置JSON-RPC支持,具有自动请求/响应处理功能
- 自动参数验证和类型转换
- 通过XML注释提供丰富的文档支持
- 基本使用所需的配置接近于零
先决条件
- 的任何版本。NET支持 标准2.0
安装
dotnet add package MCPSharp
快速开始
1.定义工具
创建一个类,并用 [McpTool] 属性:
using MCPSharp;
public class Calculator
{
[McpTool("add", "Adds two numbers")] // Note: [McpFunction] is deprecated, use [McpTool] instead
public static int Add([McpParameter(true)] int a, [McpParameter(true)] int b)
{
return a + b;
}
}
2.启动服务器
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}"; });
与Microsoft一起使用。扩展。人工智能
// Client-side integration
MCPClient client = new("AIClient", "1.0", "path/to/mcp/server");
IList<AIFunction> functions = await client.GetFunctionsAsync();
此列表可以插入 聊天选项。工具 房地产A IChat客户端,允许MCP服务器与Any IChatClient实现无缝使用。
语义内核集成
using Microsoft.SemanticKernel;
public class MySkillClass
{
[KernelFunction("MyFunction")]
[Description("Description of my function")]
public string MyFunction(string input) => $"Processed: {input}";
}
// Register with MCPServer
MCPServer.Register<MySkillClass>();
目前,这是使语义内核方法可在MCP服务器上注册的唯一方法。如果您有此处未涵盖的用例,请联系我们!
api参考
属性
-
[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()-将工具作为AIFunctions获取
XML文档支持
MCPSharp自动从XML注释中提取文档:
/// <summary>
/// Provides mathematical operations
/// </summary>
public class Calculator
{
/// <summary>
/// Adds two numbers together
/// </summary>
/// <param name="a">The first number to add</param>
/// <param name="b">The second number to add</param>
/// <returns>The sum of the two numbers</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>()为了保持一致性(旧方法仍然有效,但已被弃用)
贡献
我们欢迎捐款!请随时提交拉取请求。
许可证
该项目根据MIT许可证获得许可。
