mirror of
https://github.com/openai/codex.git
synced 2026-10-24 18:18:41 +00:00
Support per-tool MCP output limits (#41421)
## What changed - Add a positive `output_token_limit` setting to each entry under an MCP server's `tools` configuration. - Apply the most restrictive limit when plugin and user policies overlap, while keeping approval policy independent. - Carry the effective MCP output budget in conversation history so tool output, post-tool hook responses, and resumed sessions use the same truncation limit. ## Testing - Cover configuration parsing, serialization, schema validation, and plugin policy merging. - Cover MCP output below and above the configured limit, post-tool hook responses, and session resume. GitOrigin-RevId: d0beb4fca9ba6055d9e1d31c137373b465d50d61
This commit is contained in:
@@ -974,6 +974,7 @@ fn apply_plugin_mcp_server_policy(config: &mut McpServerConfig, policy: &PluginM
|
||||
if let Some(approval_mode) = tool_policy.approval_mode {
|
||||
tool_config.approval_mode = Some(approval_mode);
|
||||
}
|
||||
tool_config.restrict_output_token_limit(tool_policy.output_token_limit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1449,7 +1450,7 @@ pub fn apply_configured_plugin_mcp_server_policies(
|
||||
}
|
||||
}
|
||||
for (tool_name, tool_policy) in &policy.tools {
|
||||
if tool_policy.approval_mode.is_some() {
|
||||
if tool_policy.approval_mode.is_some() || tool_policy.output_token_limit.is_some() {
|
||||
server.tools.entry(tool_name.clone()).or_default();
|
||||
}
|
||||
}
|
||||
@@ -1467,6 +1468,12 @@ pub fn apply_configured_plugin_mcp_server_policies(
|
||||
.restrict_to(approval_mode),
|
||||
);
|
||||
}
|
||||
tool_config.restrict_output_token_limit(
|
||||
policy
|
||||
.tools
|
||||
.get(tool_name)
|
||||
.and_then(|tool_policy| tool_policy.output_token_limit),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1113,7 +1113,7 @@ async fn load_plugins_applies_plugin_mcp_server_policy() {
|
||||
"default_tools_approval_mode": "prompt",
|
||||
"enabled_tools": ["read", "search"],
|
||||
"tools": {
|
||||
"search": { "approval_mode": "prompt" }
|
||||
"search": { "approval_mode": "prompt", "output_token_limit": 8000 }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1134,6 +1134,7 @@ disabled_tools = ["delete"]
|
||||
|
||||
[plugins."sample@test".mcp_servers.sample.tools.search]
|
||||
approval_mode = "approve"
|
||||
output_token_limit = 12000
|
||||
"#;
|
||||
|
||||
let outcome =
|
||||
@@ -1154,6 +1155,7 @@ approval_mode = "approve"
|
||||
server.tools.get("search"),
|
||||
Some(&McpServerToolConfig {
|
||||
approval_mode: Some(AppToolApproval::Approve),
|
||||
output_token_limit: std::num::NonZeroUsize::new(8_000),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user