diff --git a/packages/server/src/server/agent/mcp-server.ts b/packages/server/src/server/agent/mcp-server.ts index f538c9140..5e39ba4e6 100644 --- a/packages/server/src/server/agent/mcp-server.ts +++ b/packages/server/src/server/agent/mcp-server.ts @@ -33,6 +33,10 @@ export interface AgentMcpServerOptions { * When set, create_agent will auto-inject this as parentAgentId. */ callerAgentId?: string; + /** + * Agent-control MCP URL to inject for Codex agents spawned via MCP. + */ + agentControlMcpUrl?: string; } const AgentProviderEnum = z.enum( @@ -171,7 +175,8 @@ async function serializeSnapshotWithMetadata( export async function createAgentMcpServer( options: AgentMcpServerOptions ): Promise { - const { agentManager, agentRegistry, callerAgentId } = options; + const { agentManager, agentRegistry, callerAgentId, agentControlMcpUrl } = + options; const waitTracker = new WaitForAgentTracker(); const server = new McpServer({ @@ -274,12 +279,17 @@ export async function createAgentMcpServer( const normalizedTitle = title?.trim() ?? null; // Use explicit parentAgentId if provided, otherwise default to caller agent ID const resolvedParentAgentId = parentAgentId ?? callerAgentId; + const codexExtra = + provider === "codex" && agentControlMcpUrl + ? { codex: { agentControlMcpUrl } } + : undefined; const snapshot = await agentManager.createAgent({ provider, cwd: resolvedCwd, modeId: initialMode, title: normalizedTitle ?? undefined, parentAgentId: resolvedParentAgentId, + extra: codexExtra, }); if (initialPrompt) { diff --git a/packages/server/src/server/index.ts b/packages/server/src/server/index.ts index 1663c4318..3f6cf4c1c 100644 --- a/packages/server/src/server/index.ts +++ b/packages/server/src/server/index.ts @@ -123,6 +123,7 @@ async function main() { agentManager, agentRegistry, callerAgentId, + agentControlMcpUrl: agentMcpUrl, }); const transport = new StreamableHTTPServerTransport({