Skip to content

Commit 8d937c3

Browse files
committed
refactor: optimize server configuration updates using Promise.all
1 parent 8856dab commit 8d937c3

File tree

2 files changed

+28
-32
lines changed

2 files changed

+28
-32
lines changed

src/services/mcp/McpHub.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,13 +1317,15 @@ export class McpHub {
13171317
const allServers = this.getAllServers()
13181318

13191319
// Set the Disabled flag for all servers
1320-
for (const server of allServers) {
1321-
await this.updateServerConfig(server.name, { disabled }, server.source)
1322-
const conn = this.findConnection(server.name, server.source)
1323-
if (conn) {
1324-
conn.server.disabled = disabled
1325-
}
1326-
}
1320+
await Promise.all(
1321+
allServers.map(async (server) => {
1322+
await this.updateServerConfig(server.name, { disabled }, server.source)
1323+
const conn = this.findConnection(server.name, server.source)
1324+
if (conn) {
1325+
conn.server.disabled = disabled
1326+
}
1327+
}),
1328+
)
13271329

13281330
// If activated, reload configuration
13291331
if (!disabled) {

src/services/mcp/__tests__/McpHub.test.ts

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -384,15 +384,12 @@ describe("McpHub", () => {
384384
expect(mcpHub.connections[1].server.disabled).toBe(true)
385385

386386
// Mock fs.readFile and fs.writeFile to track config changes
387-
let currentConfig = JSON.stringify({
388-
mcpServers: {
389-
server1: { disabled: false },
390-
server2: { disabled: false },
391-
},
392-
})
393-
;(fs.readFile as jest.Mock).mockImplementation(async () => currentConfig)
387+
const writeCalls: any[] = []
388+
;(fs.readFile as jest.Mock).mockResolvedValue(
389+
JSON.stringify({ mcpServers: { server1: { disabled: false }, server2: { disabled: false } } }),
390+
)
394391
;(fs.writeFile as jest.Mock).mockImplementation(async (path, data) => {
395-
currentConfig = data
392+
writeCalls.push(JSON.parse(data))
396393
})
397394

398395
await mcpHub.toggleAllServersDisabled(true)
@@ -401,10 +398,10 @@ describe("McpHub", () => {
401398
expect(mcpHub.connections[0].server.disabled).toBe(true)
402399
expect(mcpHub.connections[1].server.disabled).toBe(true)
403400

404-
// Verify that fs.writeFile was called to persist the changes
405-
const writtenConfig = JSON.parse(currentConfig)
406-
expect(writtenConfig.mcpServers.server1.disabled).toBe(true)
407-
expect(writtenConfig.mcpServers.server2.disabled).toBe(true)
401+
// Verify that fs.writeFile was called for each server
402+
expect(writeCalls.length).toBe(2)
403+
expect(writeCalls[0].mcpServers.server1.disabled).toBe(true)
404+
expect(writeCalls[1].mcpServers.server2.disabled).toBe(true)
408405

409406
// Verify that postMessageToWebview was called
410407
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith(
@@ -439,16 +436,13 @@ describe("McpHub", () => {
439436
]
440437
mcpHub.connections = mockConnections
441438

442-
// Mock fs.readFile to return a config with both servers disabled
443-
let currentConfig = JSON.stringify({
444-
mcpServers: {
445-
server1: { disabled: true },
446-
server2: { disabled: true },
447-
},
448-
})
449-
;(fs.readFile as jest.Mock).mockImplementation(async () => currentConfig)
439+
// Mock fs.readFile and fs.writeFile to track config changes
440+
const writeCalls: any[] = []
441+
;(fs.readFile as jest.Mock).mockResolvedValue(
442+
JSON.stringify({ mcpServers: { server1: { disabled: true }, server2: { disabled: true } } }),
443+
)
450444
;(fs.writeFile as jest.Mock).mockImplementation(async (path, data) => {
451-
currentConfig = data
445+
writeCalls.push(JSON.parse(data))
452446
})
453447

454448
await mcpHub.toggleAllServersDisabled(false)
@@ -457,10 +451,10 @@ describe("McpHub", () => {
457451
expect(mcpHub.connections[0].server.disabled).toBe(false)
458452
expect(mcpHub.connections[1].server.disabled).toBe(false)
459453

460-
// Verify that fs.writeFile was called to persist the changes
461-
const writtenConfig = JSON.parse(currentConfig)
462-
expect(writtenConfig.mcpServers.server1.disabled).toBe(false)
463-
expect(writtenConfig.mcpServers.server2.disabled).toBe(false)
454+
// Verify that fs.writeFile was called for each server
455+
expect(writeCalls.length).toBe(2)
456+
expect(writeCalls[0].mcpServers.server1.disabled).toBe(false)
457+
expect(writeCalls[1].mcpServers.server2.disabled).toBe(false)
464458

465459
// Verify that postMessageToWebview was called
466460
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith(

0 commit comments

Comments
 (0)