Files
gott/wwwroot/js/mcp-servers-ui.js
T
MelekiandClaude Opus 4.8 5f7dec6448 Generalize MCP servers, add model refresh button, add sonnet-5
- MCP: replace fixed single Unity field with a generic list of servers
  ({name, url, token?}); dynamic mcp-config + allowlist glob mcp__*<name>*
  per entry; new mcp-servers-ui.js editor (no data migration)
- Models: frontend refresh button wired to existing POST /api/models/refresh,
  reloads optgroups and restores selection
- Model: add sonnet-5 alias + dropdown option (bare "sonnet" stays 4.6)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 08:51:20 +02:00

49 lines
2.0 KiB
JavaScript

// ── 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 (z.B. http://localhost:8080)" 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();
// Nur vollständige Einträge (Name + URL) übernehmen.
if (name && url) servers.push({ name: name, url: url, 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 */ }
}