* 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.
* deps: add tomli>=2.3.0 dependency to UnityMcpServer package
* feat: dynamically fetch package version from pyproject.toml for telemetry
* Add pydantic
* feat: add resource registry for MCP resource auto-discovery
* feat: add telemetry decorator for tracking MCP resource usage
* feat: add auto-discovery and registration system for MCP resources
* feat: add resource registration to MCP server initialization
* feat: add MCPResponse model class for standardized API responses
* refactor: replace Debug.Log calls with McpLog wrapper for consistent logging
* feat: add test discovery endpoints for Unity Test Framework integration
We haven't connected them as yet, still thinking about how to do this neatly
* Fix server setup
* refactor: reduce log verbosity by changing individual resource/tool registration logs to debug level
* chore: bump mcp[cli] dependency from 1.15.0 to 1.17.0
* refactor: remove Context parameter and add uri keyword argument in resource decorator
The Context parameter doesn't work on our version of FastMCP
* chore: upgrade Python base image to 3.13 and simplify Dockerfile setup
* fix: apply telemetry decorator before mcp.tool to ensure proper wrapping order
* fix: swap order of telemetry and resource decorators to properly wrap handlers
* fix: update log prefixes for consistency in logging methods
* Fix compile errors
* feat: extend command registry to support both tools and resources
* Run get tests as a coroutine because it doesn't return results immediately
This works but it spams logs like crazy, maybe there's a better/simpler way
* refactor: migrate from coroutines to async/await for test retrieval and command execution
* feat: add optional error field to MCPResponse model
* Increased timeout because loading tests can take some time
* Make message optional so error responses that only have success and error don't cause Pydantic errors
* Set max_retries to 5
This connection module needs a lookover. The retries should be an exponential backoff and we could structure why it's failing so much
* Use pydantic model to structure the error output
* fix: initialize data field in GetTestsResponse to avoid potential errors
* Don't return path parameter
* feat: add Unity test runner execution with structured results and Python bindings
* refactor: simplify GetTests by removing mode filtering and related parsing logic
* refactor: move test runner functionality into dedicated service interface
* feat: add resource retrieval telemetry tracking with new record type and helper function
* fix: convert tool functions to async and await ctx.info calls
* refactor: reorganize menu item functionality into separate execute and get commands
An MCP resource for retrieval, and a simple command to execute. Because it's a resource, it's easier for the user to see what's in the menu items
* refactor: rename manage_menu_item to execute_menu_item and update tool examples to use async/await
We'll eventually put a section for resources
* Revert "fix: convert tool functions to async and await ctx.info calls"
This reverts commit 012ea6b7439bd1f2593864d98d03d9d95d7bdd03.
* fix: replace tomllib with tomli for Python 3.10 compatibility in telemetry module
* Remove confusing comment
* refactor: improve error handling and simplify test retrieval logic in GetTests commands
* No cache by default
* docs: remove redundant comment for HandleCommand method in ExecuteMenuItem
* 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.
The includeStacktrace parameter was working backwards - when false,
it would return the full message with embedded stack traces, and when
true, it would extract the stack trace but the logic was inverted.
Changes:
- Always extract the first line as the message text
- Only populate stackTrace field when includeStacktrace is true
- Ensures clean, summary-only messages when includeStacktrace is false
- Properly separates stack traces into their own field when requested
This matches the expected Unity console behavior where the summary
is shown by default, and stack traces are only shown when expanded.
* Add a decorate that wraps around the `mcp.tool` decorator.
This will allow us to more easily collect tools
* Register tools that's defined in the tools folder
* Update Python tools to use new decorator
* Convert script_apply_edits tool
* Convert last remaining tools with new decorator
* Create an attribute so we can identify tools via Reflection
* Add attribute to all C# tools
* Use reflection to load tools
* Initialize command registry to load tools at startup
* Update tests
* Move Dev docs to docs folder
* Add docs for adding custom tools
* Update function docs for Python decorator
* Add working example of adding a screenshot tool
* docs: update relative links in README files
Updated the relative links in both README-DEV.md and README-DEV-zh.md to use direct filenames instead of paths relative to the docs directory, improving link correctness when files are accessed from the root directory.
* docs: update telemetry documentation path reference
Updated the link to TELEMETRY.md in README.md to point to the new docs/ directory location to ensure users can access the telemetry documentation correctly. Also moved the TELEMETRY.md file to the docs/ directory as part of the documentation restructuring.
* rename CursorHelp.md to docs/CURSOR_HELP.md
Moved the CursorHelp.md file to the docs directory to better organize documentation files and improve project structure.
* docs: update CUSTOM_TOOLS.md with improved tool naming documentation and path corrections
- Clarified that the `name` argument in `@mcp_for_unity_tool` decorator is optional and defaults to the function name
- Added documentation about using all FastMCP `mcp.tool` function decorator options
- Updated class naming documentation to mention snake_case conversion by default
- Corrected Python file path from `tools/screenshot_tool.py` to `UnityMcpServer~/src/tools/screenshot_tool.py`
- Enhanced documentation for tool discovery and usage examples
* docs: restructure development documentation and add custom tools guide
Rearranged the development section in README.md to better organize the documentation flow. Added a dedicated section for "Adding Custom Tools" with a link to the new CUSTOM_TOOLS.md file, and renamed the previous "For Developers" section to "Contributing to the Project" to better reflect its content. This improves discoverability and organization of the development setup documentation.
* docs: update developer documentation and add README links
- Added links to developer READMEs in CUSTOM_TOOLS.md to guide users to the appropriate documentation
- Fixed typo in README-DEV.md ("roote" → "root") for improved clarity
- These changes improve the developer experience by providing better documentation navigation and correcting technical inaccuracies
* feat(tools): enhance tool registration with wrapped function assignment
Updated the tool registration process to properly chain the mcp.tool decorator and telemetry wrapper, ensuring the wrapped function is correctly assigned to tool_info['func'] for proper tool execution and telemetry tracking. This change improves the reliability of tool registration and monitoring.
* Remove AI generated code that was never used...
* feat: Rebuild MCP server installation with embedded source
Refactored the server repair logic to implement a full rebuild of the MCP server installation using the embedded source. The new RebuildMcpServer method now:
- Uses embedded server source instead of attempting repair of existing installation
- Deletes the entire existing server directory before re-copying
- Handles UV process cleanup for the target path
- Simplifies the installation flow by removing the complex Python environment repair logic
- Maintains the same installation behavior but with a cleaner, more reliable rebuild approach
This change improves reliability of server installations by ensuring a clean slate rebuild rather than attempting to repair potentially corrupted environments.
* Add the rebuild server step
* docs: clarify tool description field requirements and client compatibility
* fix: move initialization flag after tool discovery to prevent race conditions
* refactor: remove redundant TryParseVersion overrides in platform detectors
* refactor: remove duplicate UV validation code from platform detectors
* Update UnityMcpBridge/Editor/Tools/CommandRegistry.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* refactor: replace WriteToConfig reflection with direct McpConfigurationHelper call
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* feat: implement Unity Asset Store compliance with post-installation dependency setup
- Remove bundled Python dependencies from Unity package
- Add comprehensive 6-step setup wizard with auto-trigger on first import
- Implement cross-platform dependency detection (Windows, macOS, Linux)
- Add integrated MCP client configuration within setup process
- Create production-ready menu structure with clean UI/UX
- Ensure complete end-to-end setup requiring no additional configuration
- Add comprehensive error handling and recovery mechanisms
This implementation ensures Asset Store compliance while maintaining full
functionality through guided user setup. Users are left 100% ready to use
MCP after completing the setup wizard.
* refactor: improve Asset Store compliance implementation with production-ready setup
- Remove automatic installation attempts on package import
- Always show setup wizard on package install/reinstall
- Integrate MCP client configuration as part of setup wizard process
- Ensure MCP client config window remains accessible via menu
- Remove testing components for production readiness
- Replace automatic installation with manual guidance only
- Add complete 4-step setup flow: Welcome → Dependencies → Installation Guide → Client Configuration → Complete
- Improve user experience with clear instructions and accessible client management
* feat: add comprehensive dependency requirement warnings
- Add critical warnings throughout setup wizard that package cannot function without dependencies
- Update package.json description to clearly state manual dependency installation requirement
- Prevent setup completion if dependencies are missing
- Enhance skip setup warning to emphasize package will be non-functional
- Add error messages explaining consequences of missing dependencies
- Update menu item to indicate setup wizard is required
- Ensure users understand package is completely non-functional without proper dependency installation
* refactor: simplify setup wizard for production
BREAKING: Reduced setup wizard from 5 steps to 3 streamlined steps:
- Step 1: Setup (welcome + dependency check + installation guide)
- Step 2: Configure (client configuration with direct access to full settings)
- Step 3: Complete (final status and quick access to resources)
Simplifications:
- Consolidated UI components with DRY helper methods (DrawSectionTitle, DrawSuccessStatus, DrawErrorStatus)
- Simplified dependency status display with clean icons and essential info
- Removed complex state management - using simple EditorPrefs instead
- Removed unused InstallationOrchestrator and SetupState classes
- Streamlined client configuration to direct users to full settings window
- Simplified navigation with back/skip/next buttons
- Reduced code complexity while maintaining solid principles
Results:
- 40% less code while maintaining all functionality
- Cleaner, more intuitive user flow
- Faster setup process with fewer clicks
- Production-ready simplicity
- Easier maintenance and debugging
* fix: add missing using statement for DependencyCheckResult
Add missing 'using MCPForUnity.Editor.Dependencies.Models;' to resolve
DependencyCheckResult type reference in SetupWizard.cs
* refactor: optimize dependency checks and remove dead code
* fix: remove unused DrawInstallationProgressStep method
Removes leftover method that references deleted _isInstalling and _installationStatus fields, fixing compilation errors.
* feat: improve setup wizard UX and add real client configuration
1. Remove dependency mentions from package.json description
2. Only show dependency warnings when dependencies are actually missing
3. Add actual MCP client configuration functionality within the wizard:
- Client selection dropdown
- Individual client configuration
- Claude Code registration/unregistration
- Batch configuration for all clients
- Manual setup instructions
- Real configuration file writing
Users can now complete full setup including client configuration without leaving the wizard.
* refactor: improve menu text and client restart tip
- Remove '(Required)' from Setup Wizard menu item for cleaner appearance
- Update tip to reflect that most AI clients auto-detect configuration changes
* refactor: simplify client restart tip message
* fix: add missing using statement for MCPForUnityEditorWindow
Add 'using MCPForUnity.Editor.Windows;' to resolve unresolved symbol error for MCPForUnityEditorWindow in SetupWizard.cs
* Format code
* Remove unused folders
* Same for validators
* Same for Setup...
* feat: add setup wizard persistence to avoid showing on subsequent imports
* fix: update Python version check to support Python 4+ across all platform detectors
* refactor: extract common platform detection logic into PlatformDetectorBase class
* feat: add configuration helpers for MCP client setup with sophisticated path resolution
* fix: add missing override keyword to DetectPython method in platform detectors
* fix: update menu item labels for consistent capitalization and naming
* fix: standardize "MCP For Unity" capitalization in window titles and dialogs
* refactor: update package ID from justinpbarnett to coplaydev across codebase
* refactor: remove unused validation and configuration helper methods
* refactor: remove unused warnOnLegacyPackageId parameter from TryFindEmbeddedServerSource
---------
Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Marcus Sanatan <msanatan@gmail.com>
Adds a new 'get_component' action that retrieves a single component's
serialized data instead of all components, improving efficiency and
avoiding token limits when only specific component data is needed.
- Simplify validation to reject 'name' parameter whenever present for find action
- Remove ambiguity when both 'name' and 'search_term' are provided
- Update error message to clarify that 'name' should be removed
- Prevent silent failures when using 'name' instead of 'search_term' for find action
- Add clear error messages guiding users to correct parameter usage
- Validate that 'search_term' is only used with 'find' action
- Update parameter annotations to clarify when each parameter should be used
* refactor: migrate command routing to use CommandRegistry lookup instead of switch statement
* style: improve code formatting and indentation consistency
* refactor: clean up imports and type hints across tool modules
* Revert "feat: Implement Asset Store Compliance for Unity MCP Bridge"
This reverts commit 2fca7fc3da.
* Revert "feat(asset-store): implement post-installation prompt system for Asset Store compliance"
This reverts commit ab25a71bc5.
* chore: upgrade mcp[cli] dependency from 1.4.1 to 1.15.0
* style: fix formatting and whitespace in Python server files
* Remove description, probably a Python versionn change
* feat: add type hints and parameter descriptions to Unity MCP tools
* docs: improve shader management tool parameter descriptions and types
* refactor: add type annotations and improve documentation for script management tools
* refactor: improve type annotations and documentation in manage_scene tool
* refactor: add type annotations and improve parameter descriptions across MCP tools
* feat: add explicit name parameters to all MCP tool decorators
* refactor: remove unused Unity connection instance in manage_asset_tools
* chore: update type hints in manage_editor function parameters for better clarity
* feat: make name and path parameters optional for scene management operations
* refactor: remove unused get_unity_connection import from manage_asset.py
* chore: rename Operation parameter annotation to Operations for consistency
* feat: add logging to MCP clients for tool actions across MCP server components
* chore: add FastMCP type hint to register_all_tools parameter
* style: reformat docstring in apply_text_edits tool to use multiline string syntax
* refactor: update type hints from Dict/List/Tuple/Optional to modern Python syntax
* refactor: clean up imports and add type annotations to script editing tools
* refactor: update type hints to use | None syntax for optional parameters
* Minor fixes
* docs: improve tool descriptions with clearer action explanations
* refactor: remove legacy update action migration code from manage_script.py
* style: replace em dashes with regular hyphens in tool descriptions [skip ci]
* refactor: convert manage_script_capabilities docstring to multiline format [skip ci]
* Revert "feat: Implement Asset Store Compliance for Unity MCP Bridge"
This reverts commit 2fca7fc3da.
* Revert "feat(asset-store): implement post-installation prompt system for Asset Store compliance"
This reverts commit ab25a71bc5.
* 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
* feat: add Codex CLI client support with config.toml handling
* feat: add config helpers for managing Codex and MCP server configurations
* feat: add TOML array parsing support for multi-line and trailing comma formats
* fix: handle TOML inline comments in section headers during parsing
* fix: strip TOML comments before processing section headers
* fix: improve JSON parsing to handle escaped single quotes in config strings
* Use Tommy for TOML parsing
It's a single file and OSS, easy to integrate into Unity
* fix: patched Tommy’s literal-string handling so doubled single quotes inside literal strings are treated as embedded apostrophes instead of prematurely ending the value
* Don't overwrite MCP configs while testing
Seeing random JSON in my codex config was pretty annoying
* PR Feedback
* Keep Tommy compatible with Unity 2021
* Re-include Tommy's license
Probably a good habit to keep all 3rd party licenses and copyrights, even if they're also MIT licenses
Add comprehensive dependency detection system with cross-platform support:
- DependencyManager: Main orchestrator for dependency validation
- SetupWizard: Auto-trigger logic with InitializeOnLoad
- SetupWizardWindow: Complete EditorWindow implementation
- Platform detectors: Windows, macOS, Linux specific detection
- InstallationOrchestrator: Guided installation workflow
Asset Store compliance features:
- No bundled Python interpreter or UV package manager
- User-guided installation process with platform-specific instructions
- Clean package structure without large binary dependencies
- Fallback modes for incomplete installations
- Clear error messages with actionable guidance
Integration:
- Maintains backward compatibility with existing functionality
- Integrates with existing ServerInstaller and MCP infrastructure
- Adds menu items for manual setup wizard access and dependency checking
- Comprehensive error handling and user guidance
Current Windows command does not work on some machines such like mine. Copy and paste the command from Astral website to ensure the installation process go smoothly.