From 3ce375a38c1b10439c8c6fb5625bc52743b77925 Mon Sep 17 00:00:00 2001 From: Zamil Majdy Date: Thu, 12 Feb 2026 21:06:46 +0400 Subject: [PATCH] fix(backend/mcp): Collect flattened dynamic fields back into tool_arguments 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. --- autogpt_platform/backend/backend/executor/manager.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/autogpt_platform/backend/backend/executor/manager.py b/autogpt_platform/backend/backend/executor/manager.py index 1a3c818416..caa98784c2 100644 --- a/autogpt_platform/backend/backend/executor/manager.py +++ b/autogpt_platform/backend/backend/executor/manager.py @@ -231,7 +231,15 @@ async def execute_node( input_data = _input_data.model_dump() elif isinstance(node_block, MCPToolBlock): _mcp_data = MCPToolBlock.Input(**node.input_default) - _mcp_data.tool_arguments = input_data.get("tool_arguments", {}) + # Dynamic tool fields are flattened to top-level by validate_exec + # (via get_input_defaults). Collect them back into tool_arguments. + tool_schema = _mcp_data.tool_input_schema + tool_props = set(tool_schema.get("properties", {}).keys()) + merged_args = {**_mcp_data.tool_arguments} + for key in tool_props: + if key in input_data: + merged_args[key] = input_data[key] + _mcp_data.tool_arguments = merged_args input_data = _mcp_data.model_dump() data.inputs = input_data