Make MCP and Code Mode input schema budgets configurable (#47936)

## Why

Fixed schema budgets can strip parameter descriptions from large MCP tools or render their Code Mode input types as `unknown`. Allow larger budgets to preserve that guidance.

## What changed

- Add `mcp_servers.<name>.tool_input_schema_max_bytes` to configure the UTF-8 byte threshold for best-effort input schema compaction, retaining the 5,000-byte default.
- Add `features.code_mode.tool_input_schema_max_bytes` for rendered input types. Use the largest of the 16,000-byte default, the Code Mode setting, and the ordinary MCP server's explicit setting.
- Apply rendering budgets to prompt declarations and the runtime tool catalog, and avoid reusing cached declarations after the Code Mode budget changes.

## Testing

Add coverage for UTF-8 compaction thresholds, budget precedence, configuration round trips, and preservation of parameter guidance in both the Code Mode prompt and `ALL_TOOLS`.

GitOrigin-RevId: 0ef2823a614d4794e636f518b09c0b03a5239b45
This commit is contained in:
Vivian Fang
2026-09-24 20:39:37 +00:00
committed by copyberry
parent b62fcd3c4b
commit 339e981ba7
63 changed files with 670 additions and 86 deletions
@@ -28,6 +28,7 @@ pub(super) fn runtime_request(request: CellRequest) -> ExecuteRequest {
CellToolKind::Freeform => CodeModeToolKind::Freeform,
},
input_schema: None,
input_schema_max_bytes: None,
output_schema: None,
})
.collect(),
@@ -174,6 +174,7 @@ fn blocking_tool() -> ToolDefinition {
description: String::new(),
kind: CodeModeToolKind::Function,
input_schema: None,
input_schema_max_bytes: None,
output_schema: None,
}
}
@@ -368,6 +368,7 @@ fn echo_tool() -> ToolDefinition {
description: String::new(),
kind: CodeModeToolKind::Function,
input_schema: None,
input_schema_max_bytes: None,
output_schema: None,
}
}