如何将本地Stdio MCP服务器作为AITool集成到基于Microsoft .NET AI模板的项目中?
如何将本地Stdio MCP服务器作为AITool集成到基于Microsoft .NET AI模板的项目中?
我明白你现在遇到的这个类型不兼容问题有多闹心——用McpDotNet创建的工具没法直接加到ChatOptions.Tools里,因为两边的Tool类型分属不同命名空间,接口也不匹配。别着急,咱们可以通过写一个简单的适配层来解决这个问题,具体步骤如下:
核心思路:写一个类型适配类
我们需要创建一个中间类,把McpDotNet.Tool实例包装成符合Microsoft.Extensions.AI.AITool接口要求的实现,相当于给两个不同类型搭个“桥”。
具体实现步骤
创建适配类
这个类要实现AITool接口,内部封装McpDotNet.Tool实例,并把所有接口方法的调用转发给内部的MCP工具:using Microsoft.Extensions.AI; using McpDotNet; using System.Threading; using System.Threading.Tasks; public class McpToolAdapter : AITool { private readonly Tool _mcpTool; public McpToolAdapter(Tool mcpTool) { _mcpTool = mcpTool; // 从MCP工具的元数据中提取名称和描述 Name = _mcpTool.Info.Name; Description = _mcpTool.Info.Description ?? "无描述信息"; } public override string Name { get; } public override string Description { get; } public override async Task<AIToolResult> InvokeAsync(AIToolInvocation invocation, CancellationToken cancellationToken = default) { // 转换调用参数格式 var mcpInvocation = new ToolInvocation(invocation.ToolName, invocation.Parameters); // 调用MCP工具的原生方法 var mcpResult = await _mcpTool.InvokeAsync(mcpInvocation, cancellationToken); // 转换结果格式为AITool要求的类型 return new AIToolResult( output: mcpResult.Output, status: mcpResult.Status switch { ToolInvocationStatus.Success => AIToolResultStatus.Success, ToolInvocationStatus.Failure => AIToolResultStatus.Failure, _ => AIToolResultStatus.Failure }); } }使用适配类转换工具实例
在你原来创建MCP客户端的代码之后,用这个适配器把McpDotNet.Tool转换成AITool,再加入到ChatOptions.Tools列表中:// 你原来创建McpClient的代码保持不变 McpDotNet.Client.McpClientOptions clientOptions = new() { ClientInfo = new() { Name = "TestName", Version = "1.0.0" } }; var serverConfig = new McpServerConfig { Id = "demo-server", Name = "Test MCP", TransportType = TransportTypes.StdIo, TransportOptions = new Dictionary<string, string> { ["command"] = @"你的本地MCP服务器可执行文件路径" } }; using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Information)); var mcpClient = McpDotNet.Client.McpClientFactory.CreateAsync(serverConfig, clientOptions, loggerFactory: loggerFactory).Result; // 关键步骤:用适配器转换类型 var aiCompatibleTool = new McpToolAdapter(mcpClient); // 现在可以正常加入ChatOptions.Tools了 var chatOptions = new ChatOptions { Tools = new List<AITool> { aiCompatibleTool }, // 其他聊天配置... };
额外提示
- 版本兼容性:尽量保证
McpDotNet和Microsoft.Extensions.AI系列包的版本匹配,避免因API更新导致的适配问题; - 路径检查:确认
TransportOptions里的command配置的是本地MCP服务器可执行文件的正确绝对路径; - 调试日志:可以在适配类的
InvokeAsync方法中添加日志输出,方便排查调用过程中出现的异常。
内容来源于stack exchange
相关产品推荐
相关产品推荐

