Claude Code integration for Unity Editor. Conversational AI assistant with project awareness, architecture skills, and 75+ editor tools via MCP.
UniClaude provides 23 tools with consistent naming (verb_noun pattern) and descriptions. All tools have input schemas with typed parameters and descriptions. However, output schemas are undocumented, responses are returned as JSON text without formal schema declarations. Parameter descriptions are adequate but generic; many lack constraints (enums, ranges, formats). Error handling is basic: tools return MCPToolResult with text content but lack recovery guidance or error classification. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Composition is sound, tools are single-responsibility and chainable via asset paths and GameObject references.
Lock domain reload before modifying scripts in a batch. Call EndScriptEditing when done.
Unlock domain reload and trigger compilation. Returns compile result.
Assign an AnimationClip to a named state in an AnimatorController
Assign an AnimatorController to a GameObject (adds Animator if needed)
Create an AnimatorController with optional parameters, states, and transitions in one call
Inspect an AnimatorController: parameters, states, transitions, layers
Search for assets by filter (e.g. 't:Script', 't:Texture player'). Optional folder restriction. Max 100 results.
Output schemas undocumented. Tools return MCPToolResult.ToMCPResponse() with generic text content, but no formal schema declares what fields/structure the LLM should expect. This forces LLMs to parse unstructured JSON text and guess at field names for downstream tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels (READ_ONLY, WRITE, REVERSIBLE) in metadata but not exposed via MCP protocol. LLMs cannot distinguish safe reads from destructive writes without explicit annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Read import settings for any asset (textures, models, audio, etc.)
Get asset metadata: type, GUID, labels, and direct dependencies. If the returned type is 'UnityEditor.DefaultAsset', Unity has no native importer for this format — common unsupported formats: .webp, .svg, .heic. Convert to PNG/JPG/TGA/PSD/EXR before use.
Force reimport of an asset at the given path
Move or rename an asset from one path to another
Configure animation clip settings (loopTime, loopPose, etc.) on an FBX/model asset and reimport
Set import settings on any asset (textures, models, audio) and reimport
Add a component to a GameObject by type name (supports undo)
Find all GameObjects with a specific component type
List all components on a GameObject with type names and enabled state
Read a serialized property value from a component
Remove a component from a GameObject by type name (supports undo)
Set a serialized property value on a component
Add a persistent listener to a UnityEvent (e.g. Button.onClick). Supports void methods and methods with a single argument (string, int, float, bool).
List all persistent listeners on a UnityEvent field
Remove a persistent listener by index from a UnityEvent
Force script recompilation and return compilation status with any errors
Parameter descriptions lack constraints. Many parameters accept free-form strings (e.g., 'typeName', 'propertyName', 'stateName') without enums, patterns, or format hints. LLMs cannot validate input and may pass invalid values like misspelled component names.
Error handling lacks recovery guidance. MCPToolResult.Error() returns plain text messages without categorization (retryable, user-fixable, fatal) or actionable next steps. E.g., 'GameObject not found' does not suggest calling component_find or asset_find.
Naming inconsistency: BeginScriptEditing and EndScriptEditing use PascalCase instead of verb_noun snake_case. This breaks LLM parsing conventions and makes intent ambiguous (are these getters or commands?).