unity-mcp/Server/tests/integration
dsarno dbdaa546b2
🎮 GameObject Toolset Redesign and Streamlining (#518)
* feat: Redesign GameObject API for better LLM ergonomics

## New Tools
- find_gameobjects: Search GameObjects, returns paginated instance IDs only
- manage_components: Component lifecycle (add, remove, set_property)

## New Resources
- unity://scene/gameobject/{id}: Single GameObject data (no component serialization)
- unity://scene/gameobject/{id}/components: All components (paginated)
- unity://scene/gameobject/{id}/component/{name}: Single component by type

## Updated
- manage_scene get_hierarchy: Now includes componentTypes array
- manage_gameobject: Slimmed to lifecycle only (create, modify, delete)
  - Legacy actions (find, get_components, etc.) log deprecation warnings

## Extracted Utilities
- ParamCoercion: Centralized int/bool/float/string coercion
- VectorParsing: Vector3/Vector2/Quaternion/Color parsing
- GameObjectLookup: Centralized GameObject search logic

## Test Coverage
- 76 new Unity EditMode tests for ManageGameObject actions
- 21 new pytest tests for Python tools/resources
- New NL/T CI suite for GameObject API (GO-0 to GO-5)

Addresses LLM confusion with parameter overload by splitting into
focused tools and read-only resources.

* feat: Add static gameobject_api helper resource for UI discoverability

Adds unity://scene/gameobject-api resource that:
- Shows in Cursor's resource list UI (no parameters needed)
- Documents the parameterized gameobject resources
- Explains the workflow: find_gameobjects → read resource
- Lists examples and related tools

* feat: Add GO tests to main NL/T CI workflow

- Adds GO pass (GO-0 to GO-5) after T pass in claude-nl-suite.yml
- Includes retry logic for incomplete GO tests
- Updates all regex patterns to recognize GO-* test IDs
- Updates DESIRED lists to include all 21 tests (NL-0..4, T-A..J, GO-0..5)
- Updates default_titles for GO tests in markdown summary
- Keeps separate claude-gameobject-suite.yml for standalone runs

* feat: Add GameObject API stress tests and NL/T suite updates

Stress Tests (12 new tests):
- BulkCreate small/medium batches
- FindGameObjects pagination with by_component search
- AddComponents to single object
- GetComponents with full serialization
- SetComponentProperties (complex Rigidbody)
- Deep hierarchy creation and path lookup
- GetHierarchy with large scenes
- Resource read performance tests
- RapidFire create-modify-delete cycles

NL/T Suite Updates:
- Added GO-0..GO-10 tests in nl-gameobject-suite.md
- Fixed tool naming: mcp__unity__ → mcp__UnityMCP__

Other:
- Fixed LongUnityScriptClaudeTest.cs compilation errors
- Added reports/, .claude/local/, scripts/local-test/ to .gitignore

All 254 EditMode tests pass (250 run, 4 explicit skips)

* fix: Address code review feedback

- ParamCoercion: Use CultureInfo.InvariantCulture for float parsing
- ManageComponents: Move Transform removal check before GetComponent
- ManageGameObjectFindTests: Use try-finally for LogAssert.ignoreFailingMessages
- VectorParsing: Document that quaternions are not auto-normalized
- gameobject.py: Prefix unused ctx parameter with underscore

* fix: Address additional code review feedback

- ManageComponents: Reuse GameObjectLookup.FindComponentType instead of duplicate
- ManageComponents: Log warnings when SetPropertiesOnComponent fails
- GameObjectLookup: Make FindComponentType public for reuse
- gameobject.py: Extract _normalize_response helper to reduce duplication
- gameobject.py: Add TODO comment for unused typed response classes

* fix: Address more code review feedback

NL/T Prompt Fixes:
- nl-gameobject-suite.md: Remove non-existent list_resources/read_resource from AllowedTools
- nl-gameobject-suite.md: Fix parameter names (component_type, properties)
- nl-unity-suite-nl.md: Remove unused manage_editor from AllowedTools

Test Fixes:
- GameObjectAPIStressTests: Add null check to ToJObject helper
- GameObjectAPIStressTests: Clarify AudioSource usage comment
- ManageGameObjectFindTests: Use built-in 'UI' layer instead of 'Water'
- LongUnityScriptClaudeTest: Clean up NL/T test artifacts (Counte42 typo, HasTarget)

* docs: Add documentation for API limitations and behaviors

- GameObjectLookup.SearchByPath: Document and warn that includeInactive
  has no effect (Unity API limitation)
- ManageComponents.TrySetProperty: Document case-insensitive lookup behavior

* More test fixes and tighten parameters on python tools

* fix: Align test expectation with implementation error message case

* docs: update README tools and resources lists

- Add missing tools: manage_components, batch_execute, find_gameobjects, refresh_unity
- Add missing resources: gameobject_api, editor_state_v2
- Make descriptions more concise across all tools and resources
- Ensure documentation matches current MCP server functionality

* fix: Address code review feedback

- ParamCoercion: Use InvariantCulture for int/double parsing consistency
- ManageComponents: Remove redundant Undo.RecordObject (AddComponent handles undo)
- ManageScene: Replace deprecated FindObjectsOfType with FindObjectsByType
- GameObjectLookup: Add explanatory comment to empty catch block
- gameobject.py: Extract _validate_instance_id helper to reduce duplication
- Tests: Fix assertion for instanceID (Unity IDs can be negative)

* chore: Remove accidentally committed test artifacts

- Remove Materials folder (40 .mat files from interactive testing)
- Remove Shaders folder (5 noise shaders from testing)
- Remove test scripts (Bounce*, CylinderBounce* from testing)
- Remove Temp.meta and commit.sh

* test: Improve delete tests to verify actual deletion

- Delete_ByTag_DeletesMatchingObjects: Verify objects are actually destroyed
- Delete_ByLayer_DeletesMatchingObjects: Assert deletion using Unity null check
- Delete_MultipleObjectsSameName_DeletesCorrectly: Document first-match behavior
- Delete_Success_ReturnsDeletedCount: Verify count value if present

All tests now verify deletion occurred rather than just checking for a result.

* refactor: remove deprecated manage_gameobject actions

- Remove deprecated switch cases: find, get_components, get_component, add_component, remove_component, set_component_property
- Remove deprecated wrapper methods (423 lines deleted from ManageGameObject.cs)
- Delete ManageGameObjectFindTests.cs (tests deprecated 'find' action)
- Remove deprecated test methods from ManageGameObjectTests.cs
- Add GameObject resource URIs to README documentation
- Add batch_execute performance tips to README, tool description, and gameobject_api resource
- Enhance batch_execute description to emphasize 10-100x performance gains

Total: ~1200 lines removed. New API (find_gameobjects, manage_components, resources) is the recommended path forward.

* fix: Remove starlette stubs from conftest.py

Starlette is now a proper dependency via the mcp package, so we don't need
to stub it anymore. The real package handles all HTTP transport needs.
2026-01-06 10:13:45 -08:00
..
__init__.py Update mirror backend with latest code 2025-11-05 16:08:59 -04:00
conftest.py 🎮 GameObject Toolset Redesign and Streamlining (#518) 2026-01-06 10:13:45 -08:00
test_debug_request_context_diagnostics.py Payload-safe paging for hierarchy/components + safer asset search + docs (#490) 2025-12-28 20:57:57 -08:00
test_domain_reload_resilience.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_edit_normalization_and_noop.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_edit_strict_and_warnings.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_editor_state_v2_contract.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_external_changes_scanner.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_find_gameobjects.py 🎮 GameObject Toolset Redesign and Streamlining (#518) 2026-01-06 10:13:45 -08:00
test_find_in_file_minimal.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_gameobject_resources.py 🎮 GameObject Toolset Redesign and Streamlining (#518) 2026-01-06 10:13:45 -08:00
test_get_sha.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_helpers.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_improved_anchor_matching.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_instance_autoselect.py ManageGameObject/Material + auto-select sole Unity instance (#502) 2026-01-01 21:04:10 -08:00
test_instance_routing_comprehensive.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_instance_targeting_resolution.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_json_parsing_simple.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_logging_stdout.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_manage_asset_json_parsing.py 🎮 GameObject Toolset Redesign and Streamlining (#518) 2026-01-06 10:13:45 -08:00
test_manage_asset_param_coercion.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_manage_components.py 🎮 GameObject Toolset Redesign and Streamlining (#518) 2026-01-06 10:13:45 -08:00
test_manage_gameobject_param_coercion.py Payload-safe paging for hierarchy/components + safer asset search + docs (#490) 2025-12-28 20:57:57 -08:00
test_manage_scene_paging_params.py Payload-safe paging for hierarchy/components + safer asset search + docs (#490) 2025-12-28 20:57:57 -08:00
test_manage_script_uri.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_manage_scriptable_object_tool.py feature/Add new manage_scriptable_object tool (#489) 2025-12-28 20:15:50 -08:00
test_read_console_truncate.py Codex/optimize and paginate read console tool (#511) 2026-01-04 14:46:52 -08:00
test_read_resource_minimal.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_refresh_unity_registration.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_refresh_unity_retry_recovery.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_resources_api.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_run_tests_busy_semantics.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_script_editing.py Update mirror backend with latest code 2025-11-05 16:08:59 -04:00
test_script_tools.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_telemetry_endpoint_validation.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_telemetry_queue_worker.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_telemetry_subaction.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_test_jobs_async.py Async Test Infrastructure & Editor Readiness Status + new refresh_unity tool (#507) 2026-01-03 12:42:32 -08:00
test_tool_signatures_paging.py Payload-safe paging for hierarchy/components + safer asset search + docs (#490) 2025-12-28 20:57:57 -08:00
test_transport_framing.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00
test_validate_script_summary.py HTTP Server, uvx, C# only custom tools (#375) 2025-11-24 23:21:06 -04:00