* WIP: Material management tool implementation and tests
- Add ManageMaterial tool for creating and modifying materials
- Add MaterialOps helper for material property operations
- Add comprehensive test suite for material management
- Add string parameter parsing support for material properties
- Update related tools (ManageGameObject, manage_asset, etc.)
- Add test materials and scenes for material testing
* refactor: unify material property logic into MaterialOps
- Move and logic from to
- Update to delegate to
- Update to use enhanced for creation and property setting
- Add texture path loading support to
* Add parameter aliasing support: accept 'name' as alias for 'target' in manage_gameobject modify action
* Refactor ManageMaterial and fix code review issues
- Fix Python server tools (redundant imports, exception handling, string formatting)
- Clean up documentation and error reports
- Improve ManageMaterial.cs (overwrite checks, error handling)
- Enhance MaterialOps.cs (robustness, logging, dead code removal)
- Update tests (assertions, unused imports)
- Fix manifest.json relative path
- Remove temporary test artifacts and manual setup scripts
* Remove test scene
* remove extra mat
* Remove unnecessary SceneTemplateSettings.json
* Remove unnecessary SceneTemplateSettings.json
* Fix MaterialOps issues
* Fix: Case-insensitive material property lookup and missing HasProperty checks
* Rabbit fixes
* Improve material ops logging and test coverage
* Fix: NormalizePath now handles backslashes correctly using AssetPathUtility
* Fix: Address multiple nitpicks (test robustness, shader resolution, HasProperty checks)
* Add manage_material tool documentation and fix MaterialOps texture property checks
- Add comprehensive ManageMaterial tool documentation to MCPForUnity/README.md
- Add manage_material to tools list in README.md and README-zh.md
- Fix MaterialOps.cs to check HasProperty before SetTexture calls to prevent Unity warnings
- Ensures consistency with other property setters in MaterialOps
* Fix ManageMaterial shader reflection for Unity 6 and improve texture logging
* Move the current test to a Tools folder
* feat: add env object and disabled flag handling for MCP client configuration
* Format manual config specially for Windsurf and Kiro
* refactor: extract config JSON building logic into dedicated ConfigJsonBuilder class
* refactor: extract unity node population logic into centralized helper method
* refactor: only add env property to config for Windsurf and Kiro clients
If it ain't broke with the other clients, don't fix...
* fix: write UTF-8 without BOM encoding for config files to avoid Windows compatibility issues
* fix: enforce UTF-8 encoding without BOM when writing files to disk
* refactor: replace execute_menu_item with enhanced manage_menu_item tool supporting list/exists/refresh
* Update meta files for older Unity versions
* test: add unit tests for menu item management and execution
* feat: add tips for paths, script compilation, and menu item usage in asset creation strategy
* Use McpLog functionality instead of Unity's Debug
* Add telemetry
* Annotate parameters
More info to LLMs + better validation
* Remove the refresh command
It's only ever useful in the context of listing menu items
* Updated meta files since running in Unity 2021
* Slightly better README
* fix: rename server-version.txt to server_version.txt and update menu item description
CodeRabbit fixes:
- Fix Python test assertions to use assert instead of print/return
- Update version consistency: server_version.txt from 3.2.0 to 3.3.0
- Assembly definition references already correctly configured
Greptile style fixes:
- Add missing newlines at end of Unity meta files and source files
- Fix test logic assumptions: use GreaterOrEqual instead of exact counts
- Make test assertions more robust for fuzzy matching algorithms
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Performance & Quality Improvements:
- Add shared JsonSerializer to eliminate per-call allocation overhead
- Optimize ComponentResolver with CacheByName for short-name lookups
- Deduplicate Vector3 parsing implementations to reduce maintenance burden
- Improve property name normalization for better fuzzy matching quality
- Reduce log noise by avoiding duplicate component resolution warnings
Code Quality:
- Keep using static import for ComponentResolver (CodeRabbit was incorrect about this)
- Normalize property names consistently in AI suggestions algorithm
- Remove duplicate ParseVector3 implementation
TestAsmdef Fix:
- Revert TestAsmdef back to runtime-compatible (remove "includePlatforms": ["Editor"])
- CustomComponent now works correctly for asmdef testing as originally intended
- Validates that ComponentResolver properly handles both short and FQN for asmdef components
Live Testing Validation:
- All ComponentResolver functionality verified through live MCP connection
- AI property matching working perfectly with natural language input
- Assembly definition support fully functional for both default and custom assemblies
- Error handling provides helpful suggestions and complete context
All 45 C# tests + 31 Python tests still passing. Production ready!
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Critical Bug Fixes:
- Fix operator precedence bug in ManageAsset.cs that could cause null reference exceptions
- Fix GameObject memory leak in primitive creation when name validation fails
- Add proper cleanup with DestroyImmediate when primitive creation fails
ComponentResolver Integration:
- Replace fragile string-based GetComponent() calls with robust ComponentResolver
- Add ComponentResolver integration in ManageAsset.cs for component lookups
- Add fallback to string-based lookup in ManageGameObject.cs for compatibility
Enhanced Error Handling:
- Surface specific ComponentResolver error context in ScriptableObject creation failures
- Add support for setting private [SerializeField] fields in property matching
- Improve debugging with detailed error messages
Assembly Definition Fixes:
- Configure TestAsmdef as Editor-only to prevent build bloat
- Add explicit TestAsmdef reference to test assembly for proper component resolution
- Fix ComponentResolverTests to use accessible CustomComponent instead of TicTacToe3D
Code Quality:
- Disable nullable reference types for legacy codebase to eliminate 100+ warnings
- Maintain backward compatibility while improving reliability
All 45 unit tests pass, ensuring no regressions while significantly improving robustness.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace Assembly.LoadFrom with already-loaded assembly search
- Prioritize Player assemblies over Editor assemblies using CompilationPipeline
- Support both short names and fully-qualified component names
- Add comprehensive caching and error handling with disambiguation
- Use Undo.AddComponent for proper editor integration
- Handle ReflectionTypeLoadException safely during type enumeration
- Add fallback to TypeCache for comprehensive type discovery in Editor
Fixes component resolution across custom assembly definitions and eliminates
"Could not load the file 'Assembly-CSharp-Editor'" errors.
Tested with:
- Built-in Unity components (Rigidbody, MeshRenderer, AudioSource)
- Custom user scripts in Assembly-CSharp (TicTacToe3D)
- Custom assembly definition components (TestNamespace.CustomComponent)
- Error handling for non-existent components
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add a base Unity project to run unit tests in
* Add Windsurf IDE support so I can test more easily
* Add a dummy script
* feat: add unit tests for CommandRegistry and document prefab asset workflows
* Run tests when code is pushed to main
* Bump version of actions
* Install the MCP plugin via relative path
* Remove test branch from GH workflow