From bb39cb1e99f6e1983e81a2813f27bf786fbf51f8 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Tue, 16 Sep 2025 17:20:14 +0700 Subject: [PATCH] fix/mcp-json-validation --- .../src/containers/dialogs/AddEditMCPServer.tsx | 15 +++++++++++++-- web-app/src/locales/en/mcp-servers.json | 6 ++++++ web-app/src/locales/zh-CN/mcp-servers.json | 6 ++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/web-app/src/containers/dialogs/AddEditMCPServer.tsx b/web-app/src/containers/dialogs/AddEditMCPServer.tsx index 3eea75d32..21d90ec2c 100644 --- a/web-app/src/containers/dialogs/AddEditMCPServer.tsx +++ b/web-app/src/containers/dialogs/AddEditMCPServer.tsx @@ -285,9 +285,20 @@ export default function AddEditMCPServer({ setError(t('mcp-servers:editJson.errorFormat')) return } - // For each server in the JSON, call onSave + // Check if this looks like a server config object instead of the expected format + if (parsedData.command || parsedData.url) { + setError(t('mcp-servers:editJson.errorMissingServerNameKey')) + return + } + + // For each server in the JSON, validate serverName and call onSave Object.entries(parsedData).forEach(([serverName, config]) => { - onSave(serverName.trim(), config as MCPServerConfig) + const trimmedServerName = serverName.trim() + if (!trimmedServerName) { + setError(t('mcp-servers:editJson.errorServerName')) + return + } + onSave(trimmedServerName, config as MCPServerConfig) }) onOpenChange(false) resetForm() diff --git a/web-app/src/locales/en/mcp-servers.json b/web-app/src/locales/en/mcp-servers.json index 4c76d6f0d..6b8170097 100644 --- a/web-app/src/locales/en/mcp-servers.json +++ b/web-app/src/locales/en/mcp-servers.json @@ -26,6 +26,12 @@ "errorParse": "Failed to parse initial data", "errorPaste": "Invalid JSON format in pasted content", "errorFormat": "Invalid JSON format", + "errorServerName": "Server name is required and cannot be empty", + "errorMissingServerNameKey": "JSON must be structured as {\"serverName\": {config}} - missing server name key", + "errorServerConfig": "Invalid server configuration for '{{serverName}}'", + "errorMissingCommand": "Missing required 'command' field for server '{{serverName}}'", + "errorMissingUrl": "Missing required 'url' field for server '{{serverName}}'", + "errorInvalidType": "Invalid transport type for server '{{serverName}}'. Must be 'stdio', 'http', or 'sse'", "save": "Save" }, "checkParams": "Please check the parameters according to the tutorial.", diff --git a/web-app/src/locales/zh-CN/mcp-servers.json b/web-app/src/locales/zh-CN/mcp-servers.json index 17d64af77..371ffaff6 100644 --- a/web-app/src/locales/zh-CN/mcp-servers.json +++ b/web-app/src/locales/zh-CN/mcp-servers.json @@ -26,6 +26,12 @@ "errorParse": "解析初始数据失败", "errorPaste": "粘贴内容中的 JSON 格式无效", "errorFormat": "JSON 格式无效", + "errorServerName": "服务器名称为必填项,不能为空", + "errorMissingServerNameKey": "JSON 必须按 {\"serverName\": {config}} 格式结构化 - 缺少服务器名称键", + "errorServerConfig": "服务器 '{{serverName}}' 的配置无效", + "errorMissingCommand": "服务器 '{{serverName}}' 缺少必需的 'command' 字段", + "errorMissingUrl": "服务器 '{{serverName}}' 缺少必需的 'url' 字段", + "errorInvalidType": "服务器 '{{serverName}}' 的传输类型无效。必须为 'stdio'、'http' 或 'sse'", "save": "保存" }, "checkParams": "请根据教程检查参数。",