You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将本地Stdio MCP服务器作为AITool集成到基于Microsoft .NET AI模板的项目中?

如何将本地Stdio MCP服务器作为AITool集成到基于Microsoft .NET AI模板的项目中?

我明白你现在遇到的这个类型不兼容问题有多闹心——用McpDotNet创建的工具没法直接加到ChatOptions.Tools里,因为两边的Tool类型分属不同命名空间,接口也不匹配。别着急,咱们可以通过写一个简单的适配层来解决这个问题,具体步骤如下:

核心思路:写一个类型适配类

我们需要创建一个中间类,把McpDotNet.Tool实例包装成符合Microsoft.Extensions.AI.AITool接口要求的实现,相当于给两个不同类型搭个“桥”。

具体实现步骤

  1. 创建适配类
    这个类要实现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
                });
        }
    }
    
  2. 使用适配类转换工具实例
    在你原来创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:34:50