Unity Prefab/Scene inspection and editing toolkit with MCP server interface for component manipulation, asset operations, animation clips, and VRC SDK integration.
14 tools with complete schemas and descriptions, but significant gaps in error handling, parameter validation, and LLM-optimized guidance. Most descriptions are adequate (100-300 chars) but lack actionable recovery hints. Parameters are typed but many lack constraints (enums, ranges). Two-phase confirm/dry-run pattern is well-implemented across write operations. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Output schemas not documented. Naming is clear and verb-driven (add_, remove_, copy_, editor_*, vrcsdk_). Missing: per-parameter validation rules, error classification, and chaining IDs in responses.
Add a component to an existing GameObject in an open-mode asset. Two-phase workflow: - confirm=False (default): dry-run preview. - confirm=True: applies the change.
Copy serialized field values between components of the same type. Reads field values from the source component and writes them to the destination via patch plan. Supports cross-asset and same-asset. Two-phase workflow: - confirm=False (default): dry-run preview of changes. - confirm=True: applies changes to disk.
Preview-apply an AnimationClip against a live target (issue #243). The bridge resolves ``target_hierarchy_path`` through the Prefab Stage-aware resolver helper and samples the clip in animation-mode so the resulting state is recorded as a single Undo group that reverts the entire preview in one undo step. Issue #49: the preview is an Undo-reversible live scene change, so the inverse-irreversibility audit principle does not gate this tool; it carries no ``confirm`` / ``change_reason`` parameters.
Create multiple GameObjects in a single request (Undo-grouped). Each object dict may contain: type, name, parent, position, scale, rotation, components. type can be "Empty", "Cube", "Sphere", "Cylinder", "Capsule", "Plane", "Quad". components is an optional list of component type strings (e.g., ["BoxCollider", "AudioSource"]).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints. All write tools (add_component, remove_component, vrcsdk_upload, editor_create_*, editor_batch_*) should carry destructiveHint=true.
Output schemas not documented. Tool descriptions state what they return (e.g., 'curves', 'length', 'frame_rate' for editor_inspect_animation_clip) but no formal schema is visible. LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Set multiple shader properties on one material in a single request (Undo-grouped). Target the material by ONE of: - Renderer: hierarchy_path + material_index - Direct: material_asset_path or material_asset_guid
Set multiple properties in a single request (Undo-grouped). Each operation dict must contain: hierarchy_path, component_type, property_name. Plus either value (for primitives) or object_reference (for ObjectReference). Issue #52: each op carries a ``value_present`` marker across the bridge boundary, so an op with an empty-string ``value`` is distinct from one that omits ``value`` (and uses an ``object_reference`` instead).
Write a new AnimationClip (issue #243, issue #53). ``asset_path`` is the full ``Assets/…/Name.anim`` path; the bridge derives the destination directory and clip filename from it. Each curve entry carries ``relative_path``, ``type``, ``property``, and ``value`` (a scalar for a single-keyframe curve or a list for a multi-keyframe curve sampled at the clip's default frame rate). Requires the writer audit pair.
Create an empty GameObject with name, optional parent and position.
Create a primitive GameObject (Cube, Sphere, Cylinder, Capsule, Plane, Quad).
Create a uGUI element under the requested parent (issue #195). ``editor_create_primitive`` only supports the six built-in mesh ``PrimitiveType`` values; this tool is the dedicated surface for Canvas elements. Allowed ``type`` values are exactly ``Image``, ``TextMeshProUGUI``, ``Button``, ``Slider``, ``Toggle``; the Bridge handler owns the canonical type validation and emits the typed envelope. ``rect`` accepts ``anchorMin`` / ``anchorMax`` / ``sizeDelta`` as ``[x, y]`` pairs and is forwarded as JSON; the Bridge handler applies them to the new RectTransform. ``properties`` accepts the recognized graphic property keys ``color`` (RGBA tuple, applied to the primary Graphic) and ``font`` (TextMeshPro font asset path, applied to TextMeshPro components). When ``font`` is omitted on TextMeshPro elements the Bridge assigns the canonical default font asset (LiberationSans SDF) per the ``knowledge/prefab-sentinel-saveasprefabasset-pitfalls.md`` §3 guidance. Unknown keys are silently ignored.
Read an AnimationClip's curves and timing (issue #243). Read-only. The success envelope carries ``curves`` (a list of ``{relative_path, type, property, values}`` entries), ``length``, and ``frame_rate``.
Inspect Unity C# APIs via runtime reflection. Three actions: - search: Find types by name. Returns ranked matches (exact > starts_with > contains), max 25. - get_type: List members (methods/properties/fields/events), base class, interfaces, extensions. - get_member: Detailed info for a specific member (signature, overloads, type, etc.).
Remove a component from an existing GameObject in an open-mode asset. Two-phase workflow: - confirm=False (default): dry-run preview. - confirm=True: applies the removal.
Build and upload an avatar or world to VRChat via VRC SDK. Existing asset update only (blueprint_id required). Two-phase workflow: - confirm=False (default): validates SDK login, asset, descriptor. - confirm=True: builds and uploads to VRChat.
Parameter constraints missing. 'primitive_type' in editor_create_primitive lists allowed values in description ('Cube, Sphere, Cylinder, Capsule, Plane, Quad') but should be an enum. 'platforms' in vrcsdk_upload lists valid values in description but lacks enum constraint. Free-form strings invite hallucinated values.
Error handling and recovery guidance absent. No tool description explains what to do if a call fails (e.g., 'If asset_path is invalid, check the file exists in the project'). No error classification (retryable vs. fatal). Agents cannot self-correct on failures.
Batch tools (editor_batch_create, editor_batch_set_property, editor_batch_set_material_property) lack per-item success/failure reporting. If one operation in a batch of 50 fails, the agent cannot determine which one or retry selectively. Response schema should include per-item status.