MCP server for creating and refining procedural 3D assets with JavaScript, image feedback, and reusable source revisions.
Mixed quality across 33 tools. Strengths: consistent naming with verb prefixes (kiln_*, scene_*), most tools have descriptions. Weaknesses: parameter descriptions are sparse or missing on many tools, output schemas are not documented in the provided source, no error handling guidance visible, critical operations (kiln_submit, scene_finalize) lack confirmation/dry-run patterns. The Kiln tool group (1-8) has better description clarity than the Scene composer tools (9-33), many of which use vague parameter types like 'array' and 'object' without field-level documentation. Schema validation is present but incomplete, input types exist but lack constraints (enums, ranges, patterns). No visible tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools 22-24 (environment/backdrop/paint) have enum constraints, which is a positive pattern, but inconsistently applied.
Apply exact-string replacements to Kiln source code in the working buffer (edit mode). Text must be unique unless replaceAll is true.
List available 3D primitives and host capabilities (export formats, animation support, camera limits)
Render a 3D asset from Kiln source code and return views/exports. Returns structured output with image data, fidelity metadata, and optional exports.
Capture a single frame screenshot of rendered 3D asset with camera positioning and view fidelity metadata
Render animation frames from Kiln source code with animate() function and return as grid or per-frame sequence
Submit your FINAL Kiln program. Call this exactly once, after you have validated and rendered your code, to record the answer. The argument `code` must be the complete program (meta + build(), optional animate()).
Output schemas not documented. No visible return type definitions for any tool, LLMs cannot plan downstream calls or extract expected fields. Agents will guess at output structure, risking parsing errors and failed chaining.
Parameter descriptions missing or extremely brief on scene_* tools (9-33). Many parameters lack descriptions entirely or contain only one sentence. E.g., scene_layout 'rows' has no constraint description (minimum/maximum values). Scene composer tools (tools 9-33) average ~50 chars per parameter description vs ~75 chars for Kiln tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2025-06-18+ | v2 |
Validate Kiln source code and return compilation errors or success
Return the current working buffer code (edit mode only). Omit parameters.
Group assets into a named cluster with optional styling
Orient an asset to face a direction: center (origin), out (away), [x,z] point, or degrees
Mark the scene authoring complete and lock it for submission
Create a logical grouping of assets for organizational purposes
Arrange assets in a grid pattern with specified spacing and orientation
List available assets in the catalog with metadata (name, bounds, tags)
Move a single asset to a new position
Paint a textured ground or surface area (grass, concrete, sand, etc.) in a rectangular or strip shape
Place or move an asset in the scene at a specific position with optional rotation and scale
Remove an asset or group from the scene
Render the entire scene with specified cameras and return views as images. Supports grid or per-camera modes.
Arrange assets in a circular pattern around a center point
Capture a single frame screenshot of the scene from a specific named camera
Set atmospheric backdrop element (mushroom-cloud, sun-disc, aurora, fuji)
Set the scene environment theme (ground/sky preset)
Validate the scene for overlaps, out-of-bounds, and invalid placements. Returns list of violations.
Return the current scene model, placement count, and validation status
Set one object collision policy to none, asset bounds, selected authored GLB mesh nodes, or a deterministic generated bounds-box artifact. Artifact policies require bounded host ports.
Replace authored navigational paths using world-space X/Y/Z points.
Replace persisted ordered camera/grid/lighting/receipt parameters. Do not send artifactBinding; Engine binds the post-edit world hash. Total requested pixels are capped at 16,777,216.
Replace named anchors/portals with compatibility, capacity, and portal clearance.
Replace player/actor spawns, each with a positive clearance radius.
Set or replace world terrain heightfield artifact with SHA256 reference
Replace bounded reserved/portal/spawn-clearance zones. Rect halfExtents must be positive.
Snap an object to a named socket/anchor with compatibility checking
Untyped or under-specified complex parameters. scene_world_set_zones, scene_world_set_paths, scene_world_set_sockets, scene_world_set_presentation have 'array' or 'object' type with only a brief description string. No field-level schema visible for nested objects (e.g., zone object structure, socket object structure). LLMs cannot infer which fields are required or their types.
No error handling guidance visible. Tools like kiln_render, kiln_validate, and all scene_* tools provide no indication of what to do on failure, no recovery suggestions, no error classification (retryable vs user-fixable vs fatal). Agents will have no recovery path if a call fails.
Irreversible operations lack confirmation or dry-run pattern. kiln_submit and scene_finalize are final, irreversible actions but have no description warning agents, no dry-run option, no confirmation step. Agents may accidentally submit incomplete work.
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). MCP 2026-07-28 spec supports structured tool annotations to guide agent behavior. None are present. Agents cannot distinguish read-only tools from write tools in their reasoning.
Inconsistent enum usage. scene_set_environment (tool 22) and scene_set_backdrop (tool 23) correctly use enum constraints with explicit valid values. scene_paint (tool 24) also has enums. But most placement/geometry tools (scene_layout, scene_ring, scene_face) lack enums despite accepting constrained inputs (e.g., 'facing' in scene_face should be an enum: center|out|degrees|[x,z]). This inconsistency invites hallucinated values.
Array parameters lack clarity on element type and constraints. kiln_render 'views' and 'exports' accept comma-separated strings. scene_layout, scene_ring, scene_cluster accept 'assetIds' arrays. No description states: is it an array of strings? Objects? What schema does each element follow? Min/max length?
Parameter chaining unclear. kiln_render accepts 'views' and 'exports' as comma-separated strings, but no description explains the exact format (space-separated? comma+space? trailing commas?). No example shown. scene_place accepts position as [x,y,z] array, format is clear, but scene_face accepts 'facing' as string|number|array with no format example for the array variant.