PrefectHQ/fastmcp · error
Hidden parameter '{old_name}' has no default value in parent
Error message
Hidden parameter '{old_name}' has no default value in parent tool and no default or default_factory provided in ArgTransform. Either provide a default or default_factory in ArgTransform or don't hide required parameters. What it means
When _create_forwarding_transform hides a parameter, that parameter can never be supplied by clients, so it needs a value at call time. If the parent tool marks it required and the ArgTransform supplies neither default nor default_factory, there is no way to fill it, so ValueError is raised explaining the options.
Source
Thrown at fastmcp_slim/fastmcp/tools/tool_transform.py:675
hidden_defaults = {} # Track hidden parameters with constant values
for old_name, old_schema in parent_props.items():
# Check if parameter is in transform_args
if transform_args and old_name in transform_args:
transform = transform_args[old_name]
else:
# Default behavior - pass through (no transformation)
transform = ArgTransform() # Default ArgTransform with no changes
# Handle hidden parameters with defaults
if transform.hide:
# Validate that hidden parameters without user defaults have parent defaults
has_user_default = (
transform.default is not NotSet
or transform.default_factory is not NotSet
)
if not has_user_default and old_name in parent_required:
raise ValueError(
f"Hidden parameter '{old_name}' has no default value in parent tool "
f"and no default or default_factory provided in ArgTransform. Either provide a default "
f"or default_factory in ArgTransform or don't hide required parameters."
)
if has_user_default:
# Store info for later factory calling or direct value
hidden_defaults[old_name] = transform
# Skip adding to schema (not exposed to clients)
continue
transform_result = cls._apply_single_transform(
old_name,
old_schema,
transform,
old_name in parent_required,
)
if transform_result:View on GitHub (pinned to 1f02114297)
Solutions
- Provide default=<static value> (or default_factory=<callable>) in the ArgTransform alongside hide=True.
- Read the value from config/env when building the transform: ArgTransform(hide=True, default=os.environ["API_KEY"]).
- Don't hide the parameter if clients should supply it.
- Supply it inside the replacement function via forward_raw if the value is computed at call time.
Example fix
// before ArgTransform(name="api_key", hide=True) # parent requires api_key // after ArgTransform(name="api_key", hide=True, default_factory=lambda: os.environ["API_KEY"])
Defensive patterns
Strategy: validation
Validate before calling
def check_hidden_has_value(tool, transform_args: dict) -> None:
required = set(tool.parameters.get("required", []))
for name, t in transform_args.items():
if t.hide and name in required and t.default is NotSet and t.default_factory is NotSet:
raise ValueError(f"Hidden required param '{name}' needs default or default_factory") Try / catch
try:
t = ParentTool.from_tool(tool, transform_args=ta)
except ValueError as e:
if "has no default value" in str(e):
log.error("Provide default/default_factory for hidden required params: %s", e)
raise Prevention
- Before hiding a param, check whether the parent tool lists it as required.
- Inject hidden values from environment/config at transform construction time.
- Prefer default_factory for secrets so they are resolved fresh at call time.
When it happens
Trigger: ArgTransform(hide=True) on a parameter listed in the parent tool's required properties, without default= or default_factory=.
Common situations: Hiding a required API-key/token param from the exposed schema but forgetting to inject its value; hiding required params after a parent tool change made them required.
Related errors
- Cannot specify both 'default' and 'default_factory' in ArgTr
- default_factory can only be used with hide=True. Visible par
- Cannot specify 'required=True' with 'default' or 'default_fa
- Cannot specify both 'hide=True' and 'required=True'. Hidden
- Cannot specify 'required=False'. Set a default value instead
AI-assisted analysis of PrefectHQ/fastmcp@1f02114297 (2026-08-29).
Data as JSON: /api/errors/6b750b479cb87ef4.
Report an issue: GitHub.