From db9139cf3004bfcbafebb3aa04b57c9111685e33 Mon Sep 17 00:00:00 2001 From: aazamil Date: Sun, 1 Mar 2026 01:31:02 +0300 Subject: [PATCH] fix: correct snapshot handler argument passing - snapshot_host and batch_snapshot_hosts were passing vm_name, name, description as separate args to SnapshotHandler.create_snapshot() which expects (snapshot_config: dict, user_id) - Fixed by wrapping args into snapshot_config dict - Same fix applied to rollback_snapshot and remove_snapshot in batch.py - Verified fix working with Claude Desktop + Ludus lab --- ludus_mcp/server/tools/batch.py | 12 ++++++------ ludus_mcp/server/tools/core.py | 7 ++++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ludus_mcp/server/tools/batch.py b/ludus_mcp/server/tools/batch.py index 50a8cfe..28441b5 100644 --- a/ludus_mcp/server/tools/batch.py +++ b/ludus_mcp/server/tools/batch.py @@ -64,10 +64,8 @@ async def create_snapshot_safe(vm_name: str): """Wrapper to handle errors for individual VMs.""" try: result = await handler.create_snapshot( - vm_name=vm_name, - name=snapshot_name, - description=description, - user_id=user_id, + {"vm_name": vm_name, "name": snapshot_name, "description": description}, + user_id, ) return { "vm_name": vm_name, @@ -123,7 +121,8 @@ async def batch_rollback_snapshots( async def rollback_safe(vm_name: str): try: result = await handler.rollback_snapshot( - vm_name=vm_name, name=snapshot_name, user_id=user_id + {"vm_name": vm_name, "name": snapshot_name}, + user_id, ) return { "vm_name": vm_name, @@ -175,7 +174,8 @@ async def batch_remove_snapshots( async def remove_safe(vm_name: str): try: result = await handler.remove_snapshot( - vm_name=vm_name, name=snapshot_name, user_id=user_id + {"vm_name": vm_name, "name": snapshot_name}, + user_id, ) return {"vm_name": vm_name, "status": "success", "result": format_tool_response(result)} except Exception as e: diff --git a/ludus_mcp/server/tools/core.py b/ludus_mcp/server/tools/core.py index a65f220..8ad31eb 100644 --- a/ludus_mcp/server/tools/core.py +++ b/ludus_mcp/server/tools/core.py @@ -329,7 +329,8 @@ async def snapshot_host( Snapshot creation result """ handler = registry.get_handler("snapshot", SnapshotHandler) - result = await handler.create_snapshot(vm_name, name, description, user_id) + snapshot_config = {"vm_name": vm_name, "name": name, "description": description} + result = await handler.create_snapshot(snapshot_config, user_id) return format_tool_response(result) @mcp.tool() @@ -363,7 +364,7 @@ async def rollback_snapshot( Rollback result """ handler = registry.get_handler("snapshot", SnapshotHandler) - result = await handler.rollback_snapshot(vm_name, snapshot_name, user_id) + result = await handler.rollback_snapshot({"vm_name": vm_name, "snapshot_name": snapshot_name}, user_id) return format_tool_response(result) @mcp.tool() @@ -383,7 +384,7 @@ async def remove_snapshot( Removal result """ handler = registry.get_handler("snapshot", SnapshotHandler) - result = await handler.remove_snapshot(vm_name, snapshot_name, user_id) + result = await handler.remove_snapshot({"vm_name": vm_name, "snapshot_name": snapshot_name}, user_id) return format_tool_response(result) # ==================== POWER TOOLS ====================