Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2
3namespace CascadeIDE.Services;
4
5/// <summary>
6/// Подставляет JSON внешних MCP: при непустом пути и существующем файле — содержимое файла, иначе inline из настроек.
7/// </summary>
8public static class McpExternalServersJsonResolver
9{
10 /// <summary>
11 /// Эффективная строка JSON (массив спецификаций серверов) для <see cref="McpClientService"/> и Cursor ACP.
12 /// </summary>
13 public static string ResolveEffectiveJson(CascadeIdeSettings settings)
14 {
15 ArgumentNullException.ThrowIfNull(settings);
16 var path = settings.Mcp.ExternalServersJsonPath?.Trim() ?? "";
17 if (path.Length == 0)
18 return settings.Mcp.ExternalServersJson ?? "[]";
19
20 var expanded = Environment.ExpandEnvironmentVariables(path);
21 var fullPath = Path.IsPathRooted(expanded)
22 ? CanonicalFilePath.Normalize(expanded)
23 : CanonicalFilePath.Normalize(Path.Combine(UserSettingsPaths.GetSettingsDirectory(), expanded));
24
25 var fromFile = TextFileReadWrite.TryReadAllTextIfExists(fullPath);
26 if (fromFile is not null)
27 return fromFile;
28
29 return settings.Mcp.ExternalServersJson ?? "[]";
30 }
31}
32
View only · write via MCP/CIDE