remove_package
Remove packages from Arch Linux systems using pacman. Choose between basic removal, dependency removal, or forced removal options to manage system packages.
Instructions
Remove a package from the system. Supports various removal strategies: basic removal, removal with dependencies, or forced removal. Only works on Arch Linux. Requires sudo access.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | Name of the package to remove | |
| remove_dependencies | No | Remove package and its dependencies (pacman -Rs). Default: false | |
| force | No | Force removal ignoring dependencies (pacman -Rdd). Use with caution! Default: false |
Implementation Reference
- src/arch_ops_server/pacman.py:322-394 (handler)Core handler function that executes pacman removal commands (-R, -Rs, -Rdd) based on parameters, with error handling and logging.async def remove_package( package_name: str, remove_dependencies: bool = False, force: bool = False ) -> Dict[str, Any]: """ Remove a single package from the system. Args: package_name: Name of package to remove remove_dependencies: If True, remove unneeded dependencies (pacman -Rs) force: If True, force removal ignoring dependencies (pacman -Rdd) Returns: Dict with removal status and information """ 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" ) logger.info(f"Removing package: {package_name} (deps={remove_dependencies}, force={force})") # Build command based on options cmd = ["sudo", "pacman"] if force: cmd.extend(["-Rdd"]) # Force remove, skip dependency checks elif remove_dependencies: cmd.extend(["-Rs"]) # Remove with unused dependencies else: cmd.extend(["-R"]) # Basic removal cmd.extend(["--noconfirm", package_name]) try: exit_code, stdout, stderr = await run_command( cmd, timeout=60, # Longer timeout for removal check=False, skip_sudo_check=True # We're using sudo in the command ) if exit_code != 0: logger.error(f"Package removal failed: {stderr}") return create_error_response( "RemovalError", f"Failed to remove {package_name}: {stderr}", f"Exit code: {exit_code}" ) logger.info(f"Successfully removed {package_name}") return { "success": True, "package": package_name, "removed_dependencies": remove_dependencies, "output": stdout } except Exception as e: logger.error(f"Package removal failed with exception: {e}") return create_error_response( "RemovalError", f"Failed to remove {package_name}: {str(e)}" )
- src/arch_ops_server/server.py:682-705 (registration)MCP tool registration including name, description, and input schema definition.Tool( name="remove_package", description="[LIFECYCLE] Remove a package from the system. Supports various removal strategies: basic removal, removal with dependencies, or forced removal. Only works on Arch Linux. Requires sudo access.", inputSchema={ "type": "object", "properties": { "package_name": { "type": "string", "description": "Name of the package to remove" }, "remove_dependencies": { "type": "boolean", "description": "Remove package and its dependencies (pacman -Rs). Default: false", "default": False }, "force": { "type": "boolean", "description": "Force removal ignoring dependencies (pacman -Rdd). Use with caution! Default: false", "default": False } }, "required": ["package_name"] } ),
- src/arch_ops_server/server.py:1220-1229 (handler)Tool dispatch handler in MCP server that calls the pacman remove_package function with parsed arguments.elif name == "remove_package": if not IS_ARCH: return [TextContent(type="text", text="Error: remove_package only available on Arch Linux systems")] package_name = arguments["package_name"] remove_dependencies = arguments.get("remove_dependencies", False) force = arguments.get("force", False) result = await remove_package(package_name, remove_dependencies, force) return [TextContent(type="text", text=json.dumps(result, indent=2))]
- Tool metadata defining category, platform, permissions, workflow, and related tools."remove_package": ToolMetadata( name="remove_package", category="lifecycle", platform="arch", permission="write", workflow="removal", related_tools=["remove_packages_batch", "list_orphan_packages"], prerequisite_tools=[]
- src/arch_ops_server/__init__.py:24-24 (registration)Import exposing the remove_package function for use in the module.remove_package,