@@ -497,6 +497,7 @@ export class McpHub {
497
497
const result = McpSettingsSchema . safeParse ( config )
498
498
499
499
if ( result . success ) {
500
+ // Pass all servers including disabled ones - they'll be handled in updateServerConnections
500
501
await this . updateServerConnections ( result . data . mcpServers || { } , source , false )
501
502
} else {
502
503
const errorMessages = result . error . errors
@@ -560,6 +561,26 @@ export class McpHub {
560
561
// Remove existing connection if it exists with the same source
561
562
await this . deleteConnection ( name , source )
562
563
564
+ // Skip connecting to disabled servers
565
+ if ( config . disabled ) {
566
+ // Still create a connection object to track the server, but don't actually connect
567
+ const connection : McpConnection = {
568
+ server : {
569
+ name,
570
+ config : JSON . stringify ( config ) ,
571
+ status : "disconnected" ,
572
+ disabled : true ,
573
+ source,
574
+ projectPath : source === "project" ? vscode . workspace . workspaceFolders ?. [ 0 ] ?. uri . fsPath : undefined ,
575
+ errorHistory : [ ] ,
576
+ } ,
577
+ client : null as any , // We won't actually create a client for disabled servers
578
+ transport : null as any , // We won't actually create a transport for disabled servers
579
+ }
580
+ this . connections . push ( connection )
581
+ return
582
+ }
583
+
563
584
try {
564
585
const client = new Client (
565
586
{
@@ -975,15 +996,21 @@ export class McpHub {
975
996
if ( ! currentConnection ) {
976
997
// New server
977
998
try {
978
- this . setupFileWatcher ( name , validatedConfig , source )
999
+ // Only setup file watcher for enabled servers
1000
+ if ( ! validatedConfig . disabled ) {
1001
+ this . setupFileWatcher ( name , validatedConfig , source )
1002
+ }
979
1003
await this . connectToServer ( name , validatedConfig , source )
980
1004
} catch ( error ) {
981
1005
this . showErrorMessage ( `Failed to connect to new MCP server ${ name } ` , error )
982
1006
}
983
1007
} else if ( ! deepEqual ( JSON . parse ( currentConnection . server . config ) , config ) ) {
984
1008
// Existing server with changed config
985
1009
try {
986
- this . setupFileWatcher ( name , validatedConfig , source )
1010
+ // Only setup file watcher for enabled servers
1011
+ if ( ! validatedConfig . disabled ) {
1012
+ this . setupFileWatcher ( name , validatedConfig , source )
1013
+ }
987
1014
await this . deleteConnection ( name , source )
988
1015
await this . connectToServer ( name , validatedConfig , source )
989
1016
} catch ( error ) {
@@ -1257,8 +1284,18 @@ export class McpHub {
1257
1284
try {
1258
1285
connection . server . disabled = disabled
1259
1286
1260
- // Only refresh capabilities if connected
1261
- if ( connection . server . status === "connected" ) {
1287
+ // If disabling a connected server, disconnect it
1288
+ if ( disabled && connection . server . status === "connected" ) {
1289
+ await this . deleteConnection ( serverName , serverSource )
1290
+ // Re-add as a disabled connection
1291
+ await this . connectToServer ( serverName , JSON . parse ( connection . server . config ) , serverSource )
1292
+ } else if ( ! disabled && connection . server . status === "disconnected" ) {
1293
+ // If enabling a disabled server, connect it
1294
+ const config = JSON . parse ( connection . server . config )
1295
+ await this . deleteConnection ( serverName , serverSource )
1296
+ await this . connectToServer ( serverName , config , serverSource )
1297
+ } else if ( connection . server . status === "connected" ) {
1298
+ // Only refresh capabilities if connected
1262
1299
connection . server . tools = await this . fetchToolsList ( serverName , serverSource )
1263
1300
connection . server . resources = await this . fetchResourcesList ( serverName , serverSource )
1264
1301
connection . server . resourceTemplates = await this . fetchResourceTemplatesList (
0 commit comments