MCPcopy Create free account
hub / github.com/Noumena-Network/code / doWork

Function doWork

src/cli/print.ts:1573–1621  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1571 // Serialize calls to prevent race conditions between concurrent callers
1572 // (background plugin install and mcp_set_servers control messages)
1573 const doWork = async (): Promise<{
1574 response: SDKControlMcpSetServersResponse
1575 sdkServersChanged: boolean
1576 }> => {
1577 const oldSdkClientNames = new Set(sdkClients.map(c => c.name))
1578
1579 const result = await handleMcpSetServers(
1580 servers,
1581 { configs: sdkMcpConfigs, clients: sdkClients, tools: sdkTools },
1582 dynamicMcpState,
1583 setAppState,
1584 )
1585
1586 // Update SDK state (need to mutate sdkMcpConfigs since it's shared)
1587 for (const key of Object.keys(sdkMcpConfigs)) {
1588 delete sdkMcpConfigs[key]
1589 }
1590 Object.assign(sdkMcpConfigs, result.newSdkState.configs)
1591 sdkClients = result.newSdkState.clients
1592 sdkTools = result.newSdkState.tools
1593 dynamicMcpState = result.newDynamicState
1594
1595 // Keep appState.mcp.tools in sync so subagents can see SDK MCP tools.
1596 // Use both old and new SDK client names to remove stale tools.
1597 if (result.sdkServersChanged) {
1598 const newSdkClientNames = new Set(sdkClients.map(c => c.name))
1599 const allSdkNames = uniq([...oldSdkClientNames, ...newSdkClientNames])
1600 setAppState(prev => ({
1601 ...prev,
1602 mcp: {
1603 ...prev.mcp,
1604 tools: [
1605 ...prev.mcp.tools.filter(
1606 t =>
1607 !allSdkNames.some(name =>
1608 t.name.startsWith(getMcpPrefix(name)),
1609 ),
1610 ),
1611 ...sdkTools,
1612 ],
1613 },
1614 }))
1615 }
1616
1617 return {
1618 response: result.response,
1619 sdkServersChanged: result.sdkServersChanged,
1620 }
1621 }
1622
1623 mcpChangesPromise = mcpChangesPromise.then(doWork, doWork)
1624 return mcpChangesPromise

Callers

nothing calls this directly

Calls 5

handleMcpSetServersFunction · 0.85
uniqFunction · 0.85
getMcpPrefixFunction · 0.85
keysMethod · 0.80
setAppStateFunction · 0.50

Tested by

no test coverage detected