diff --git a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools.Mcp/LINGYUN/Abp/AI/Tools/Mcp/McpAIToolProvider.cs b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools.Mcp/LINGYUN/Abp/AI/Tools/Mcp/McpAIToolProvider.cs index 29b905a7d..e9ba2bd10 100644 --- a/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools.Mcp/LINGYUN/Abp/AI/Tools/Mcp/McpAIToolProvider.cs +++ b/aspnet-core/modules/ai/LINGYUN.Abp.AI.Tools.Mcp/LINGYUN/Abp/AI/Tools/Mcp/McpAIToolProvider.cs @@ -1,6 +1,7 @@ using LINGYUN.Abp.AI.Localization; using Microsoft.Extensions.AI; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using ModelContextProtocol.Client; using System; using System.Collections.Generic; @@ -61,37 +62,47 @@ public class McpAIToolProvider : IAIToolProvider, ITransientDependency public async virtual Task CreateToolsAsync(AIToolDefinition definition) { - var httpClient = HttpClientFactory.CreateMcpAIToolClient(); - var httpClientTransportOptions = new HttpClientTransportOptions + try { - Endpoint = new Uri(definition.GetMcpEndpoint()), - AdditionalHeaders = new Dictionary(), - TransportMode = definition.GetMcpTransportMode(), - ConnectionTimeout = definition.GetMcpConnectionTimeout(), - MaxReconnectionAttempts = definition.GetMcpMaxReconnectionAttempts(), - }; - - var headers = definition.GetMcpHeaders(); - foreach (var header in headers) - { - httpClientTransportOptions.AdditionalHeaders.TryAdd(header.Key, header.Value); - } + var httpClient = HttpClientFactory.CreateMcpAIToolClient(); + var httpClientTransportOptions = new HttpClientTransportOptions + { + Endpoint = new Uri(definition.GetMcpEndpoint()), + AdditionalHeaders = new Dictionary(), + TransportMode = definition.GetMcpTransportMode(), + ConnectionTimeout = definition.GetMcpConnectionTimeout(), + MaxReconnectionAttempts = definition.GetMcpMaxReconnectionAttempts(), + }; - if (definition.IsUseMcpCurrentAccessToken()) - { - var accessTokenProvider = ServiceProvider.GetRequiredService(); + var headers = definition.GetMcpHeaders(); + foreach (var header in headers) + { + httpClientTransportOptions.AdditionalHeaders.TryAdd(header.Key, header.Value); + } - var token = await accessTokenProvider.GetTokenAsync(); - if (!token.IsNullOrWhiteSpace()) + if (definition.IsUseMcpCurrentAccessToken()) { - // TODO: 使用OAuth配置? - httpClientTransportOptions.AdditionalHeaders.TryAdd("Authorization", $"Bearer {token}"); + var accessTokenProvider = ServiceProvider.GetRequiredService(); + + var token = await accessTokenProvider.GetTokenAsync(); + if (!token.IsNullOrWhiteSpace()) + { + // TODO: 使用OAuth配置? + httpClientTransportOptions.AdditionalHeaders.TryAdd("Authorization", $"Bearer {token}"); + } } - } - var mcpClient = await McpClient.CreateAsync( - new HttpClientTransport(httpClientTransportOptions, httpClient)); + var mcpClient = await McpClient.CreateAsync( + new HttpClientTransport(httpClientTransportOptions, httpClient)); - return (await mcpClient.ListToolsAsync()).ToArray(); + return (await mcpClient.ListToolsAsync()).ToArray(); + } + catch (Exception ex) + { + ServiceProvider + .GetService>() + ?.LogWarning(ex, "Mcp tool connection failed: {message}", ex.Message); + return []; + } } }