{"record":{"id":"2a3a57cfc3014011","repo":"PrefectHQ/fastmcp","slug":"cannot-specify-required-false-set-a-default-val","errorCode":null,"errorMessage":"Cannot specify 'required=False'. Set a default value instead.","messagePattern":"Cannot specify 'required=False'\\. Set a default value instead\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"fastmcp_slim/fastmcp/tools/tool_transform.py","lineNumber":213,"sourceCode":"                \"default_factory can only be used with hide=True. \"\n                \"Visible parameters must use static 'default' values since JSON schema \"\n                \"cannot represent dynamic factories.\"\n            )\n\n        if self.required is True and (has_default or has_factory):\n            raise ValueError(\n                \"Cannot specify 'required=True' with 'default' or 'default_factory'. \"\n                \"Required parameters cannot have defaults.\"\n            )\n\n        if self.hide and self.required is True:\n            raise ValueError(\n                \"Cannot specify both 'hide=True' and 'required=True'. \"\n                \"Hidden parameters cannot be required since clients cannot provide them.\"\n            )\n\n        if self.required is False:\n            raise ValueError(\n                \"Cannot specify 'required=False'. Set a default value instead.\"\n            )\n\n\nclass ArgTransformConfig(FastMCPBaseModel):\n    \"\"\"A model for requesting a single argument transform.\"\"\"\n\n    name: str | None = Field(default=None, description=\"The new name for the argument.\")\n    description: str | None = Field(\n        default=None, description=\"The new description for the argument.\"\n    )\n    default: str | int | float | bool | None = Field(\n        default=None, description=\"The new default value for the argument.\"\n    )\n    hide: bool = Field(\n        default=False, description=\"Whether to hide the argument from the tool.\"\n    )\n    required: Literal[True] | None = Field(","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/PrefectHQ/fastmcp/blob/1f021142978e0861cd910c8df4e8074bc7cf3978/fastmcp_slim/fastmcp/tools/tool_transform.py#L195-L231","documentation":"ArgTransform does not accept required=False. Optional-ness is expressed by providing a default (or default_factory), so explicitly setting required=False is considered a misconfiguration and __post_init__ raises ValueError directing you to set a default instead.","triggerScenarios":"ArgTransform(required=False), typically when copying a schema-like config or trying to 'make a param optional' without a default.","commonSituations":"Porting JSON-schema-style thinking (required: false) into ArgTransform; constructing transforms from generic config files that always include a required key.","solutions":["Remove required=False and set default=<value> to make the parameter optional.","Use default_factory= (with hide=True) if the optional value is computed.","Omit the required field entirely (leave it as NotSet) when the transform shouldn't change requiredness."],"exampleFix":"// before\nArgTransform(name=\"limit\", required=False)\n\n// after\nArgTransform(name=\"limit\", default=10)","handlingStrategy":"validation","validationCode":"def check_required_false(t: ArgTransform) -> None:\n    if t.required is False:\n        raise ValueError(\"Use default= instead of required=False\")","typeGuard":null,"tryCatchPattern":"try:\n    t = ArgTransform(name=\"limit\", required=False)\nexcept ValueError:\n    t = ArgTransform(name=\"limit\", default=10)","preventionTips":["Never set the required field to False; express optionality via default.","Omit required entirely unless you mean True.","Strip required keys from generic config payloads before constructing ArgTransform."],"tags":["python","tool-transform","validation"],"backgroundTag":"mutually-exclusive-parameters","analyzedSha":"1f021142978e0861cd910c8df4e8074bc7cf3978","analyzedAt":"2026-08-29T14:31:16.082Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}