Skip to main content
Glama

modify_resource_file

Update the content of a specified resource file in Android projects. Define project directory, resource type, name, and new content. Optional backup creation ensures data safety during modifications.

Instructions

Modify the content of a specific resource file.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
create_backupNo
new_contentYes
project_dirYes
resource_nameYes
resource_typeYes

Implementation Reference

  • The main handler function for the 'modify_resource_file' MCP tool. It modifies a resource file in the res/[resource_type]/[resource_name] path within an APKTool project directory. Includes input validation using ValidationUtils, backup creation, file writing with UTF-8 encoding, and returns detailed success/error information including sizes and paths.
    @mcp.tool()
    async def modify_resource_file(
        project_dir: str,
        resource_type: str,
        resource_name: str,
        new_content: str,
        create_backup: bool = True
    ) -> Dict:
        """
        Modify the content of a specific resource file with validation and backup support.
        
        Args:
            project_dir: Path to the APKTool project directory
            resource_type: Resource type (e.g., "layout", "values")
            resource_name: Name of the resource file
            new_content: New content for the resource file
            create_backup: Whether to create a backup of the original file
            
        Returns:
            Dictionary with operation results and metadata
        """
        # Input validation
        path_validation = ValidationUtils.validate_path(project_dir, must_exist=True)
        if not path_validation["valid"]:
            return {"success": False, "error": path_validation["error"]}
        
        if not resource_type or not resource_name:
            return {"success": False, "error": "Resource type and name are required"}
        
        resource_path = os.path.join(project_dir, "res", resource_type, resource_name)
        if not os.path.exists(resource_path):
            return {
                "success": False,
                "error": f"Resource file not found: {resource_path}",
                "expected_path": resource_path
            }
        
        try:
            # Get original file info
            original_size = os.path.getsize(resource_path)
            
            # Create backup if requested
            backup_path = None
            if create_backup:
                backup_path = f"{resource_path}.bak.{int(time.time())}"
                shutil.copy2(resource_path, backup_path)
            
            # Write new content
            with open(resource_path, 'w', encoding="utf-8") as f:
                f.write(new_content)
            
            result = {
                "success": True,
                "message": f"Successfully modified {resource_path}",
                "path": resource_path,
                "backup_path": backup_path,
                "resource_type": resource_type,
                "resource_name": resource_name,
                "original_size": original_size,
                "new_size": len(new_content),
                "backup_created": backup_path is not None
            }
             
            return result
            
        except Exception as e:
            logger.error(f"Error modifying resource file: {str(e)}")
            return {
                "success": False,
                "error": f"Failed to modify resource file: {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