fix: prevent disabled MCP servers from starting processes and show correct status

- Added disabled state checks in updateServerConnections() to prevent disabled servers from being connected
- Updated frontend getStatusColor() to show grey for disabled servers
- Modified UI rendering to show minimal interface for disabled servers without error messages or retry buttons
- Added translation for disabled server status

Fixes #6036
This commit is contained in:
Roo Code 2025-07-22 23:05:08 +00:00
parent 2b8228ef0c
commit 583c86b1ec
3 changed files with 33 additions and 7 deletions

View file

@ -976,7 +976,10 @@ export class McpHub {
// New server
try {
this.setupFileWatcher(name, validatedConfig, source)
await this.connectToServer(name, validatedConfig, source)
if (!validatedConfig.disabled) {
// Only connect if not disabled
await this.connectToServer(name, validatedConfig, source)
}
} catch (error) {
this.showErrorMessage(`Failed to connect to new MCP server ${name}`, error)
}
@ -985,7 +988,10 @@ export class McpHub {
try {
this.setupFileWatcher(name, validatedConfig, source)
await this.deleteConnection(name, source)
await this.connectToServer(name, validatedConfig, source)
if (!validatedConfig.disabled) {
// Only reconnect if not disabled
await this.connectToServer(name, validatedConfig, source)
}
} catch (error) {
this.showErrorMessage(`Failed to reconnect MCP server ${name}`, error)
}

View file

@ -218,6 +218,11 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
]
const getStatusColor = () => {
// Always show grey for disabled servers regardless of connection status
if (server.disabled) {
return "var(--vscode-descriptionForeground)"
}
switch (server.status) {
case "connected":
return "var(--vscode-testing-iconPassed)"
@ -229,7 +234,8 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
}
const handleRowClick = () => {
if (server.status === "connected") {
// Only allow expansion for connected servers that are not disabled
if (server.status === "connected" && !server.disabled) {
setIsExpanded(!isExpanded)
}
}
@ -270,12 +276,12 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
alignItems: "center",
padding: "8px",
background: "var(--vscode-textCodeBlock-background)",
cursor: server.status === "connected" ? "pointer" : "default",
cursor: server.status === "connected" && !server.disabled ? "pointer" : "default",
borderRadius: isExpanded || server.status === "connected" ? "4px" : "4px 4px 0 0",
opacity: server.disabled ? 0.6 : 1,
}}
onClick={handleRowClick}>
{server.status === "connected" && (
{server.status === "connected" && !server.disabled && (
<span
className={`codicon codicon-chevron-${isExpanded ? "down" : "right"}`}
style={{ marginRight: "8px" }}
@ -342,7 +348,20 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
</div>
</div>
{server.status === "connected" ? (
{server.disabled ? (
// Minimal UI for disabled servers - no error messages or retry buttons
<div
style={{
fontSize: "13px",
background: "var(--vscode-textCodeBlock-background)",
borderRadius: "0 0 4px 4px",
padding: "10px",
color: "var(--vscode-descriptionForeground)",
fontStyle: "italic",
}}>
{t("mcp:serverStatus.disabled")}
</div>
) : server.status === "connected" ? (
isExpanded && (
<div
style={{

View file

@ -55,7 +55,8 @@
},
"serverStatus": {
"retrying": "Retrying...",
"retryConnection": "Retry Connection"
"retryConnection": "Retry Connection",
"disabled": "Server is disabled"
},
"execution": {
"running": "Running",