Files
gott/wwwroot/js/mcp-servers-ui.js
T
MelekiandClaude Opus 4.8 4d29b09488 MCP-Server: URL optional – URL-lose Einträge als reine Allowlist-Freigabe
Entkoppelt "Server erzeugen" von "Server erlauben": Ein MCP-Eintrag ohne
URL erzeugt keinen eigenen (kollidierenden) HTTP-Server mehr, steuert aber
weiterhin die Allowlist-Freigabe mcp__<name>__* bei. Gedacht für extern
(z.B. stdio via ~/.claude.json) laufende Server, die gott nur erlauben,
aber nicht selbst starten soll – sonst kollidiert gotts URL-Server mit dem
gleichnamigen externen und der Server verschwindet ganz.

- ParseMcpServers: Url optional (null erlaubt), nur Name+leer wird verworfen
- Frontend: Name genügt, URL-Placeholder + Hinweistext angepasst

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:11:34 +02:00

49 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ── 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 = `
<div class="mcp-server-fields">
<input type="text" class="mcp-name" placeholder="Name (z.B. UnityMCP)" value="${esc(name)}" autocomplete="off">
<input type="text" class="mcp-url" placeholder="URL (optional – leer = nur Freigabe)" value="${esc(url)}" autocomplete="off">
<input type="password" class="mcp-token" placeholder="Token (optional)" value="${esc(token)}" autocomplete="off">
</div>
<button type="button" class="remove-mcp-btn icon-btn"><i class="fa fa-times"></i></button>
`;
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 */ }
}