search_polyhaven_assets
Search and filter 3D assets from Polyhaven directly within Blender using asset type and optional categories to streamline your workflow. Returns matching assets with essential details.
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/blender_mcp/server.py:382-430 (handler)The handler function for 'search_polyhaven_assets' tool. It sends a 'search_polyhaven_assets' command to the Blender addon via socket connection, processes the response by sorting assets by download count, and returns a formatted string listing the assets with details like name, type, categories, and download count.@telemetry_tool("search_polyhaven_assets") @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)}"
- src/blender_mcp/server.py:382-383 (registration)The @mcp.tool() decorator registers the search_polyhaven_assets function as an MCP tool, along with @telemetry_tool for telemetry.@telemetry_tool("search_polyhaven_assets") @mcp.tool()
- src/blender_mcp/server.py:384-396 (schema)The function signature and docstring define the input schema (asset_type and categories parameters) and output as str for the 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.