From 723e686455d3320ce16dd6792e8fec79e3a8e245 Mon Sep 17 00:00:00 2001 From: Vaayne Date: Wed, 12 Mar 2025 14:37:49 +0800 Subject: [PATCH] fix(MCPService): Improve server addition and status update error handling; add localized error messages --- src/main/services/MCPService.ts | 20 +++++++++---------- src/renderer/src/i18n/locales/en-us.json | 3 +++ src/renderer/src/i18n/locales/ja-jp.json | 7 +++++-- src/renderer/src/i18n/locales/ru-ru.json | 5 ++++- src/renderer/src/i18n/locales/zh-cn.json | 5 ++++- src/renderer/src/i18n/locales/zh-tw.json | 3 +++ .../src/pages/settings/MCPSettings.tsx | 4 ++-- 7 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/main/services/MCPService.ts b/src/main/services/MCPService.ts index f386aba1..89c0ff10 100644 --- a/src/main/services/MCPService.ts +++ b/src/main/services/MCPService.ts @@ -193,15 +193,14 @@ export default class MCPService extends EventEmitter { throw new Error(`Server with name ${server.name} already exists`) } - // Add to servers list - const updatedServers = [...this.servers, server] - this.servers = updatedServers - this.notifyReduxServersChanged(updatedServers) - // Activate if needed if (server.isActive) { - await this.activate(server).catch(this.logError(`Failed to activate server ${server.name}`)) + await this.activate(server) } + + // Add to servers list + this.servers = [...this.servers, server] + this.notifyReduxServersChanged(this.servers) } /** @@ -260,16 +259,16 @@ export default class MCPService extends EventEmitter { throw new Error(`Server ${name} not found`) } - // Update server status - server.isActive = isActive - this.notifyReduxServersChanged([...this.servers]) - // Activate or deactivate as needed if (isActive) { await this.activate(server) } else { await this.deactivate(name) } + + // Update server status + server.isActive = isActive + this.notifyReduxServersChanged([...this.servers]) } /** @@ -336,6 +335,7 @@ export default class MCPService extends EventEmitter { this.emit('server-started', { name }) } catch (error) { log.error(`[MCP] Error activating server ${name}:`, error) + server.isActive = false throw error } } diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index e25b2782..75a391c5 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -786,6 +786,7 @@ "active": "Active", "addServer": "Add Server", "addSuccess": "Server added successfully", + "addError": "Failed to add server", "args": "Arguments", "argsTooltip": "Each argument on a new line", "command": "Command", @@ -794,6 +795,7 @@ "confirmDelete": "Delete Server", "confirmDeleteMessage": "Are you sure you want to delete the server?", "deleteSuccess": "Server deleted successfully", + "deleteError": "Failed to delete server", "description": "Description", "duplicateName": "A server with this name already exists", "editServer": "Edit Server", @@ -807,6 +809,7 @@ "title": "MCP Servers", "type": "Type", "updateSuccess": "Server updated successfully", + "updateError": "Failed to update server", "url": "URL", "toggleError": "Toggle failed" }, diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 8fb8b2b1..9cc9f0f6 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -786,6 +786,7 @@ "active": "有効", "addServer": "サーバーを追加", "addSuccess": "サーバーが正常に追加されました", + "addError": "サーバーの追加に失敗しました", "args": "引数", "argsTooltip": "1行に1つの引数を入力してください", "command": "コマンド", @@ -793,7 +794,8 @@ "config_description": "モデルコンテキストプロトコルサーバーの設定", "confirmDelete": "サーバーを削除", "confirmDeleteMessage": "本当にこのサーバーを削除しますか?", - "deleteSuccess": "サーバーが正常に削除されました", + "deleteError": "サーバーの削除に失敗しました", + "deleteSuccess": "サーバーが正常に削除されました", "description": "説明", "duplicateName": "同じ名前のサーバーが既に存在します", "editServer": "サーバーを編集", @@ -807,7 +809,8 @@ "title": "MCP サーバー", "type": "タイプ", "updateSuccess": "サーバーが正常に更新されました", - "url": "URL", + "updateError": "サーバーの更新に失敗しました", + "url": "URL", "toggleError": "切り替えに失敗しました" }, "messages.divider": "メッセージ間に区切り線を表示", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 65f7fda5..bd78e8b1 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -786,6 +786,7 @@ "active": "Активен", "addServer": "Добавить сервер", "addSuccess": "Сервер успешно добавлен", + "addError": "Ошибка добавления сервера", "args": "Аргументы", "argsTooltip": "Каждый аргумент с новой строки", "command": "Команда", @@ -793,7 +794,8 @@ "config_description": "Настройка серверов протокола контекста модели", "confirmDelete": "Удалить сервер", "confirmDeleteMessage": "Вы уверены, что хотите удалить этот сервер?", - "deleteSuccess": "Сервер успешно удален", + "deleteError": "Не удалось удалить сервер", + "deleteSuccess": "Сервер успешно удален", "description": "Описание", "duplicateName": "Сервер с таким именем уже существует", "editServer": "Редактировать сервер", @@ -807,6 +809,7 @@ "title": "Серверы MCP", "type": "Тип", "updateSuccess": "Сервер успешно обновлен", + "updateError": "Ошибка обновления сервера", "url": "URL", "toggleError": "Переключение не удалось" }, diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 5c514945..d12ac47e 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -786,6 +786,7 @@ "active": "启用", "addServer": "添加服务器", "addSuccess": "服务器添加成功", + "addError": "添加服务器失败", "args": "参数", "argsTooltip": "每个参数占一行", "command": "命令", @@ -793,7 +794,8 @@ "config_description": "配置模型上下文协议服务器", "confirmDelete": "删除服务器", "confirmDeleteMessage": "您确定要删除该服务器吗?", - "deleteSuccess": "服务器删除成功", + "deleteError": "删除服务器失败", + "deleteSuccess": "服务器删除成功", "description": "描述", "duplicateName": "已存在同名服务器", "editServer": "编辑服务器", @@ -807,6 +809,7 @@ "title": "MCP 服务器", "type": "类型", "updateSuccess": "服务器更新成功", + "updateError": "更新服务器失败", "url": "URL", "toggleError": "切换失败" }, diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index d300d2cb..54b95638 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -786,6 +786,7 @@ "active": "啟用", "addServer": "新增伺服器", "addSuccess": "伺服器新增成功", + "addError": "添加伺服器失敗", "args": "參數", "argsTooltip": "每個參數佔一行", "command": "指令", @@ -793,6 +794,7 @@ "config_description": "設定模型上下文協議伺服器", "confirmDelete": "刪除伺服器", "confirmDeleteMessage": "您確定要刪除該伺服器嗎?", + "deleteError": "刪除伺服器失敗", "deleteSuccess": "伺服器刪除成功", "description": "描述", "duplicateName": "已存在相同名稱的伺服器", @@ -807,6 +809,7 @@ "title": "MCP 伺服器", "type": "類型", "updateSuccess": "伺服器更新成功", + "updateError": "更新伺服器失敗", "url": "URL", "toggleError": "切換失敗" }, diff --git a/src/renderer/src/pages/settings/MCPSettings.tsx b/src/renderer/src/pages/settings/MCPSettings.tsx index d374275e..aaa79b01 100644 --- a/src/renderer/src/pages/settings/MCPSettings.tsx +++ b/src/renderer/src/pages/settings/MCPSettings.tsx @@ -160,9 +160,9 @@ const MCPSettings: FC = () => { }) } - const handleToggleActive = (name: string, isActive: boolean) => { + const handleToggleActive = async (name: string, isActive: boolean) => { try { - window.api.mcp.setServerActive(name, isActive) + await window.api.mcp.setServerActive(name, isActive) } catch (error: any) { window.message.error(`${t('settings.mcp.toggleError')}: ${error.message}`) }