* First pass at new UI
* Point to new UI
* Refactor: New Service-Based MCP Editor Window Architecture
We separate the business logic from the UI rendering of the new editor window with new services.
I didn't go full Dependency Injection, not sure if I want to add those deps to the install as yet, but service location is fairly straightforward.
Some differences with the old window:
- No more Auto-Setup, users will manually decide what they want to do
- Removed Python detection warning, we have a setup wizard now
- Added explicit path overrides for `uv` and the MCP server itself
* style: add flex-shrink and overflow handling to improve UI element scaling
* fix: update UI configuration and visibility when client status changes
* feat: add menu item to open legacy MCP configuration window
* refactor: improve editor window lifecycle handling with proper update subscription
* feat: add auto-verification of bridge health when connected
* fix: update Claude Code MCP server registration to use lowercase unityMCP name and correct the manual installation instructions
* fix: add Claude CLI directory to PATH for node/nvm environments
* Clarify how users will see MCP tools
* Add a keyboard shortcut to open the window
* feat: add server download UI and improve installation status messaging
This is needed for the Unity Asset Store, which doesn't have the Python server embedded.
* feat: add dynamic asset path detection to support both Package Manager and Asset Store installations
* fix: replace unicode emojis with escaped characters in status messages
* feat: add server package creation and GitHub release publishing to version bump workflow
* fix: add v prefix to server package filename in release workflow
* Fix download location
* style: improve dropdown and settings layout responsiveness with flex-shrink and max-width
* feat: add package.json version detection and refactor path utilities
* refactor: simplify imports and use fully qualified names in ServerInstaller.cs
* refactor: replace Unity Debug.Log calls with custom McpLog class
* fix: extract server files to temp directory before moving to final location
* docs: add v6 UI documentation and screenshots with service architecture overview
* docs: add new UI Toolkit-based editor window with service architecture and path overrides
* feat: improve package path resolution to support Package Manager and Asset Store installations
* Change Claude Code's casing back to "UnityMCP"
There's no need to break anything as yet
* fix: update success dialog text to clarify manual bridge start requirement
* refactor: move RefreshDebounce and ManageScriptRefreshHelpers classes inside namespace
* feat: add Asset Store fallback path detection for package root lookup
* fix: update server installation success message to be more descriptive
* refactor: replace Unity Debug.Log calls with custom McpLog utility
* fix: add file existence check before opening configuration file
* refactor: simplify asset path handling and remove redundant helper namespace references
* docs: update code block syntax highlighting in UI changes doc
* docs: add code block syntax highlighting for file structure example
* feat: import UnityEditor.UIElements namespace for UI components for Unity 2021 compatibility
* refactor: rename Python server references to MCP server for consistency
* fix: reset client status label color after error state is cleared
* Replace the phrase "Python server" with "MCP server"
* MInor doc clarification
* docs: add path override methods for UV and Claude CLI executables
* docs: update service locator registration method name from SetCustomImplementation to Register
* Copy UnityMcpBridge into a new MCPForUnity folder
This is to close#284
* refactor: rename UnityMcpBridge directory to MCPForUnity in docs
* chore: rename UnityMcpBridge directory to MCPForUnity across workflow files
* chore: rename UnityMcpBridge directory to MCPForUnity across all files
* refactor: update import paths from UnityMcpBridge to MCPForUnity across test files
* fix: update module import paths to use MCPForUnity instead of UnityMcpBridge
* chore: update unity-mcp package path to MCPForUnity directory
* feat: add OneTimeSetUp to initialize CommandRegistry before tests run
Hopefully fix the CI failures
* Apply recent fix to new folder
* Temporarily trigger tests to see if CI works
* Revert "Temporarily trigger tests to see if CI works"
It works!
This reverts commit 8c6eaaad07545cef047769f2c52fe506545a8161.
* refactor: remove unused UnityEngine references from menu item classes
* Add new tools to manage a prefab, particularly, making them staged.
This might be enough, but it's possible we may have to extract some logic from ManageGameObject
* feat: add AssetPathUtility for asset path normalization and update references in ManageAsset and ManagePrefabs
* feat: add prefab management tools and register them with the MCP server
* feat: update prefab management commands to use 'prefabPath' and add 'create_from_gameobject' action
* fix: update parameter references to 'prefabPath' in ManagePrefabs and manage_prefabs tools
* fix: clarify error message for missing 'prefabPath' in create_from_gameobject command
* fix: ensure pull request triggers for unity tests workflow
* Revert "fix: ensure pull request triggers for unity tests workflow"
This reverts commit 10bfe54b5b7f3c449852b1bf1bb72f498289a1a0.
* Remove delayed execution of executing menu item, fixing #279
This brings the Unity window into focus but that seems to be a better UX for devs.
Also streamline manage_menu_item tool info, as FastMCP recommends
* docs: clarify menu item tool description with guidance to use list action first
* feat: add version update for server_version.txt in bump-version workflow
* fix: simplify error message for failed menu item execution
* CI: streamline Unity licensing (ULF/EBL); drop cache mounts & EBL-in-container; NL suite: clarify T-E/T-J, anchor positions, EOF brace targeting, SHA preconditions
* CI: support both ULF + EBL; validate ULF before -manualLicenseFile; robust readiness wait; use game-ci @v2 actions
* CI: activate EBL via container using UNITY_IMAGE; fix readiness regex grouping
* CI: minimal patch — guard manualLicenseFile by ulf.ok, expand error patterns, keep return-license @v2 for linter
* CI: harden ULF staging (printf+chmod); pass ULF_OK via env; use manual_args array for -manualLicenseFile
* CI: assert EBL activation writes entitlement to host mount; fail fast if missing
* CI: use heredoc in wait step to avoid nested-quote issues; remove redundant EBL artifact copy; drop job-level if and unused UNITY_VERSION
* CI: harden wait step (container status check, broader ready patterns, longer timeout); make license return non-blocking
* CI: wait step — confirm bridge readiness via status JSON (unity_port) + host socket probe
* CI: YAML-safe readiness fallback (grep/sed unity_port + bash TCP probe); workflow_dispatch trigger + ASCII step names
* CI: refine license error pattern to ignore benign LicensingClient channel startup; only match true activation/return failures
* Improve Unity bridge wait logic in CI workflow
- Increase timeout from 600s to 900s for Unity startup
- Add 'bound' to readiness pattern to catch more bridge signals
- Refine error detection to focus only on license failures
- Remove non-license error patterns that could cause false failures
- Improve error reporting with descriptive messages
- Fix regex escaping for unity port parsing
- Fix case sensitivity in sed commands
* Add comprehensive Unity workflow improvements
- Add project warm-up step to pre-import Library before bridge startup
- Expand license mounts to capture full Unity config and local-share directories
- Update bridge container to use expanded directory mounts instead of narrow license paths
- Provide ULF licenses in both legacy and standard local-share paths
- Improve EBL activation to capture complete Unity authentication context
- Update verification logic to check full config directories for entitlements
These changes eliminate cold import delays during bridge startup and provide
Unity with all necessary authentication data, reducing edge cases and improving
overall workflow reliability.
* Refine Unity workflow licensing and permissions
- Make EBL verification conditional on ULF presence to allow ULF-only runs
- Remove read-only mounts from warm-up container for Unity user directories
- Align secrets gate with actual licensing requirements (remove UNITY_SERIAL only)
- Keep return-license action at v2 (latest available version)
These changes prevent workflow failures when EBL has issues but ULF is valid,
allow Unity to write preferences during warm-up, and ensure secrets detection
matches the actual licensing logic used by the workflow steps.
* fix workflow YAML parse
* Normalize NL/T JUnit names and robust summary
* Fix Python import syntax in workflow debug step
* Improve prompt clarity for XML test fragment format
- Add detailed XML format requirements with exact specifications
- Emphasize NO prologue, epilogue, code fences, or extra characters
- Add specific instructions for T-D and T-J tests to write fragments immediately
- Include exact XML template and TESTID requirements
- Should fix T-D and T-J test failures in CI by ensuring proper fragment format
* Fix problematic regex substitution in test name canonicalization
- Replace unsafe regex substitution that could create malformed names
- New approach: preserve correctly formatted names, extract titles safely
- Prevents edge cases where double processing could corrupt test names
- Uses proper em dash (—) separator consistently
- More robust handling of various input formats
* CI: NL/T hardening — enforce filename-derived IDs, robust backfill, single-testcase guard; tighten prompt emissions; disallow Bash
* fix: keep file ID when canonicalizing test names
* CI: move Unity Pro license return to teardown after stopping Unity; keep placeholder at original site
* CI: remove revert helper & baseline snapshot; stop creating scripts dir; prompt: standardize T-B validation to level=standard
* CI: remove mini workflow and obsolete NL prompts; redact email in all Unity log dumps
* NL/T prompt: enforce allowed ops, require per-test fragment emission (incl. failures), add T-F..T-J XML templates
* NL suite: enforce strict NL-4 emission; remove brittle relabeling; keep canonicalization + backfill
* NL/T: minimize transcript; tighten NL-4 console reads; add final errors scan in T-J
* ci: add local validate-nlt-coverage helper
* CI: add staged report fragment promotion step (reports/_staging -> reports/) to support multi-edit reporting
* CI: add staged report fragment promotion step (reports/_staging -> reports/) to support multi-edit reporting
* CI: minor polish and guardrails; keep staged reports promotion and placeholder detection
* read_console: default count=50; normalize types str->list; tolerate legacy payload shapes
* read_console: harden response parsing for legacy shapes (data as list, tuple entries)
* Docs: refresh CI workflow and prompts (remove mini suite refs; per-test emissions, staging, guard)
* CI: move T coverage check after staged promotion; accept _staging as present; dedupe promotion step
* CI: make T retry conditional on explicit coverage probe (not failure()); respect _staging in probe
- Add nl-unity-suite-full-additive.md: new additive test design that builds state progressively instead of requiring resets
- Update claude-nl-suite.yml workflow to use additive test suite
- Fix validation scoping bugs in ManageScript.cs:
- Correct scoped validation scope calculation (was using newText.Length instead of originalLength)
- Enable always-on final structural validation regardless of relaxed mode
- Unify regex_replace and anchor_insert to use same smart matching logic in manage_script_edits.py
- Additive tests demonstrate better real-world workflow testing and expose interaction bugs between operations
- Self-healing capability: tools can recover from and fix broken file states
🤖 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