Add process-local launch directories for shared MCP servers (#61444)

## What changed

- Add hidden app-server options `--plugin-mcp-launch-cwd` and `--mcp-launch-cwd` for host-supplied local stdio server launch directories without writing them to shared configuration.
- Apply these directories when both `mcp_shared_repl_cwd` and `mcp_connection_sharing` are enabled. For configured servers, require a matching executable and preserve any explicit working directory.
- Attach thread-specific sandbox state to direct MCP tool calls for servers advertising support, stripping caller-supplied sandbox and launcher metadata first.

## Testing

Add regression tests for launch-directory feature toggling and executable matching, and for direct MCP calls using each thread's sandbox working directory despite forged caller metadata.

GitOrigin-RevId: d7f78ea92163ec0ee9311f68ef17e87a6694b13b
This commit is contained in:
Charlie Marsh
2026-11-14 01:54:53 +00:00
committed by copyberry
parent 9825e4b2fe
commit e9919f4b4e
17 changed files with 378 additions and 45 deletions
+5
View File
@@ -619,6 +619,9 @@ struct AppServerCommand {
#[arg(long, hide = true)]
managed_daemon: bool,
#[command(flatten)]
plugin_mcp_launch: codex_app_server::PluginMcpLaunchArgs,
/// Controls whether analytics are enabled by default.
///
/// Analytics are disabled by default for app-server. Users have to explicitly opt in
@@ -1288,6 +1291,7 @@ async fn dispatch_cli(
stdio,
remote_control,
managed_daemon,
plugin_mcp_launch,
analytics_default_enabled,
auth,
} = app_server_cli;
@@ -1333,6 +1337,7 @@ async fn dispatch_cli(
cloud_skills_snapshot,
code_mode_host_transport: code_mode_host.into(),
managed_daemon,
plugin_mcp_launch,
remote_control_startup_mode: match (remote_control, remote_control_disabled)
{
(true, _) => {