mirror of
https://github.com/openai/codex.git
synced 2026-09-05 15:18:41 +00:00
docs(mcp): document replacement invariants
Co-authored-by: Codex noreply@openai.com
This commit is contained in:
@@ -107,7 +107,7 @@ pub fn tool_is_model_visible(tool: &ToolInfo) -> bool {
|
||||
.any(|target| target.as_str() == Some(MCP_UI_MODEL_VISIBILITY))
|
||||
}
|
||||
|
||||
/// A thin wrapper around a set of running [`RmcpClient`] instances.
|
||||
/// Immutable inputs needed to construct one MCP client during a live replacement.
|
||||
#[derive(Clone)]
|
||||
struct McpClientRuntime {
|
||||
store_mode: OAuthCredentialsStoreMode,
|
||||
@@ -155,6 +155,7 @@ impl McpClientRuntime {
|
||||
}
|
||||
}
|
||||
|
||||
/// A thin wrapper around a set of running [`RmcpClient`] instances.
|
||||
pub struct McpConnectionManager {
|
||||
clients: HashMap<String, AsyncManagedClient>,
|
||||
server_metadata: HashMap<String, McpServerMetadata>,
|
||||
|
||||
@@ -473,6 +473,9 @@ impl Session {
|
||||
.services
|
||||
.mcp_connection_manager
|
||||
.swap(Arc::clone(&replacement_manager));
|
||||
// Publish first, then transfer cancellation ownership while both manager
|
||||
// snapshots are still held here. Dropping an uncommitted replacement
|
||||
// cancels only the client it prepared.
|
||||
replacement_manager.take_cancellation_ownership_from(&superseded_manager);
|
||||
drop(current_manager);
|
||||
|
||||
|
||||
@@ -190,6 +190,7 @@ pub struct McpServerRefreshConfig {
|
||||
|
||||
impl fmt::Debug for McpServerRefreshConfig {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// Server configuration can contain headers and environment credentials.
|
||||
formatter
|
||||
.debug_struct("McpServerRefreshConfig")
|
||||
.field("mcp_servers", &"<redacted>")
|
||||
@@ -202,12 +203,15 @@ impl fmt::Debug for McpServerRefreshConfig {
|
||||
/// Config payload for replacing one MCP server in a running session.
|
||||
#[derive(Clone, PartialEq)]
|
||||
pub struct McpServerUpdateConfig {
|
||||
/// Name of the server to replace.
|
||||
pub server_name: String,
|
||||
/// Serialized `McpServerConfig` for the replacement.
|
||||
pub server: Value,
|
||||
}
|
||||
|
||||
impl fmt::Debug for McpServerUpdateConfig {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// Keep the server name diagnosable without exposing its credential-bearing config.
|
||||
formatter
|
||||
.debug_struct("McpServerUpdateConfig")
|
||||
.field("server_name", &self.server_name)
|
||||
|
||||
Reference in New Issue
Block a user