diff --git a/apps/desktop/src/components/editor/EditorSettingsDialog.vue b/apps/desktop/src/components/editor/EditorSettingsDialog.vue
index e4208f4241..a21adaf1fd 100644
--- a/apps/desktop/src/components/editor/EditorSettingsDialog.vue
+++ b/apps/desktop/src/components/editor/EditorSettingsDialog.vue
@@ -1920,7 +1920,7 @@ async function installMcp() {
// 安装成功后刷新状态
await refreshMcpStatus();
} catch (e: any) {
- mcpInstallMessage.value = e?.message || String(e);
+ mcpInstallMessage.value = translateBackendError(t, e);
mcpInstallError.value = true;
} finally {
mcpInstalling.value = false;
@@ -1942,7 +1942,7 @@ async function uninstallMcp() {
mcpInstallMessage.value = await uninstallMcpServer();
await refreshMcpStatus();
} catch (e: any) {
- mcpInstallMessage.value = t("settings.mcpUninstallFailed", { error: e?.message || String(e) });
+ mcpInstallMessage.value = t("settings.mcpUninstallFailed", { error: translateBackendError(t, e) });
mcpInstallError.value = true;
} finally {
mcpUninstalling.value = false;
@@ -2915,7 +2915,7 @@ const aiSupportsAnthropicApiStyle = computed(() => aiEditProvider.value === "cus
const aiCliMcpNeedsInstall = computed(() => aiIsCliProvider.value && (!mcpStatus.value || !mcpStatus.value.installed));
const aiCliMcpCanInstall = computed(() => {
const status = mcpStatus.value;
- return !mcpInstalling.value && !mcpUninstalling.value && !!status?.npm_available && (!status.installed || status.update_available);
+ return !mcpInstalling.value && !mcpUninstalling.value && !!status?.runtime_available && (!status.installed || status.update_available);
});
const aiCliMcpActionLabel = computed(() => {
if (!mcpStatus.value?.installed) return t("settings.mcpInstallButton");
@@ -6348,7 +6348,10 @@ onUnmounted(() => {
-
+
+ {{ t("settings.mcpManualManagementHint") }}
+
+
{{ mcpCommand }}
@@ -6356,7 +6359,7 @@ onUnmounted(() => {
-