@@ -36,13 +36,15 @@ export class McpEventHandler {
36
36
#currentEditingServerName: string | undefined
37
37
#shouldDisplayListMCPServers: boolean
38
38
#telemetryController: ChatTelemetryController
39
+ #pendingPermissionConfig: { serverName : string ; permission : MCPServerPermission } | undefined
39
40
40
41
constructor ( features : Features , telemetryService : TelemetryService ) {
41
42
this . #features = features
42
43
this . #eventListenerRegistered = false
43
44
this . #currentEditingServerName = undefined
44
45
this . #shouldDisplayListMCPServers = true
45
46
this . #telemetryController = new ChatTelemetryController ( features , telemetryService )
47
+ this . #pendingPermissionConfig = undefined
46
48
}
47
49
48
50
/**
@@ -232,6 +234,7 @@ export class McpEventHandler {
232
234
'open-mcp-server' : ( ) => this . #handleOpenMcpServer( params ) ,
233
235
'edit-mcp' : ( ) => this . #handleEditMcpServer( params ) ,
234
236
'mcp-permission-change' : ( ) => this . #handleMcpPermissionChange( params ) ,
237
+ 'save-permission-change' : ( ) => this . #handleSavePermissionChange( params ) ,
235
238
'refresh-mcp-list' : ( ) => this . #handleRefreshMCPList( params ) ,
236
239
'mcp-enable-server' : ( ) => this . #handleEnableMcpServer( params ) ,
237
240
'mcp-disable-server' : ( ) => this . #handleDisableMcpServer( params ) ,
@@ -833,6 +836,7 @@ export class McpEventHandler {
833
836
* Handles edit MCP configuration
834
837
*/
835
838
async #handleEditMcpServer( params : McpServerClickParams , error ?: string ) {
839
+ await this . #handleSavePermissionChange( { id : 'save-mcp-permission' } )
836
840
const serverName = params . title
837
841
if ( ! serverName ) {
838
842
return { id : params . id }
@@ -970,7 +974,7 @@ export class McpEventHandler {
970
974
// }
971
975
972
976
/**
973
- * Handles MCP permission change events
977
+ * Handles MCP permission change events to update the pending permission config without applying changes
974
978
*/
975
979
async #handleMcpPermissionChange( params : McpServerClickParams ) {
976
980
const serverName = params . title
@@ -991,7 +995,36 @@ export class McpEventHandler {
991
995
992
996
const mcpServerPermission = await this . #processPermissionUpdates( updatedPermissionConfig )
993
997
994
- await McpManager . instance . updateServerPermission ( serverName , mcpServerPermission )
998
+ // Store the permission config instead of applying it immediately
999
+ this . #pendingPermissionConfig = {
1000
+ serverName,
1001
+ permission : mcpServerPermission ,
1002
+ }
1003
+
1004
+ this . #features. logging . info ( `Stored pending permission change for server: ${ serverName } ` )
1005
+
1006
+ return { id : params . id }
1007
+ } catch ( error ) {
1008
+ this . #features. logging . error ( `Failed to process MCP permissions: ${ error } ` )
1009
+ return { id : params . id }
1010
+ }
1011
+ }
1012
+
1013
+ /**
1014
+ * Handles saving MCP permission changes
1015
+ * Applies the stored permission changes
1016
+ */
1017
+ async #handleSavePermissionChange( params : McpServerClickParams ) {
1018
+ if ( ! this . #pendingPermissionConfig) {
1019
+ this . #features. logging . warn ( 'No pending permission changes to save' )
1020
+ return { id : params . id }
1021
+ }
1022
+
1023
+ try {
1024
+ const { serverName, permission } = this . #pendingPermissionConfig
1025
+
1026
+ // Apply the stored permission changes
1027
+ await McpManager . instance . updateServerPermission ( serverName , permission )
995
1028
this . #emitMCPConfigEvent( )
996
1029
997
1030
// Get server config to emit telemetry
@@ -1012,9 +1045,14 @@ export class McpEventHandler {
1012
1045
languageServerVersion : this . #features. runtime . serverInfo . version ,
1013
1046
} )
1014
1047
}
1048
+
1049
+ // Clear the pending permission config after applying
1050
+ this . #pendingPermissionConfig = undefined
1051
+
1052
+ this . #features. logging . info ( `Applied permission changes for server: ${ serverName } ` )
1015
1053
return { id : params . id }
1016
1054
} catch ( error ) {
1017
- this . #features. logging . error ( `Failed to update MCP permissions: ${ error } ` )
1055
+ this . #features. logging . error ( `Failed to save MCP permissions: ${ error } ` )
1018
1056
return { id : params . id }
1019
1057
}
1020
1058
}
0 commit comments