@@ -0,0 +1,19 @@
+use anyhow::Result;
+use serde_json::Value;
+
+pub fn remove_settings_from_http_context_servers(settings: &mut Value) -> Result<()> {
+ if let Some(obj) = settings.as_object_mut() {
+ if let Some(context_servers) = obj.get_mut("context_servers") {
+ if let Some(servers) = context_servers.as_object_mut() {
+ for (_, server) in servers.iter_mut() {
+ if let Some(server_obj) = server.as_object_mut() {
+ if server_obj.contains_key("url") {
+ server_obj.remove("settings");
+ }
+ }
+ }
+ }
+ }
+ }
+ Ok(())
+}
@@ -250,6 +250,7 @@ pub fn migrate_settings(text: &str) -> Result<Option<String>> {
MigrationType::Json(migrations::m_2026_03_30::make_play_sound_when_agent_done_an_enum),
MigrationType::Json(migrations::m_2026_04_01::restructure_profiles_with_settings_key),
MigrationType::Json(migrations::m_2026_04_10::rename_web_search_to_search_web),
+ MigrationType::Json(migrations::m_2026_04_15::remove_settings_from_http_context_servers),
];
run_migrations(text, migrations)
}
@@ -4980,4 +4981,64 @@ mod tests {
),
);
}
+
+ #[test]
+ fn test_remove_settings_from_http_context_servers() {
+ assert_migrate_settings(
+ &r#"
+ {
+ "context_servers": {
+ "http_server": {
+ "url": "https://example.com/mcp",
+ "settings": {}
+ },
+ "http_server_with_headers": {
+ "url": "https://example.com/mcp",
+ "headers": {
+ "Authorization": "Bearer token"
+ },
+ "settings": {}
+ },
+ "extension_server": {
+ "settings": {
+ "foo": "bar"
+ }
+ },
+ "stdio_server": {
+ "command": "npx",
+ "args": ["-y", "some-server"]
+ }
+ }
+ }
+ "#
+ .unindent(),
+ Some(
+ &r#"
+ {
+ "context_servers": {
+ "http_server": {
+ "url": "https://example.com/mcp"
+ },
+ "http_server_with_headers": {
+ "url": "https://example.com/mcp",
+ "headers": {
+ "Authorization": "Bearer token"
+ }
+ },
+ "extension_server": {
+ "settings": {
+ "foo": "bar"
+ }
+ },
+ "stdio_server": {
+ "command": "npx",
+ "args": ["-y", "some-server"]
+ }
+ }
+ }
+ "#
+ .unindent(),
+ ),
+ );
+ }
}