diff --git a/codex-rs/analytics/src/analytics_client_tests.rs b/codex-rs/analytics/src/analytics_client_tests.rs index 7ceda36a6..59e3f5046 100644 --- a/codex-rs/analytics/src/analytics_client_tests.rs +++ b/codex-rs/analytics/src/analytics_client_tests.rs @@ -2828,6 +2828,7 @@ fn plugin_used_event_serializes_expected_shape() { "mcp_server_count": 2, "connector_ids": ["calendar", "drive"], "product_client_id": originator().value, + "mcp_server_names": ["mcp-1", "mcp-2"], "thread_id": "thread-3", "turn_id": "turn-3", "model_slug": "gpt-5" diff --git a/codex-rs/analytics/src/events.rs b/codex-rs/analytics/src/events.rs index 61fe75ac2..5367e651e 100644 --- a/codex-rs/analytics/src/events.rs +++ b/codex-rs/analytics/src/events.rs @@ -865,6 +865,7 @@ pub(crate) struct CodexPluginMetadata { pub(crate) struct CodexPluginUsedMetadata { #[serde(flatten)] pub(crate) plugin: CodexPluginMetadata, + pub(crate) mcp_server_names: Option>, pub(crate) thread_id: Option, pub(crate) turn_id: Option, pub(crate) model_slug: Option, @@ -971,8 +972,13 @@ pub(crate) fn codex_plugin_used_metadata( tracking: &TrackEventsContext, plugin: PluginTelemetryMetadata, ) -> CodexPluginUsedMetadata { + let mcp_server_names = plugin + .capability_summary + .as_ref() + .map(|summary| summary.mcp_server_names.clone()); CodexPluginUsedMetadata { plugin: codex_plugin_metadata(plugin), + mcp_server_names, thread_id: Some(tracking.thread_id.clone()), turn_id: Some(tracking.turn_id.clone()), model_slug: Some(tracking.model_slug.clone()), diff --git a/codex-rs/core/tests/suite/plugins.rs b/codex-rs/core/tests/suite/plugins.rs index 3390e38ef..03b1afdfa 100644 --- a/codex-rs/core/tests/suite/plugins.rs +++ b/codex-rs/core/tests/suite/plugins.rs @@ -388,6 +388,10 @@ async fn explicit_plugin_mentions_track_plugin_used_analytics() -> Result<()> { assert_eq!(event["event_params"]["marketplace_name"], "test"); assert_eq!(event["event_params"]["has_skills"], true); assert_eq!(event["event_params"]["mcp_server_count"], 0); + assert_eq!( + event["event_params"]["mcp_server_names"], + serde_json::json!([]) + ); assert_eq!( event["event_params"]["connector_ids"], serde_json::json!([])