MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / notifyWebviewOfServerChanges

Method notifyWebviewOfServerChanges

src/services/mcp/McpHub.ts:1828–1890  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1826 }
1827
1828 private async notifyWebviewOfServerChanges(): Promise<void> {
1829 // Get global server order from settings file
1830 const settingsPath = await this.getMcpSettingsFilePath()
1831 const content = await fs.readFile(settingsPath, "utf-8")
1832 const config = JSON.parse(content)
1833 const globalServerOrder = Object.keys(config.mcpServers || {})
1834
1835 // Get project server order if available
1836 const projectMcpPath = await this.getProjectMcpPath()
1837 let projectServerOrder: string[] = []
1838 if (projectMcpPath) {
1839 try {
1840 const projectContent = await fs.readFile(projectMcpPath, "utf-8")
1841 const projectConfig = JSON.parse(projectContent)
1842 projectServerOrder = Object.keys(projectConfig.mcpServers || {})
1843 } catch (error) {
1844 // Silently continue with empty project server order
1845 }
1846 }
1847
1848 // Sort connections: first project servers in their defined order, then global servers in their defined order
1849 // This ensures that when servers have the same name, project servers are prioritized
1850 const sortedConnections = [...this.connections].sort((a, b) => {
1851 const aIsGlobal = a.server.source === "global" || !a.server.source
1852 const bIsGlobal = b.server.source === "global" || !b.server.source
1853
1854 // If both are global or both are project, sort by their respective order
1855 if (aIsGlobal && bIsGlobal) {
1856 const indexA = globalServerOrder.indexOf(a.server.name)
1857 const indexB = globalServerOrder.indexOf(b.server.name)
1858 return indexA - indexB
1859 } else if (!aIsGlobal && !bIsGlobal) {
1860 const indexA = projectServerOrder.indexOf(a.server.name)
1861 const indexB = projectServerOrder.indexOf(b.server.name)
1862 return indexA - indexB
1863 }
1864
1865 // Project servers come before global servers (reversed from original)
1866 return aIsGlobal ? 1 : -1
1867 })
1868
1869 // Send sorted servers to webview
1870 const targetProvider: ClineProvider | undefined = this.providerRef.deref()
1871
1872 if (targetProvider) {
1873 const serversToSend = sortedConnections.map((connection) => connection.server)
1874
1875 const message = {
1876 type: "mcpServers" as const,
1877 mcpServers: serversToSend,
1878 }
1879
1880 try {
1881 await targetProvider.postMessageToWebview(message)
1882 } catch (error) {
1883 console.error("[McpHub] Error calling targetProvider.postMessageToWebview:", error)
1884 }
1885 } else {

Callers 13

watchProjectMcpFileMethod · 0.95
connectToServerMethod · 0.95
_initiateOAuthFlowMethod · 0.95
onTokensChangedMethod · 0.95
_runOAuthFlowMethod · 0.95
_completeOAuthFlowMethod · 0.95
restartConnectionMethod · 0.95
refreshAllConnectionsMethod · 0.95
toggleServerDisabledMethod · 0.95
updateServerTimeoutMethod · 0.95

Calls 7

getProjectMcpPathMethod · 0.95
parseMethod · 0.80
postMessageToWebviewMethod · 0.80
keysMethod · 0.65
errorMethod · 0.65
readFileMethod · 0.45

Tested by

no test coverage detected