{"record":{"id":"09bcb69d3d91c8cf","repo":"CoplayDev/unity-mcp","slug":"cherry-studio-uses-ui-based-configuration-please","errorCode":null,"errorMessage":"Cherry Studio uses UI-based configuration. Please use the Manual Configuration snippet and Installation Steps to configure manually.","messagePattern":"Cherry Studio uses UI-based configuration\\. Please use the Manual Configuration snippet and Installation Steps to configure manually\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"MCPForUnity/Editor/Clients/Configurators/CherryStudioConfigurator.cs","lineNumber":51,"sourceCode":"            \"  - Name: unity-mcp\",\n            \"  - Type: STDIO\",\n            \"  - Command: uvx\",\n            \"  - Arguments: Copy from the Manual Configuration JSON below\",\n            \"Click Save and restart Cherry Studio\",\n            \"\",\n            \"Note: Cherry Studio uses UI-based configuration.\",\n            \"Use the manual snippet below as reference for the values to enter.\"\n        };\n\n        public override McpStatus CheckStatus(bool attemptAutoRewrite = true)\n        {\n            client.SetStatus(McpStatus.NotConfigured, \"Cherry Studio requires manual UI configuration\");\n            return client.status;\n        }\n\n        public override void Configure()\n        {\n            throw new InvalidOperationException(\n                \"Cherry Studio uses UI-based configuration. \" +\n                \"Please use the Manual Configuration snippet and Installation Steps to configure manually.\"\n            );\n        }\n\n        public override string GetManualSnippet()\n        {\n            bool useHttp = EditorConfigurationCache.Instance.UseHttpTransport;\n\n            if (useHttp)\n            {\n                return \"# Cherry Studio does not support WebSocket transport.\\n\" +\n                       \"# Cherry Studio supports STDIO and SSE transports.\\n\" +\n                       \"# \\n\" +\n                       \"# To use Cherry Studio:\\n\" +\n                       \"# 1. Switch transport to 'Stdio' in Advanced Settings below\\n\" +\n                       \"# 2. Return to this configuration screen\\n\" +\n                       \"# 3. Copy the STDIO configuration snippet that will appear\\n\" +","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/CoplayDev/unity-mcp/blob/c21bf496bca87d54e75bad048563c3adb1782081/MCPForUnity/Editor/Clients/Configurators/CherryStudioConfigurator.cs#L33-L69","documentation":"CherryStudioConfigurator.Configure() is an unconditional throw — Cherry Studio stores MCP server config entirely through its own GUI, not a JSON file the plugin can write. The class sets SupportsAutoConfigure=false and CheckStatus always returns NotConfigured, so calling Configure() is a contract violation. The message directs the user to the manual snippet and installation steps instead.","triggerScenarios":"Calling configurator.Configure() on a CherryStudioConfigurator instance — e.g., a 'Configure All Detected Clients' bulk operation that does not skip clients where SupportsAutoConfigure is false, or UI code that invokes Configure() without checking the flag.","commonSituations":"A developer extends the bulk configure pipeline or adds a new entry point and forgets to gate on SupportsAutoConfigure. End users clicking a 'Configure' button for Cherry Studio if the UI layer does not hide/disable it.","solutions":["Check configurator.SupportsAutoConfigure before invoking Configure(); skip Cherry Studio and surface GetManualSnippet() + GetInstallationSteps() to the user instead.","In bulk/configure-all loops, filter with clients.Where(c => c.SupportsAutoConfigure) before calling Configure().","If you are an end user: follow the Installation Steps shown in the MCP for Unity window — open Cherry Studio Settings > MCP Server and enter the values manually."],"exampleFix":"// before\nforeach (var c in detectedClients) { c.Configure(); }\n\n// after\nforeach (var c in detectedClients)\n{\n    if (!c.SupportsAutoConfigure) continue;\n    c.Configure();\n}","handlingStrategy":"validation","validationCode":"if (!configurator.SupportsAutoConfigure)\n{\n    // Show manual snippet instead of calling Configure()\n    ShowToUser(configurator.GetManualSnippet(), configurator.GetInstallationSteps());\n    return;\n}","typeGuard":"public static bool CanAutoConfigure(IMcpClientConfigurator c) => c.SupportsAutoConfigure;","tryCatchPattern":null,"preventionTips":["Always check SupportsAutoConfigure before calling Configure() on any configurator.","In bulk configure loops, filter out clients that do not support auto-configuration.","UI code should hide or disable the Configure button for clients with SupportsAutoConfigure=false."],"tags":["configuration","client-config","cherry-studio","design-by-contract"],"backgroundTag":null,"analyzedSha":"c21bf496bca87d54e75bad048563c3adb1782081","analyzedAt":"2026-08-13T17:36:56.095Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}