diff --git a/src/components/mcp/McpFormModal.tsx b/src/components/mcp/McpFormModal.tsx index 731f222..3e54bbf 100644 --- a/src/components/mcp/McpFormModal.tsx +++ b/src/components/mcp/McpFormModal.tsx @@ -265,10 +265,8 @@ const McpFormModal: React.FC = ({ } } - // 如果智能解析提取了配置(格式转换),自动格式化输入框内容 - if (result.id && result.formattedConfig !== value.trim()) { - setFormConfig(result.formattedConfig); - } + // 不在输入时自动格式化,保持用户输入的原样 + // 格式清理将在提交时进行 setConfigError(""); } catch (err: any) { @@ -361,13 +359,6 @@ const McpFormModal: React.FC = ({ } } else { // JSON mode - const jsonError = validateJsonConfig(formConfig); - setConfigError(jsonError); - if (jsonError) { - toast.error(t("mcp.error.jsonInvalid"), { duration: 3000 }); - return; - } - if (!formConfig.trim()) { // Empty configuration serverSpec = { @@ -377,9 +368,12 @@ const McpFormModal: React.FC = ({ }; } else { try { - serverSpec = JSON.parse(formConfig) as McpServerSpec; + // 使用智能解析器,支持带外层键的格式 + const result = parseSmartMcpJson(formConfig); + serverSpec = result.config as McpServerSpec; } catch (e: any) { - setConfigError(t("mcp.error.jsonInvalid")); + const errorMessage = e?.message || String(e); + setConfigError(t("mcp.error.jsonInvalid") + ": " + errorMessage); toast.error(t("mcp.error.jsonInvalid"), { duration: 4000 }); return; } diff --git a/src/utils/formatters.ts b/src/utils/formatters.ts index b0cf396..70e3718 100644 --- a/src/utils/formatters.ts +++ b/src/utils/formatters.ts @@ -1,6 +1,6 @@ /** * 格式化 JSON 字符串 - * @param value - 原始 JSON 字符串 + * @param value - 原始 JSON 字符串(支持带键名包装的格式) * @returns 格式化后的 JSON 字符串(2 空格缩进) * @throws 如果 JSON 格式无效 */ @@ -9,8 +9,9 @@ export function formatJSON(value: string): string { if (!trimmed) { return ""; } - const parsed = JSON.parse(trimmed); - return JSON.stringify(parsed, null, 2); + // 使用智能解析器来处理可能的片段格式 + const result = parseSmartMcpJson(trimmed); + return result.formattedConfig; } /**