Skip to main content
Glama

clean_project

Clear project directories to prepare for rebuilding by removing unnecessary files and optionally creating backups. Designed for use with Android application reverse engineering via the Apktool MCP Server.

Instructions

Clean a project directory to prepare for rebuilding.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
backupNo
project_dirYes

Implementation Reference

  • The handler function for the 'clean_project' tool. It cleans build artifacts from an APKTool project directory (build, dist, temp dirs and temp/log files), optionally backing them up first. Validates input path, computes sizes freed, and returns detailed results.
    @mcp.tool()
    async def clean_project(project_dir: str, backup: bool = True) -> Dict:
        """
        Clean a project directory to prepare for rebuilding with enhanced backup support.
        
        Args:
            project_dir: Path to the APKTool project directory
            backup: Whether to create a backup of build directories before cleaning
            
        Returns:
            Dictionary with operation results and cleanup details
        """
        # Input validation
        path_validation = ValidationUtils.validate_path(project_dir, must_exist=True)
        if not path_validation["valid"]:
            return {"success": False, "error": path_validation["error"]}
        
        try:
            dirs_to_clean = ["build", "dist", "temp"]
            files_to_clean = ["*.tmp", "*.log"]
            cleaned_dirs = []
            cleaned_files = []
            backed_up = []
            
            # Clean directories
            for dir_name in dirs_to_clean:
                dir_path = os.path.join(project_dir, dir_name)
                if os.path.exists(dir_path):
                    if backup:
                        # Create backup
                        backup_path = f"{dir_path}_backup_{int(time.time())}"
                        shutil.copytree(dir_path, backup_path)
                        backed_up.append({
                            "original": dir_path,
                            "backup": backup_path,
                            "type": "directory"
                        })
                    
                    # Calculate size before removal
                    dir_size = 0
                    file_count = 0
                    for root, dirs, files in os.walk(dir_path):
                        for file in files:
                            file_path = os.path.join(root, file)
                            try:
                                dir_size += os.path.getsize(file_path)
                                file_count += 1
                            except:
                                pass
                    
                    # Remove directory
                    shutil.rmtree(dir_path)
                    cleaned_dirs.append({
                        "path": dir_path,
                        "size_freed": dir_size,
                        "files_removed": file_count
                    })
            
            # Clean specific files
            import glob
            for pattern in files_to_clean:
                pattern_path = os.path.join(project_dir, pattern)
                for file_path in glob.glob(pattern_path):
                    if os.path.isfile(file_path):
                        file_size = os.path.getsize(file_path)
                        
                        if backup:
                            backup_path = f"{file_path}.bak.{int(time.time())}"
                            shutil.copy2(file_path, backup_path)
                            backed_up.append({
                                "original": file_path,
                                "backup": backup_path,
                                "type": "file"
                            })
                        
                        os.remove(file_path)
                        cleaned_files.append({
                            "path": file_path,
                            "size": file_size
                        })
            
            total_size_freed = sum(d["size_freed"] for d in cleaned_dirs) + sum(f["size"] for f in cleaned_files)
            total_files_removed = sum(d["files_removed"] for d in cleaned_dirs) + len(cleaned_files)
            
            return {
                "success": True,
                "cleaned_directories": cleaned_dirs,
                "cleaned_files": cleaned_files,
                "backed_up_items": backed_up,
                "total_size_freed": total_size_freed,
                "total_files_removed": total_files_removed,
                "backup_created": len(backed_up) > 0
            }
            
        except Exception as e:
            logger.error(f"Error cleaning project: {str(e)}")
            return {
                "success": False,
                "error": f"Failed to clean project: {str(e)}"
            }
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zinja-coder/apktool-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server