search_polyhaven_assets
Search for Polyhaven assets by type and optional categories to locate HDRI, textures, or models for use in 3D projects. Returns detailed matching asset information.
Instructions
Search for assets on Polyhaven with optional filtering.
Parameters:
- asset_type: Type of assets to search for (hdris, textures, models, all)
- categories: Optional comma-separated list of categories to filter by
Returns a list of matching assets with basic information.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | all | |
| categories | No |
Implementation Reference
- src/server.py:502-558 (handler)The primary handler implementation for the 'search_polyhaven_assets' tool. Decorated with @mcp.tool() for automatic registration in the FastMCP server. It proxies the search request to the Blender addon via socket communication, processes the response by sorting assets by download count, and formats a user-friendly output listing matching assets with details like type, categories, and popularity.@mcp.tool() def search_polyhaven_assets( ctx: Context, asset_type: str = "all", categories: str = None ) -> str: """ Search for assets on Polyhaven with optional filtering. Parameters: - asset_type: Type of assets to search for (hdris, textures, models, all) - categories: Optional comma-separated list of categories to filter by Returns a list of matching assets with basic information. """ try: blender = get_blender_connection() result = blender.send_command( "search_polyhaven_assets", {"asset_type": asset_type, "categories": categories}, ) if "error" in result: return f"Error: {result['error']}" # Format the assets in a more readable way assets = result["assets"] total_count = result["total_count"] returned_count = result["returned_count"] formatted_output = f"Found {total_count} assets" if categories: formatted_output += f" in categories: {categories}" formatted_output += f"\nShowing {returned_count} assets:\n\n" # Sort assets by download count (popularity) sorted_assets = sorted( assets.items(), key=lambda x: x[1].get("download_count", 0), reverse=True ) for asset_id, asset_data in sorted_assets: formatted_output += ( f"- {asset_data.get('name', asset_id)} (ID: {asset_id})\n" ) formatted_output += ( f" Type: {['HDRI', 'Texture', 'Model'][asset_data.get('type', 0)]}\n" ) formatted_output += ( f" Categories: {', '.join(asset_data.get('categories', []))}\n" ) formatted_output += ( f" Downloads: {asset_data.get('download_count', 'Unknown')}\n\n" ) return formatted_output except Exception as e: logger.error(f"Error searching Polyhaven assets: {str(e)}") return f"Error searching Polyhaven assets: {str(e)}"