editor_search_assets
Search for Unreal Engine assets by name, path, or class to locate specific files within your project.
Instructions
Search for assets by name or path with optional class filter
Example output: {'search_term': 'character', 'asset_class_filter': 'Blueprint', 'total_matches': 3, 'assets': [{'name': 'BP_Character', 'path': '/Game/Characters', 'class': 'Blueprint', 'package_name': 'BP_Character'}, {'name': 'BP_EnemyCharacter', 'path': '/Game/Enemies', 'class': 'Blueprint', 'package_name': 'BP_EnemyCharacter'}]}
Returns search results with asset details, limited to 50 results.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | Yes | ||
| asset_class | No |
Implementation Reference
- Core implementation of the asset search logic using Unreal Engine's AssetRegistry. Searches assets by name or path with optional class filter, sorts by relevance, limits to 50 results.def search_assets( search_term: str, asset_class: Optional[str] = None ) -> Dict[str, Any]: asset_registry = unreal.AssetRegistryHelpers.get_asset_registry() all_assets = asset_registry.get_all_assets() matching_assets = [] search_term_lower = search_term.lower() for asset in all_assets: asset_name = str(asset.asset_name).lower() package_path = str(asset.package_path).lower() asset_class_name = str(asset.asset_class_path.asset_name).lower() name_match = search_term_lower in asset_name path_match = search_term_lower in package_path class_match = True if asset_class: class_match = asset_class.lower() in asset_class_name if (name_match or path_match) and class_match: matching_assets.append( { "name": str(asset.asset_name), "path": str(asset.package_path), "class": str(asset.asset_class_path.asset_name), "package_name": str(asset.package_name), } ) def relevance_score(asset): name_exact = search_term_lower == asset["name"].lower() name_starts = asset["name"].lower().startswith(search_term_lower) return (name_exact * 3) + (name_starts * 2) + 1 matching_assets.sort(key=relevance_score, reverse=True) return { "search_term": search_term, "asset_class_filter": asset_class, "total_matches": len(matching_assets), "assets": matching_assets[:50], # Limit to 50 results }
- server/index.ts:279-297 (registration)Registers the 'editor_search_assets' tool with MCP server, including schema (search_term: string, asset_class: optional string) and thin wrapper handler that executes templated Python code via tryRunCommand.server.tool( "editor_search_assets", "Search for assets by name or path with optional class filter\n\nExample output: {'search_term': 'character', 'asset_class_filter': 'Blueprint', 'total_matches': 3, 'assets': [{'name': 'BP_Character', 'path': '/Game/Characters', 'class': 'Blueprint', 'package_name': 'BP_Character'}, {'name': 'BP_EnemyCharacter', 'path': '/Game/Enemies', 'class': 'Blueprint', 'package_name': 'BP_EnemyCharacter'}]}\n\nReturns search results with asset details, limited to 50 results.", { search_term: z.string(), asset_class: z.string().optional(), }, async ({ search_term, asset_class }) => { const result = await tryRunCommand(editorTools.UESearchAssets(search_term, asset_class)) return { content: [ { type: "text", text: result, }, ], } }, )
- server/editor/tools.ts:24-28 (helper)Helper function that templates the ue_search_assets.py script with search parameters for execution in Unreal Editor.export const UESearchAssets = (search_term: string, asset_class?: string) => Template(read("./scripts/ue_search_assets.py"), { search_term, asset_class: asset_class || "", })