remove_packages_batch
Remove multiple Arch Linux packages in a single transaction to improve efficiency over individual removals. Handles package dependencies when specified.
Instructions
[LIFECYCLE] Remove multiple packages in a single transaction. More efficient than removing packages one by one. Only works on Arch Linux. Requires sudo access.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| package_names | Yes | List of package names to remove | |
| remove_dependencies | No | Remove packages and their dependencies. Default: false |
Implementation Reference
- src/arch_ops_server/pacman.py:397-472 (handler)Core handler function that performs batch removal of packages using sudo pacman -R or -Rs, with error handling and logging.async def remove_packages_batch( package_names: List[str], remove_dependencies: bool = False ) -> Dict[str, Any]: """ Remove multiple packages in a single transaction. Args: package_names: List of package names to remove remove_dependencies: If True, remove unneeded dependencies Returns: Dict with removal status """ if not IS_ARCH: return create_error_response( "NotSupported", "Package removal is only available on Arch Linux" ) if not check_command_exists("pacman"): return create_error_response( "CommandNotFound", "pacman command not found" ) if not package_names: return create_error_response( "ValidationError", "No packages specified for removal" ) logger.info(f"Batch removing {len(package_names)} packages (deps={remove_dependencies})") # Build command cmd = ["sudo", "pacman"] if remove_dependencies: cmd.extend(["-Rs"]) else: cmd.extend(["-R"]) cmd.extend(["--noconfirm"] + package_names) try: exit_code, stdout, stderr = await run_command( cmd, timeout=120, # Longer timeout for batch removal check=False, skip_sudo_check=True ) if exit_code != 0: logger.error(f"Batch removal failed: {stderr}") return create_error_response( "RemovalError", f"Failed to remove packages: {stderr}", f"Exit code: {exit_code}" ) logger.info(f"Successfully removed {len(package_names)} packages") return { "success": True, "package_count": len(package_names), "packages": package_names, "removed_dependencies": remove_dependencies, "output": stdout } except Exception as e: logger.error(f"Batch removal failed with exception: {e}") return create_error_response( "RemovalError", f"Failed to remove packages: {str(e)}" )
- MCP tool schema definition including input schema for package_names list and remove_dependencies boolean.Tool( name="remove_packages_batch", description="[LIFECYCLE] Remove multiple packages in a single transaction. More efficient than removing packages one by one. Only works on Arch Linux. Requires sudo access.", inputSchema={ "type": "object", "properties": { "package_names": { "type": "array", "items": {"type": "string"}, "description": "List of package names to remove" }, "remove_dependencies": { "type": "boolean", "description": "Remove packages and their dependencies. Default: false", "default": False } }, "required": ["package_names"] } ),
- src/arch_ops_server/__init__.py:21-38 (registration)Import statement registering the remove_packages_batch function from pacman.py into the module namespace.from .pacman import ( get_official_package_info, check_updates_dry_run, remove_package, remove_packages_batch, list_orphan_packages, remove_orphans, find_package_owner, list_package_files, search_package_files, verify_package_integrity, list_package_groups, list_group_packages, list_explicit_packages, mark_as_explicit, mark_as_dependency, check_database_freshness )
- src/arch_ops_server/server.py:1230-1238 (registration)Dispatch logic in call_tool that routes MCP tool calls to the remove_packages_batch handler.elif name == "remove_packages_batch": if not IS_ARCH: return [TextContent(type="text", text="Error: remove_packages_batch only available on Arch Linux systems")] package_names = arguments["package_names"] remove_dependencies = arguments.get("remove_dependencies", False) result = await remove_packages_batch(package_names, remove_dependencies) return [TextContent(type="text", text=json.dumps(result, indent=2))]
- Tool metadata definition categorizing it as lifecycle tool for Arch with write permission."remove_packages_batch": ToolMetadata( name="remove_packages_batch", category="lifecycle", platform="arch", permission="write", workflow="removal", related_tools=["remove_package", "remove_orphans"], prerequisite_tools=[] ),