MCPcopy
hub / github.com/codeaashu/claude-code / applyMcpServerChanges

Function applyMcpServerChanges

src/cli/print.ts:1548–1608  ·  view source on GitHub ↗
(
    servers: Record<string, McpServerConfigForProcessTransport>,
  )

Source from the content-addressed store, hash-verified

1546 })
1547
1548 function applyMcpServerChanges(
1549 servers: Record<string, McpServerConfigForProcessTransport>,
1550 ): Promise<{
1551 response: SDKControlMcpSetServersResponse
1552 sdkServersChanged: boolean
1553 }> {
1554 // Serialize calls to prevent race conditions between concurrent callers
1555 // (background plugin install and mcp_set_servers control messages)
1556 const doWork = async (): Promise<{
1557 response: SDKControlMcpSetServersResponse
1558 sdkServersChanged: boolean
1559 }> => {
1560 const oldSdkClientNames = new Set(sdkClients.map(c => c.name))
1561
1562 const result = await handleMcpSetServers(
1563 servers,
1564 { configs: sdkMcpConfigs, clients: sdkClients, tools: sdkTools },
1565 dynamicMcpState,
1566 setAppState,
1567 )
1568
1569 // Update SDK state (need to mutate sdkMcpConfigs since it's shared)
1570 for (const key of Object.keys(sdkMcpConfigs)) {
1571 delete sdkMcpConfigs[key]
1572 }
1573 Object.assign(sdkMcpConfigs, result.newSdkState.configs)
1574 sdkClients = result.newSdkState.clients
1575 sdkTools = result.newSdkState.tools
1576 dynamicMcpState = result.newDynamicState
1577
1578 // Keep appState.mcp.tools in sync so subagents can see SDK MCP tools.
1579 // Use both old and new SDK client names to remove stale tools.
1580 if (result.sdkServersChanged) {
1581 const newSdkClientNames = new Set(sdkClients.map(c => c.name))
1582 const allSdkNames = uniq([...oldSdkClientNames, ...newSdkClientNames])
1583 setAppState(prev => ({
1584 ...prev,
1585 mcp: {
1586 ...prev.mcp,
1587 tools: [
1588 ...prev.mcp.tools.filter(
1589 t =>
1590 !allSdkNames.some(name =>
1591 t.name.startsWith(getMcpPrefix(name)),
1592 ),
1593 ),
1594 ...sdkTools,
1595 ],
1596 },
1597 }))
1598 }
1599
1600 return {
1601 response: result.response,
1602 sdkServersChanged: result.sdkServersChanged,
1603 }
1604 }
1605

Callers 2

applyPluginMcpDiffFunction · 0.85
runHeadlessStreamingFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected