diff --git a/src/services/mcp/McpHub.ts b/src/services/mcp/McpHub.ts index 0ac14b9..9a24b2c 100644 --- a/src/services/mcp/McpHub.ts +++ b/src/services/mcp/McpHub.ts @@ -147,20 +147,22 @@ export class McpHub { }, }) - transport.onerror = (error) => { + transport.onerror = async (error) => { console.error(`Transport error for "${name}":`, error) const connection = this.connections.find((conn) => conn.server.name === name) if (connection) { connection.server.status = "disconnected" connection.server.error = error.message } + await this.notifyWebviewOfServerChanges() } - transport.onclose = () => { + transport.onclose = async () => { const connection = this.connections.find((conn) => conn.server.name === name) if (connection) { connection.server.status = "disconnected" } + await this.notifyWebviewOfServerChanges() } // If the config is invalid, show an error @@ -180,7 +182,7 @@ export class McpHub { return } - await client.connect(transport) + // valid schema const connection: McpConnection = { server: { name, @@ -191,6 +193,8 @@ export class McpHub { transport, } this.connections.push(connection) + + await client.connect(transport) connection.server.status = "connected" // // Set up notification handlers @@ -335,9 +339,13 @@ export class McpHub { connection.server.status = "connecting" await this.notifyWebviewOfServerChanges() await delay(500) // artificial delay to show user that server is restarting - await this.deleteConnection(serverName) - // Try to connect again using existing config - await this.connectToServer(serverName, JSON.parse(config)) + try { + await this.deleteConnection(serverName) + // Try to connect again using existing config + await this.connectToServer(serverName, JSON.parse(config)) + } catch (error) { + console.error(`Failed to restart connection for ${serverName}:`, error) + } } await this.notifyWebviewOfServerChanges() diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index ee16804..005d7c9 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -141,7 +141,8 @@ export const ChatRowContent = ({ style={{ color: normalColor, marginBottom: "-1.5px" }}> ), - Cline wants to use the {mcpServerUse.serverName} MCP server: + Cline wants to {mcpServerUse.type === "use_mcp_tool" ? "use a tool" : "access a resource"} on + the {mcpServerUse.serverName} MCP server: , ] case "completion_result": diff --git a/webview-ui/src/components/mcp/McpView.tsx b/webview-ui/src/components/mcp/McpView.tsx index fab84e3..cf3dddc 100644 --- a/webview-ui/src/components/mcp/McpView.tsx +++ b/webview-ui/src/components/mcp/McpView.tsx @@ -190,16 +190,19 @@ const ServerRow = ({ server }: { server: McpServer }) => { {server.error ? (
-
{server.error}
+
+ {server.error} +
+ disabled={server.status === "connecting"} + style={{ width: "calc(100% - 20px)", margin: "0 10px 10px 10px" }}> {server.status === "connecting" ? "Retrying..." : "Retry Connection"}
@@ -208,7 +211,7 @@ const ServerRow = ({ server }: { server: McpServer }) => {