"use client"; import { useState, useEffect } from "react"; import { X, Package, AlertCircle, CheckCircle, Info, ExternalLink, } from "lucide-react"; import { MCPProvider } from "@/lib/types/mcp"; interface MCPInstallConfigModalProps { mcp: MCPProvider; config: any; // Configuração inicial do servidor isOpen: boolean; onClose: () => void; onConfirm: (editedConfig: any) => void; isEditMode?: boolean; // Novo prop para indicar modo de edição } export function MCPInstallConfigModal({ mcp, config, isOpen, onClose, onConfirm, isEditMode = false, }: MCPInstallConfigModalProps) { const [jsonString, setJsonString] = useState(""); const [isValidJson, setIsValidJson] = useState(true); const [jsonError, setJsonError] = useState(""); const [hasEnvVars, setHasEnvVars] = useState(false); // Inicializar JSON quando config mudar useEffect(() => { if (config) { try { const formattedJson = JSON.stringify(config, null, 2); setJsonString(formattedJson); setIsValidJson(true); setJsonError(""); // Verificar se tem variáveis de ambiente const hasEnv = JSON.stringify(config).includes('"env"') || JSON.stringify(config).includes("env:"); setHasEnvVars(hasEnv); } catch (error) { console.error("Error formatting config:", error); setJsonString("{}"); setIsValidJson(false); setJsonError("Erro ao formatar configuração"); } } else { // Config vazio - criar template baseado no MCP // Usar npm ou nome do repositório se disponível const serverName = mcp.id || mcp.name.toLowerCase().replace(/\s+/g, "-"); const command = mcp.repository?.includes("npm") ? "npx" : mcp.repository ? "node" : "npm"; const template = { mcpServers: { [serverName]: { command: command, args: command === "npx" ? ["-y", serverName] : [], env: {}, }, }, }; setJsonString(JSON.stringify(template, null, 2)); setIsValidJson(true); setJsonError(""); setHasEnvVars(false); } }, [config]); // Validar JSON em tempo real const validateJson = (value: string) => { try { JSON.parse(value); setIsValidJson(true); setJsonError(""); return true; } catch (error) { setIsValidJson(false); setJsonError(error instanceof Error ? error.message : "JSON inválido"); return false; } }; const handleJsonChange = (value: string) => { setJsonString(value); validateJson(value); }; const handleConfirm = () => { if (!isValidJson) { return; } try { const parsedConfig = JSON.parse(jsonString); onConfirm(parsedConfig); } catch (error) { console.error("Error parsing config:", error); } }; if (!isOpen) return null; return (
{/* Header */}

{isEditMode ? "Editar Configuração" : "Configurar Instalação"}

{mcp.name} por {mcp.author}

{(mcp.repository || mcp.homepage) && ( GitHub )}
{/* Instructions */}

Instruções de Configuração

  • • Edite apenas os campos necessários, especialmente variáveis de ambiente (env)
  • • Adicione suas API keys,{" "} tokens e credenciais nos campos env
  • • Mantenha a estrutura JSON válida - use aspas duplas e vírgulas corretamente
  • • Campos como "command" geralmente não precisam ser alterados
{/* JSON Editor */}

Configuração do Servidor

{isValidJson ? (
JSON válido
) : (
JSON inválido
)}
{/* Error Message */} {!isValidJson && jsonError && (

Erro no JSON:

{jsonError}

)} {/* JSON Textarea - Área maior */}