// ── MCP-Server UI (Liste pro Session) ── // Spiegelt das Muster von commands-ui.js: dynamische Add/Remove-Zeilen, JSON-Persistenz. // Pro Eintrag: Name, URL (http/sse), optionaler Token. function createMcpServerRow(container, name, url, token) { name = name || ''; url = url || ''; token = token || ''; const item = document.createElement('div'); item.className = 'mcp-server-item'; item.innerHTML = `
`; item.querySelector('.remove-mcp-btn').addEventListener('click', function() { item.remove(); }); container.appendChild(item); } function getMcpServersFromUI(container) { var items = container.querySelectorAll('.mcp-server-item'); var servers = []; for (var i = 0; i < items.length; i++) { var item = items[i]; var name = item.querySelector('.mcp-name').value.trim(); var url = item.querySelector('.mcp-url').value.trim(); var token = item.querySelector('.mcp-token').value.trim(); // Name genügt. Ohne URL = reiner Freigabe-Eintrag (kein eigener Server, nur Allowlist). if (name) servers.push({ name: name, url: url || null, token: token || null }); } return servers.length > 0 ? servers : null; } function loadMcpServersIntoUI(container, mcpServers) { if (!mcpServers) return; try { var list = typeof mcpServers === 'string' ? JSON.parse(mcpServers) : mcpServers; if (!Array.isArray(list)) return; for (var i = 0; i < list.length; i++) { var s = list[i]; createMcpServerRow(container, s.name || '', s.url || '', s.token || ''); } } catch (e) { /* ignore parse errors */ } }