agent: Fix issue where unconfigured MCP extensions would not start server (#33365)

Bennet Bo Fenner created

Release Notes:

- agent: Fix an issue where MCP servers that were provided by extensions
would sometimes not start up

Change summary

crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs | 5 
crates/extension_host/src/wasm_host/wit/since_v0_6_0.rs                   | 5 
crates/project/src/context_server_store.rs                                | 5 
crates/project/src/project_settings.rs                                    | 7 
4 files changed, 13 insertions(+), 9 deletions(-)

Detailed changes

crates/agent_ui/src/agent_configuration/configure_context_server_modal.rs 🔗

@@ -295,10 +295,7 @@ impl ConfigureContextServerModal {
                 ContextServerDescriptorRegistry::default_global(cx)
                     .read(cx)
                     .context_server_descriptor(&server_id.0)
-                    .map(|_| ContextServerSettings::Extension {
-                        enabled: true,
-                        settings: serde_json::json!({}),
-                    })
+                    .map(|_| ContextServerSettings::default_extension())
             })
         else {
             return Task::ready(Err(anyhow::anyhow!("Context server not found")));

crates/extension_host/src/wasm_host/wit/since_v0_6_0.rs 🔗

@@ -945,7 +945,10 @@ impl ExtensionImports for WasmState {
                                     .get(key.as_str())
                             })
                             .cloned()
-                            .context("Failed to get context server configuration")?;
+                            .unwrap_or_else(|| {
+                                project::project_settings::ContextServerSettings::default_extension(
+                                )
+                            });
 
                         match settings {
                             project::project_settings::ContextServerSettings::Custom {

crates/project/src/context_server_store.rs 🔗

@@ -505,10 +505,7 @@ impl ContextServerStore {
         {
             configured_servers
                 .entry(id)
-                .or_insert(ContextServerSettings::Extension {
-                    enabled: true,
-                    settings: serde_json::json!({}),
-                });
+                .or_insert(ContextServerSettings::default_extension());
         }
 
         let (enabled_servers, disabled_servers): (HashMap<_, _>, HashMap<_, _>) =

crates/project/src/project_settings.rs 🔗

@@ -111,6 +111,13 @@ pub enum ContextServerSettings {
 }
 
 impl ContextServerSettings {
+    pub fn default_extension() -> Self {
+        Self::Extension {
+            enabled: true,
+            settings: serde_json::json!({}),
+        }
+    }
+
     pub fn enabled(&self) -> bool {
         match self {
             ContextServerSettings::Custom { enabled, .. } => *enabled,