@@ -148,7 +148,11 @@ import {
148148} from '@pymodel/agent-core' ;
149149import { encodeWorkDirKey } from '@pymodel/agent-core-v2/_base/utils/workdir-slug' ;
150150import { McpConnectionManager } from '@pymodel/agent-core-v2/mcpCore/connection-manager' ;
151- import { loadMcpServers } from '@pymodel/agent-core-v2/app/mcpConfig/configLoader' ;
151+ import {
152+ loadMcpServers ,
153+ loadMcpServersDetailed ,
154+ resolveMcpJsonPaths ,
155+ } from '@pymodel/agent-core-v2/app/mcpConfig/configLoader' ;
152156import { IAppendLogStore } from '@pymodel/agent-core-v2/persistence/interface/appendLogStore' ;
153157import type { McpServerConfig as WorkspaceMcpServerConfig } from '@pymodel/agent-core-v2/mcpCore/config-schema' ;
154158import {
@@ -629,8 +633,8 @@ export class SDKRpcClientV2 extends SDKRpcClientBase {
629633 * via {@link engineAccessor} — the same `handlerFor({ root })` path
630634 * `createSession` takes (materializing the workspace handler is a no-op
631635 * cost here: session creation does it anyway). The gated-server list is
632- * what the pure config loader sees with project files included vs skipped
633- * (the workspaceTrust gate inside the engine's `workspaceMcpConfig`),
636+ * the final merged config entries whose origins are project files (the
637+ * workspaceTrust gate inside the engine's `workspaceMcpConfig`),
634638 * computed best-effort: an unreadable/invalid project file degrades to an
635639 * empty list rather than failing the caller.
636640 */
@@ -642,12 +646,18 @@ export class SDKRpcClientV2 extends SDKRpcClientBase {
642646 if ( trusted ) return { trusted : true , gatedMcpServers : [ ] } ;
643647 try {
644648 const fs = this . engineAccessor . get ( IHostFileSystem ) ;
645- const [ withProject , userOnly ] = await Promise . all ( [
646- loadMcpServers ( { fs, cwd : workDir , homeDir : this . homeDir , includeProject : true } ) ,
647- loadMcpServers ( { fs, cwd : workDir , homeDir : this . homeDir , includeProject : false } ) ,
649+ const [ paths , loaded ] = await Promise . all ( [
650+ resolveMcpJsonPaths ( { fs, cwd : workDir , homeDir : this . homeDir } ) ,
651+ loadMcpServersDetailed ( {
652+ fs,
653+ cwd : workDir ,
654+ homeDir : this . homeDir ,
655+ includeProject : true ,
656+ } ) ,
648657 ] ) ;
649- const gatedMcpServers = Object . entries ( withProject )
650- . filter ( ( [ name ] ) => ! ( name in userOnly ) )
658+ const projectPaths = new Set ( [ paths . projectRoot , paths . project ] ) ;
659+ const gatedMcpServers = Object . entries ( loaded . servers )
660+ . filter ( ( [ name ] ) => projectPaths . has ( loaded . origins [ name ] ?? '' ) )
651661 . map ( ( [ name , config ] ) => describeWorkspaceMcpServer ( name , config ) )
652662 . toSorted ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
653663 return { trusted : false , gatedMcpServers } ;
0 commit comments