diff --git a/src/esxi_mcp_server/mixins/vcenter_ops.py b/src/esxi_mcp_server/mixins/vcenter_ops.py index a55b72d..11fb601 100644 --- a/src/esxi_mcp_server/mixins/vcenter_ops.py +++ b/src/esxi_mcp_server/mixins/vcenter_ops.py @@ -23,8 +23,8 @@ class VCenterOpsMixin(MCPMixin): @mcp_tool( name="storage_vmotion", - description="Move a VM's disks to a different datastore (Storage vMotion)", - annotations=ToolAnnotations(destructiveHint=True), + description="Move a VM's disks to a different datastore (Storage vMotion). Idempotent if already on target.", + annotations=ToolAnnotations(destructiveHint=True, idempotentHint=True), ) def storage_vmotion( self, @@ -161,8 +161,8 @@ class VCenterOpsMixin(MCPMixin): @mcp_tool( name="convert_to_template", - description="Convert a VM to a template", - annotations=ToolAnnotations(destructiveHint=True), + description="Convert a VM to a template (idempotent - safe to call on existing template)", + annotations=ToolAnnotations(destructiveHint=True, idempotentHint=True), ) def convert_to_template(self, vm_name: str) -> dict[str, Any]: """Convert a VM to a template. @@ -200,8 +200,8 @@ class VCenterOpsMixin(MCPMixin): @mcp_tool( name="convert_to_vm", - description="Convert a template back to a VM", - annotations=ToolAnnotations(destructiveHint=True), + description="Convert a template back to a VM (idempotent - safe to call on existing VM)", + annotations=ToolAnnotations(destructiveHint=True, idempotentHint=True), ) def convert_to_vm( self,