@@ -201,9 +201,10 @@ export class CodexAcpClient {
201201
202202 async resumeSession ( request : acp . ResumeSessionRequest ) : Promise < SessionMetadata > {
203203 await this . refreshSkills ( request . cwd , request . _meta ) ;
204+ const sessionConfig = await this . createSessionConfig ( request . cwd , request . mcpServers ?? [ ] ) ;
204205
205206 const response = await this . codexClient . threadResume ( {
206- config : await this . createSessionConfig ( request . cwd , request . mcpServers ?? [ ] ) ,
207+ config : sessionConfig . config ,
207208 cwd : request . cwd ,
208209 modelProvider : this . getResumeModelProvider ( ) ,
209210 threadId : request . sessionId ,
@@ -215,12 +216,14 @@ export class CodexAcpClient {
215216 currentModelId : currentModelId ,
216217 models : codexModels ,
217218 currentServiceTier : response . serviceTier ?? null ,
219+ configBackedMcpServerNames : sessionConfig . configBackedMcpServerNames ,
218220 }
219221 }
220222
221223 async loadSession ( request : acp . LoadSessionRequest ) : Promise < SessionMetadataWithThread > {
224+ const sessionConfig = await this . createSessionConfig ( request . cwd , request . mcpServers ?? [ ] ) ;
222225 const response = await this . codexClient . threadResume ( {
223- config : await this . createSessionConfig ( request . cwd , request . mcpServers ?? [ ] ) ,
226+ config : sessionConfig . config ,
224227 cwd : request . cwd ,
225228 modelProvider : this . getResumeModelProvider ( ) ,
226229 threadId : request . sessionId ,
@@ -232,15 +235,17 @@ export class CodexAcpClient {
232235 currentModelId : currentModelId ,
233236 models : codexModels ,
234237 currentServiceTier : response . serviceTier ?? null ,
238+ configBackedMcpServerNames : sessionConfig . configBackedMcpServerNames ,
235239 thread : response . thread ,
236240 } ;
237241 }
238242
239243 async newSession ( request : acp . NewSessionRequest ) : Promise < SessionMetadata > {
240244 await this . refreshSkills ( request . cwd , request . _meta ) ;
245+ const sessionConfig = await this . createSessionConfig ( request . cwd , request . mcpServers ) ;
241246
242247 const response = await this . codexClient . threadStart ( {
243- config : await this . createSessionConfig ( request . cwd , request . mcpServers ) ,
248+ config : sessionConfig . config ,
244249 modelProvider : this . getModelProvider ( ) ,
245250 cwd : request . cwd ,
246251 } ) ;
@@ -255,6 +260,7 @@ export class CodexAcpClient {
255260 currentModelId : currentModelId ,
256261 models : codexModels ,
257262 currentServiceTier : response . serviceTier ?? null ,
263+ configBackedMcpServerNames : sessionConfig . configBackedMcpServerNames ,
258264 } ;
259265 }
260266
@@ -266,7 +272,7 @@ export class CodexAcpClient {
266272 return this . codexClient . getMcpServerStartupVersion ( ) ;
267273 }
268274
269- private async createSessionConfig ( projectPath : string , mcpServers : Array < McpServer > ) : Promise < JsonObject > {
275+ private async createSessionConfig ( projectPath : string , mcpServers : Array < McpServer > ) : Promise < SessionConfig > {
270276 const mergedConfig = {
271277 ...mergeGatewayConfig ( this . config , this . gatewayConfig ) ,
272278 projects : {
@@ -275,21 +281,30 @@ export class CodexAcpClient {
275281 }
276282 } ,
277283 } ;
284+ const configuredMcpServerNames = await this . getConfigMcpServerNames ( projectPath ) ;
278285 if ( mcpServers . length === 0 ) {
279- return mergedConfig ;
286+ return {
287+ config : mergedConfig ,
288+ configBackedMcpServerNames : configuredMcpServerNames ,
289+ } ;
280290 }
281291
282292 // Deduplicates new servers against existing config to prevent Codex from deep-merging
283293 // incompatible field types (e.g., mixing url and stdio schemas).
284- const existingNames = await this . getConfigMcpServerNames ( projectPath ) ;
285- const uniqueServers = mcpServers . filter ( mcp => ! existingNames . has ( mcp . name ) ) ;
294+ const uniqueServers = mcpServers . filter ( mcp => ! configuredMcpServerNames . has ( mcp . name ) ) ;
286295 if ( uniqueServers . length === 0 ) {
287- return mergedConfig ;
296+ return {
297+ config : mergedConfig ,
298+ configBackedMcpServerNames : configuredMcpServerNames ,
299+ } ;
288300 }
289301
290302 return {
291- ...mergedConfig ,
292- "mcp_servers" : Object . fromEntries ( uniqueServers . map ( mcp => [ mcp . name , this . createMcpSeverConfig ( mcp ) ] ) ) ,
303+ config : {
304+ ...mergedConfig ,
305+ "mcp_servers" : Object . fromEntries ( uniqueServers . map ( mcp => [ mcp . name , this . createMcpSeverConfig ( mcp ) ] ) ) ,
306+ } ,
307+ configBackedMcpServerNames : configuredMcpServerNames ,
293308 } ;
294309 }
295310
@@ -569,12 +584,18 @@ export type SessionMetadata = {
569584 currentModelId : string ,
570585 models : Model [ ] ,
571586 currentServiceTier ?: ServiceTier | null ,
587+ configBackedMcpServerNames ?: Set < string > ,
572588}
573589
574590export type SessionMetadataWithThread = SessionMetadata & {
575591 thread : Thread ,
576592}
577593
594+ type SessionConfig = {
595+ config : JsonObject ,
596+ configBackedMcpServerNames : Set < string > ,
597+ }
598+
578599function buildPromptItems ( prompt : acp . ContentBlock [ ] ) : UserInput [ ] {
579600 return prompt . map ( ( block ) : UserInput | null => {
580601 switch ( block . type ) {
0 commit comments