From d770a76c79a0b504444fa75731abc862dde370bc Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 26 Nov 2025 16:52:01 -0500 Subject: [PATCH] fix: prevent $defs mutation in Tool.from_tool transforms (#2493) Deep copy parent_defs before passing to compress_schema to prevent mutation from affecting parent tool schemas when child tools hide parameters that remove all $ref usage. --- src/fastmcp/tools/tool_transform.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fastmcp/tools/tool_transform.py b/src/fastmcp/tools/tool_transform.py index efbd1fb8c..ded56a22e 100644 --- a/src/fastmcp/tools/tool_transform.py +++ b/src/fastmcp/tools/tool_transform.py @@ -4,6 +4,7 @@ import inspect import warnings from collections.abc import Callable from contextvars import ContextVar +from copy import deepcopy from dataclasses import dataclass from typing import Annotated, Any, Literal, cast @@ -620,7 +621,8 @@ class TransformedTool(Tool): """ # Build transformed schema and mapping - parent_defs = parent_tool.parameters.get("$defs", {}) + # Deep copy to prevent compress_schema from mutating parent tool's $defs + parent_defs = deepcopy(parent_tool.parameters.get("$defs", {})) parent_props = parent_tool.parameters.get("properties", {}).copy() parent_required = set(parent_tool.parameters.get("required", []))