* Add TDD tests for MCP material management issues
- MCPMaterialTests.cs: Tests for material creation, assignment, and data reading
- MCPParameterHandlingTests.cs: Tests for JSON parameter parsing issues
- SphereMaterialWorkflowTests.cs: Tests for complete sphere material workflow
These tests document the current issues with:
- JSON parameter parsing in manage_asset and manage_gameobject tools
- Material creation with properties
- Material assignment to GameObjects
- Material component data reading
All tests currently fail (Red phase of TDD) and serve as specifications
for what needs to be fixed in the MCP system.
* Refine TDD tests to focus on actual MCP tool parameter parsing issues
- Removed redundant tests that verify working functionality (GameObjectSerializer, Unity APIs)
- Kept focused tests that document the real issue: MCP tool parameter validation
- Tests now clearly identify the root cause: JSON string parsing in MCP tools
- Tests specify exactly what needs to be fixed: parameter type flexibility
The issue is NOT in Unity APIs or serialization (which work fine),
but in MCP tool parameter validation being too strict.
* Fix port discovery protocol mismatch
- Update _try_probe_unity_mcp to recognize Unity bridge welcome message
- Unity bridge sends 'WELCOME UNITY-MCP' instead of JSON pong response
- Maintains backward compatibility with JSON pong format
- Fixes MCP server connection to Unity Editor
* Resolve merge: unify manage_gameobject param coercion and schema widening
* Tests: add MaterialParameterToolTests; merge port probe fix; widen tool schemas for JSON-string params
* feat(material): support direct shader property keys and texture paths; add EditMode tests
* chore(tests): track required .meta files; remove ephemeral Assets/Editor test helper
* fix(manage_gameobject): validate parsed component_properties is a dict; return clear error
* Add TDD tests for MCP material management issues
- MCPMaterialTests.cs: Tests for material creation, assignment, and data reading
- MCPParameterHandlingTests.cs: Tests for JSON parameter parsing issues
- SphereMaterialWorkflowTests.cs: Tests for complete sphere material workflow
These tests document the current issues with:
- JSON parameter parsing in manage_asset and manage_gameobject tools
- Material creation with properties
- Material assignment to GameObjects
- Material component data reading
All tests currently fail (Red phase of TDD) and serve as specifications
for what needs to be fixed in the MCP system.
* Refine TDD tests to focus on actual MCP tool parameter parsing issues
- Removed redundant tests that verify working functionality (GameObjectSerializer, Unity APIs)
- Kept focused tests that document the real issue: MCP tool parameter validation
- Tests now clearly identify the root cause: JSON string parsing in MCP tools
- Tests specify exactly what needs to be fixed: parameter type flexibility
The issue is NOT in Unity APIs or serialization (which work fine),
but in MCP tool parameter validation being too strict.
* Fix port discovery protocol mismatch
- Update _try_probe_unity_mcp to recognize Unity bridge welcome message
- Unity bridge sends 'WELCOME UNITY-MCP' instead of JSON pong response
- Maintains backward compatibility with JSON pong format
- Fixes MCP server connection to Unity Editor
* Resolve merge: unify manage_gameobject param coercion and schema widening
* Tests: add MaterialParameterToolTests; merge port probe fix; widen tool schemas for JSON-string params
* refactor: extract JSON coercion helper; docs + exception narrowing\nfix: fail fast on bad component_properties JSON\ntest: unify setup, avoid test-to-test calls\nchore: use relative MCP package path
* chore(tests): track MCPToolParameterTests.cs.meta to keep GUID stable
* test: decouple MaterialParameterToolTests with helpers (no inter-test calls)
* feat: migrate to FastMCP 2.0 (v2.12.5)
- Update pyproject.toml to use fastmcp>=2.12.5 instead of mcp[cli]
- Replace all imports from mcp.server.fastmcp to fastmcp
- Maintain MCP protocol compliance with mcp>=1.16.0
- All 15 files updated with new import statements
- Server and tools registration working with FastMCP 2.0
* chore: bump MCP for Unity to 6.2.2 and widen numeric tool params (asset search/read_resource/run_tests) for better LLM compatibility
* chore: bump installed server_version.txt to 6.2.2 so Unity installer logs correct version
* fix(parameters): apply parameter hardening to read_console, manage_editor, and manage_gameobject
- read_console: accept int|str for count parameter with coercion
- manage_editor: accept bool|str for wait_for_completion with coercion
- manage_gameobject: accept bool|str for all boolean parameters with coercion
- All tools now handle string parameters gracefully and convert to proper types internally
* chore(deps): drop fastmcp, use mcp>=1.18.0; update imports to mcp.server.fastmcp
* chore(deps): re-add fastmcp>=2.12.5, relax mcp to >=1.16.0
Adds fastmcp as explicit dependency for FastMCP 2.0 migration.
Relaxes mcp version constraint to support broader compatibility.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* test: remove obsolete mcp stubs for FastMCP 2.0 compatibility
Removes stub mcp modules from test files that were conflicting with
the real mcp and fastmcp packages now installed as dependencies.
Adds tests/__init__.py to make tests a proper Python package.
This fixes test collection errors after migrating to FastMCP 2.0.
Test results: 40 passed, 7 xpassed, 5 skipped, 1 failed (pre-existing)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: complete FastMCP 2.0 migration with correct import paths
Updates all remaining files to use `from fastmcp import` instead of
the old `from mcp.server.fastmcp import` path.
Changes:
- server.py: Update FastMCP import
- tools/__init__.py: Update FastMCP import
- resources/__init__.py: Update FastMCP import
- tools/manage_script.py, read_console.py, resource_tools.py: Update imports
- test stubs: Update to stub `fastmcp` instead of `mcp.server.fastmcp`
Addresses PR review feedback about incomplete migration.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: harden parameter type handling and resolve PR feedback
Parameter Type Improvements:
- Broaden count in read_console.py to accept int | str
- Broaden build_index in manage_scene.py to accept int | str
- Harden vector parsing in manage_gameobject.py with NaN/Inf checks
- Add whitespace-delimited vector support (e.g., "1 2 3")
- Narrow exception handling from Exception to (ValueError, TypeError)
Test Improvements:
- Harden _load_module in test files with spec/loader validation
- Fix test_manage_gameobject_boolean_and_tag_mapping by mapping tag→search_term
Bug Fixes:
- Fix syntax error in manage_shader.py (remove stray 'x')
Version: Bump to 6.2.3
All tests pass: 41 passed, 5 skipped, 7 xpassed
---------
Co-authored-by: Claude <noreply@anthropic.com>
* chore: update Unity version from 2021.3.45f1 to 2021.3.45f2
Older Unity version had the security vulnerability, so we update it
* feat: add dynamic version display in editor window settings
* refactor: remove manual license file handling from Unity test workflow
* Revert "refactor: remove manual license file handling from Unity test workflow"
This reverts commit a6ab3d982e792039c01a4afd353e61c7e22a2c3c.
* feat: add Unity license credentials to Docker containers in CI workflow
* refactor: replace manual Unity license activation with game-ci/unity-activator
* refactor: simplify Unity CI setup by removing game-ci activation and using built-in license handling
* fix: improve Unity license activation in CI by using unityci image's built-in activation flow
* refactor: activate once in a temporary container, then reuse the license in the long-running container
Now we got the license secret to be read, we got this error: "Machine bindings don't match". So it seems that the license I generated locally can't be used.
So we need to activate the license within the container
* Revert "refactor: activate once in a temporary container, then reuse the license in the long-running container"
This reverts commit f6a9aa68f910df37cede6f83d535098be2a9f80b.
* Revert "fix: improve Unity license activation in CI by using unityci image's built-in activation flow"
This reverts commit a9f4c0223bc3467442be6dafa1d9303479623a7c.
* Revert "refactor: simplify Unity CI setup by removing game-ci activation and using built-in license handling"
This reverts commit 4e5ffc0051a7b15b9d87ecaa06fa646f8b13b0b9.
* Revert "refactor: replace manual Unity license activation with game-ci/unity-activator"
This reverts commit e9520ee768c4e9d48efc81b1a9c3cac3986cc96a.
* Revert "feat: add Unity license credentials to Docker containers in CI workflow"
This reverts commit 01b8879e35baaf88239988b51e6d4f1e5daaa1cf.
* 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
* 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