validate_exec merges get_input_defaults() (which flattens tool_arguments
to top-level) with execution data. The MCP reshaping code then reads
input_data.get("tool_arguments") which misses the flattened values.
Now we explicitly collect tool schema properties from top-level input_data
back into tool_arguments before passing to the block.