A collection of Python and Blender scripts for procedural 3D asset generation, texture atlasing, mesh decimation, and asset library management for VRChat world building. Includes integration with Poly Haven asset matching and parametric prop generators.
Server has 15 tools with basic descriptions and parameter schemas, but significant quality gaps. Most tool descriptions are 20-80 chars (below the 50-200 char baseline for LLM optimization). Parameter descriptions exist but are minimal. No output schemas documented. Error handling is absent, tools will fail silently or return raw exceptions. No tool annotations (readOnlyHint/destructiveHint). Naming is generally verb-first (search, register, generate_*) but some tools combine multiple concerns (pack_atlas + export, bake_to_texture + apply). Asset library tools (search, register, get_by_id) are well-structured; procedural generation tools (generate_bottle, generate_chair, etc.) lack depth in parameter constraints and output documentation.
Apply PBR texture maps to a mesh and bake to UV. Supports basecolor, normal, roughness, and metalness maps.
Import mesh, decimate to target triangle count, add lightmap UV, and export FBX.
Parametric bottle/cup generator. Exports a single FBX with separate material slots per part (body, cap, handle).
Parametric chair generator. Creates office, lounge, or dining chair styles.
Parametric lamp generator. Creates floor or desk lamp styles.
Parametric shelf unit generator with configurable dimensions and shelf count.
Parametric table generator with configurable dimensions and leg style.
No output schemas documented. Tools return unstructured results (e.g., pack_atlas returns 'uv_map: {id: {offset, scale}}' but no formal schema). LLMs cannot plan downstream calls or extract fields reliably.
No error handling or recovery guidance. Tools will fail (e.g., invalid asset_id, missing mesh file) with raw exceptions. No actionable error messages to guide LLM retry or fallback.
Tool descriptions are too short (40-60 chars). Baseline is 50-200 chars for LLM optimization. Descriptions lack WHEN to use, WHAT it returns, and prerequisites. E.g., 'Parametric bottle/cup generator' does not explain output format, triangle budget implications, or material slot structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Return asset by exact id, or None.
Pack N texture sets into a square atlas grid. Returns uv_map: {id: {offset: [u, v], scale: [su, sv]}}
Match a list of scene assets against Poly Haven catalog. Returns matches and recommendations for procedural generation.
Force refresh the Poly Haven asset catalog cache.
Search Poly Haven catalog by query. Returns top N matches sorted by relevance score.
Print catalog statistics including asset counts and top categories.
Add or update an asset in the library. Matches on id.
Return assets whose label or tags fuzzy-match query above threshold.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes. E.g., register, pack_atlas, bake_to_texture, generate_* are all WRITE but unmarked. search, get_by_id, polyhaven_search are READ but unmarked.
Parameter descriptions are minimal (10-30 chars). E.g., 'Asset object with id, label, tags, and other metadata' for register's asset param lacks format, required fields, and constraints. 'Similarity threshold (default 0.6)' for search's threshold lacks range (0.0-1.0?) and impact explanation.