Pass Zed MCP Server as command args

Ben Brandt created

Change summary

crates/agent_servers/src/codex.rs | 34 ++++++++++++++++----------------
1 file changed, 17 insertions(+), 17 deletions(-)

Detailed changes

crates/agent_servers/src/codex.rs 🔗

@@ -3,6 +3,7 @@ use context_server::types::requests::CallTool;
 use context_server::types::{CallToolParams, ToolResponseContent};
 use context_server::{ContextServer, ContextServerCommand, ContextServerId};
 use futures::channel::{mpsc, oneshot};
+use itertools::Itertools;
 use project::Project;
 use settings::SettingsStore;
 use smol::stream::StreamExt;
@@ -63,34 +64,33 @@ impl AgentServer for Codex {
             let tool_id_map = Rc::new(RefCell::new(HashMap::default()));
 
             let zed_mcp_server = ZedMcpServer::new(delegate_rx, tool_id_map.clone(), cx).await?;
-
-            let mut mcp_servers = HashMap::default();
-            mcp_servers.insert(
-                crate::mcp_server::SERVER_NAME.to_string(),
-                zed_mcp_server.server_config()?,
+            let mcp_server_config = zed_mcp_server.server_config()?;
+            // https://github.com/openai/codex/blob/main/codex-rs/config.md
+            let cli_server_config = format!(
+                "mcp_servers.{}={{command = \"{}\", args = [{}]}}",
+                crate::mcp_server::SERVER_NAME,
+                mcp_server_config.command.display(),
+                mcp_server_config
+                    .args
+                    .iter()
+                    .map(|arg| format!("\"{}\"", arg))
+                    .join(", ")
             );
-            let mcp_config = McpConfig { mcp_servers };
-
-            // todo! pass zed mcp server to codex tool
-            let mcp_config_file = tempfile::NamedTempFile::new()?;
-            let (mcp_config_file, _mcp_config_path) = mcp_config_file.into_parts();
-
-            let mut mcp_config_file = smol::fs::File::from(mcp_config_file);
-            mcp_config_file
-                .write_all(serde_json::to_string(&mcp_config)?.as_bytes())
-                .await?;
-            mcp_config_file.flush().await?;
 
             let settings = cx.read_global(|settings: &SettingsStore, _| {
                 settings.get::<AllAgentServersSettings>(None).codex.clone()
             })?;
 
-            let Some(command) =
+            let Some(mut command) =
                 AgentServerCommand::resolve("codex", &["mcp"], settings, &project, cx).await
             else {
                 anyhow::bail!("Failed to find codex binary");
             };
 
+            command
+                .args
+                .extend(["--config".to_string(), cli_server_config]);
+
             let codex_mcp_client: Arc<ContextServer> = ContextServer::stdio(
                 ContextServerId("codex-mcp-server".into()),
                 ContextServerCommand {