autoscroll servers

frdel committed Jun 4, 2025 at 19:15 UTC 0454b4af6f3926fcb1df37cc32203a6f66673923
2 files changed +12 -7
python/api/mcp_servers_apply.py
+4 -3
@@ -15,10 +15,11 @@ class McpServersApply(ApiHandler):
15 # MCPConfig.update(mcp_servers) # done in settings automatically
16 set_settings_delta({"mcp_servers": "[]"}) # to force reinitialization
17 set_settings_delta({"mcp_servers": mcp_servers})
18 -
18 +
19 time.sleep(1) # wait at least a second
20 - MCPConfig.wait_for_lock() # wait until config lock is released
20 + # MCPConfig.wait_for_lock() # wait until config lock is released
21 + status = MCPConfig.get_instance().get_servers_status()
22 + return {"success": True, "status": status}
23
24 except Exception as e:
25 return {"success": False, "error": str(e)}
24 - return {"success": True}
webui/components/settings/mcp/client/mcp-servers-store.js
+8 -4
@@ -72,7 +72,7 @@ const model = {
72
73 async startStatusCheck() {
74 this.statusCheck = true;
75 - const firstLoad = true;
75 + let firstLoad = true;
76
77 while (this.statusCheck) {
78 await this._statusCheck();
@@ -101,11 +101,15 @@ const model = {
101 this.loading = true;
102 try {
103 scrollModal("mcp-servers-status");
104 - await API.callJsonApi("mcp_servers_apply", {
104 + const resp = await API.callJsonApi("mcp_servers_apply", {
105 mcp_servers: this.getEditorValue(),
106 });
107 - // await sleep(5000); // just to prevent user from clicking apply multiple times
108 - // api now waits for config locks automatically
107 + if (resp.success) {
108 + this.servers = resp.status;
109 + this.servers.sort((a, b) => a.name.localeCompare(b.name));
110 + }
111 + this.loading = false;
112 + await sleep(100); // wait for ui and scroll
113 scrollModal("mcp-servers-status");
114 } catch (error) {
115 console.error("Failed to apply MCP servers:", error);