@@ -56,7 +56,7 @@ export interface SessionState {
5656 cwd : string ;
5757 fastModeEnabled : boolean ;
5858 currentModelSupportsFast : boolean ;
59- sessionMcpServers ?: Array < string > ;
59+ sessionMcpServers : Map < string , acp . McpServer > ;
6060}
6161
6262interface PendingMcpStartupSession {
@@ -171,7 +171,6 @@ export class CodexAcpServer implements acp.Agent {
171171
172172 const account = await this . getActiveAccount ( ) ;
173173 const { sessionId, currentModelId, models} = sessionMetadata ;
174- const sessionMcpServers = this . resolveSessionMcpServers ( requestedMcpServers , "sessionId" in request ) ;
175174 const currentModel = this . findCurrentModel ( models , currentModelId ) ;
176175 const currentModelSupportsFast = modelSupportsFast ( currentModel ) ;
177176 const sessionState : SessionState = {
@@ -189,7 +188,7 @@ export class CodexAcpServer implements acp.Agent {
189188 cwd : request . cwd ,
190189 fastModeEnabled : sessionMetadata . currentServiceTier === "fast" ,
191190 currentModelSupportsFast : currentModelSupportsFast ,
192- sessionMcpServers : sessionMcpServers ,
191+ sessionMcpServers : this . createSessionMcpServers ( requestedMcpServers , "sessionId" in request ) ,
193192 }
194193 this . sessions . set ( sessionId , sessionState ) ;
195194
@@ -431,7 +430,6 @@ export class CodexAcpServer implements acp.Agent {
431430
432431 const account = await this . getActiveAccount ( ) ;
433432 const { sessionId, currentModelId, models, thread} = sessionMetadata ;
434- const sessionMcpServers = this . resolveSessionMcpServers ( requestedMcpServers , true ) ;
435433 const currentModel = this . findCurrentModel ( models , currentModelId ) ;
436434 const currentModelSupportsFast = modelSupportsFast ( currentModel ) ;
437435 const sessionState : SessionState = {
@@ -449,7 +447,7 @@ export class CodexAcpServer implements acp.Agent {
449447 cwd : request . cwd ,
450448 fastModeEnabled : sessionMetadata . currentServiceTier === "fast" ,
451449 currentModelSupportsFast : currentModelSupportsFast ,
452- sessionMcpServers : sessionMcpServers ,
450+ sessionMcpServers : this . createSessionMcpServers ( requestedMcpServers , true ) ,
453451 } ;
454452 this . sessions . set ( sessionId , sessionState ) ;
455453
@@ -703,24 +701,23 @@ export class CodexAcpServer implements acp.Agent {
703701 return sessionState ;
704702 }
705703
706- private resolveSessionMcpServers (
704+ private createSessionMcpServers (
707705 mcpServers : Array < acp . McpServer > ,
708706 recoverFromStartup : boolean ,
709- ) : Array < string > {
707+ ) : Map < string , acp . McpServer > {
710708 // Explicit MCP servers from the request are the primary source of truth for the session.
711- const requestedServerNames = getRequestedMcpServerNames ( mcpServers ) ;
712- if ( requestedServerNames . length > 0 ) {
713- return requestedServerNames ;
709+ if ( mcpServers . length > 0 ) {
710+ return new Map ( mcpServers . map ( server => [ server . name , server ] ) ) ;
714711 }
715712 // Fresh sessions without MCP config should not inherit any session MCP state.
716713 if ( ! recoverFromStartup ) {
717- return [ ] ;
714+ return new Map ( ) ;
718715 }
719716 // Without a thread-scoped startup completion event, loadSession/resumeSession can no longer
720717 // recover omitted session MCP server names. Treat the session set as unknown unless ACP
721718 // explicitly provided mcpServers in the request.
722719 logger . log ( "Skipping MCP server recovery for load/resume without explicit mcpServers" ) ;
723- return [ ] ;
720+ return new Map ( ) ;
724721 }
725722
726723 private publishMcpStartupStatusAsync ( sessionId : string ) : void {
@@ -781,7 +778,7 @@ export class CodexAcpServer implements acp.Agent {
781778 try {
782779 const eventHandler = new CodexEventHandler ( this . connection , sessionState ) ;
783780 const approvalHandler = new CodexApprovalHandler ( this . connection , sessionState ) ;
784- const elicitationHandler = new CodexElicitationHandler ( this . connection , sessionState ) ;
781+ const elicitationHandler = new CodexElicitationHandler ( this . connection , sessionState , this . codexAcpClient ) ;
785782 await this . codexAcpClient . subscribeToSessionEvents ( params . sessionId ,
786783 ( event ) => {
787784 elicitationHandler . handleNotification ( event ) ;
@@ -934,7 +931,3 @@ export class CodexAcpServer implements acp.Agent {
934931 }
935932 }
936933}
937-
938- function getRequestedMcpServerNames ( mcpServers : Array < acp . McpServer > ) : Array < string > {
939- return Array . from ( new Set ( mcpServers . map ( server => server . name ) ) ) ;
940- }
0 commit comments