This commit is contained in:
Matthew Zeng
2026-03-06 00:59:06 -08:00
parent 3a56201e63
commit fc564cd0d9
2 changed files with 44 additions and 38 deletions

View File

@@ -2824,8 +2824,42 @@ impl Session {
request_id: RequestId,
params: McpServerElicitationRequestParams,
) -> Option<ElicitationResponse> {
let (tx_response, rx_response) = oneshot::channel();
let server_name = params.server_name.clone();
let request = match params.request {
McpServerElicitationRequest::Form {
meta,
message,
requested_schema,
} => {
let requested_schema = match serde_json::to_value(requested_schema) {
Ok(requested_schema) => requested_schema,
Err(err) => {
warn!(
"failed to serialize MCP elicitation schema for server_name: {server_name}, request_id: {request_id}: {err:#}"
);
return None;
}
};
codex_protocol::approvals::ElicitationRequest::Form {
meta,
message,
requested_schema,
}
}
McpServerElicitationRequest::Url {
meta,
message,
url,
elicitation_id,
} => codex_protocol::approvals::ElicitationRequest::Url {
meta,
message,
url,
elicitation_id,
},
};
let (tx_response, rx_response) = oneshot::channel();
let prev_entry = {
let mut active = self.active_turn.lock().await;
match active.as_mut() {
@@ -2845,30 +2879,6 @@ impl Session {
"Overwriting existing pending elicitation for server_name: {server_name}, request_id: {request_id}"
);
}
let request = match params.request {
McpServerElicitationRequest::Form {
meta,
message,
requested_schema,
} => codex_protocol::approvals::ElicitationRequest::Form {
meta,
message,
requested_schema: serde_json::to_value(requested_schema)
.expect("typed MCP elicitation schema should serialize"),
},
McpServerElicitationRequest::Url {
meta,
message,
url,
elicitation_id,
} => codex_protocol::approvals::ElicitationRequest::Url {
meta,
message,
url,
elicitation_id,
},
};
let id = match request_id {
rmcp::model::NumberOrString::String(value) => {
codex_protocol::mcp::RequestId::String(value.to_string())

View File

@@ -116,10 +116,8 @@ pub(crate) async fn handle_mcp_tool_call(
sess.as_ref(),
turn_context,
&call_id,
&server,
&tool_name,
&invocation,
metadata.as_ref(),
arguments_value.as_ref(),
app_tool_policy.approval,
)
.await
@@ -378,10 +376,8 @@ async fn maybe_request_mcp_tool_approval(
sess: &Session,
turn_context: &TurnContext,
call_id: &str,
server: &str,
tool_name: &str,
invocation: &McpInvocation,
metadata: Option<&McpToolApprovalMetadata>,
tool_params: Option<&serde_json::Value>,
approval_mode: AppToolApproval,
) -> Option<McpToolApprovalDecision> {
if approval_mode == AppToolApproval::Approve {
@@ -399,13 +395,13 @@ async fn maybe_request_mcp_tool_approval(
let approval_key = if approval_mode == AppToolApproval::Auto {
let connector_id = metadata.and_then(|metadata| metadata.connector_id.clone());
if server == CODEX_APPS_MCP_SERVER_NAME && connector_id.is_none() {
if invocation.server == CODEX_APPS_MCP_SERVER_NAME && connector_id.is_none() {
None
} else {
Some(McpToolApprovalKey {
server: server.to_string(),
server: invocation.server.clone(),
connector_id,
tool_name: tool_name.to_string(),
tool_name: invocation.tool.clone(),
})
}
} else {
@@ -420,8 +416,8 @@ async fn maybe_request_mcp_tool_approval(
let question_id = format!("{MCP_TOOL_APPROVAL_QUESTION_ID_PREFIX}_{call_id}");
let question = build_mcp_tool_approval_question(
question_id.clone(),
server,
tool_name,
&invocation.server,
&invocation.tool,
metadata.and_then(|metadata| metadata.tool_title.as_deref()),
metadata.and_then(|metadata| metadata.connector_name.as_deref()),
annotations,
@@ -438,9 +434,9 @@ async fn maybe_request_mcp_tool_approval(
let params = build_mcp_tool_approval_elicitation_request(
sess,
turn_context,
server,
&invocation.server,
metadata,
tool_params,
invocation.arguments.as_ref(),
question.clone(),
approval_key.is_some(),
);