2025-10-13 23:16:43 +08:00
|
|
|
using System;
|
|
|
|
|
|
2025-10-11 15:08:16 +08:00
|
|
|
namespace MCPForUnity.Editor.Services
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Service locator for accessing MCP services without dependency injection
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static class MCPServiceLocator
|
|
|
|
|
{
|
|
|
|
|
private static IBridgeControlService _bridgeService;
|
|
|
|
|
private static IClientConfigurationService _clientService;
|
|
|
|
|
private static IPathResolverService _pathService;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
private static IPythonToolRegistryService _pythonToolRegistryService;
|
2025-10-13 23:16:43 +08:00
|
|
|
private static ITestRunnerService _testRunnerService;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
private static IToolSyncService _toolSyncService;
|
2025-10-11 15:08:16 +08:00
|
|
|
|
|
|
|
|
public static IBridgeControlService Bridge => _bridgeService ??= new BridgeControlService();
|
|
|
|
|
public static IClientConfigurationService Client => _clientService ??= new ClientConfigurationService();
|
|
|
|
|
public static IPathResolverService Paths => _pathService ??= new PathResolverService();
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
public static IPythonToolRegistryService PythonToolRegistry => _pythonToolRegistryService ??= new PythonToolRegistryService();
|
2025-10-13 23:16:43 +08:00
|
|
|
public static ITestRunnerService Tests => _testRunnerService ??= new TestRunnerService();
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
public static IToolSyncService ToolSync => _toolSyncService ??= new ToolSyncService();
|
2025-10-13 23:16:43 +08:00
|
|
|
|
2025-10-11 15:08:16 +08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Registers a custom implementation for a service (useful for testing)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="T">The service interface type</typeparam>
|
|
|
|
|
/// <param name="implementation">The implementation to register</param>
|
|
|
|
|
public static void Register<T>(T implementation) where T : class
|
|
|
|
|
{
|
|
|
|
|
if (implementation is IBridgeControlService b)
|
|
|
|
|
_bridgeService = b;
|
|
|
|
|
else if (implementation is IClientConfigurationService c)
|
|
|
|
|
_clientService = c;
|
|
|
|
|
else if (implementation is IPathResolverService p)
|
|
|
|
|
_pathService = p;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
else if (implementation is IPythonToolRegistryService ptr)
|
|
|
|
|
_pythonToolRegistryService = ptr;
|
2025-10-13 23:16:43 +08:00
|
|
|
else if (implementation is ITestRunnerService t)
|
|
|
|
|
_testRunnerService = t;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
else if (implementation is IToolSyncService ts)
|
|
|
|
|
_toolSyncService = ts;
|
2025-10-11 15:08:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Resets all services to their default implementations (useful for testing)
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void Reset()
|
|
|
|
|
{
|
2025-10-13 23:16:43 +08:00
|
|
|
(_bridgeService as IDisposable)?.Dispose();
|
|
|
|
|
(_clientService as IDisposable)?.Dispose();
|
|
|
|
|
(_pathService as IDisposable)?.Dispose();
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
(_pythonToolRegistryService as IDisposable)?.Dispose();
|
2025-10-13 23:16:43 +08:00
|
|
|
(_testRunnerService as IDisposable)?.Dispose();
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
(_toolSyncService as IDisposable)?.Dispose();
|
2025-10-13 23:16:43 +08:00
|
|
|
|
2025-10-11 15:08:16 +08:00
|
|
|
_bridgeService = null;
|
|
|
|
|
_clientService = null;
|
|
|
|
|
_pathService = null;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
_pythonToolRegistryService = null;
|
2025-10-13 23:16:43 +08:00
|
|
|
_testRunnerService = null;
|
Allow users to easily add tools in the Asset folder (#324)
* Fix issue #308: Find py files in MCPForUnityTools and version.txt
This allows for auto finding new tools. A good dir on a custom tool would look like this:
CustomTool/
├── CustomTool.MCPEnabler.asmdef
├── CustomTool.MCPEnabler.asmdef.meta
├── ExternalAssetToolFunction.cs
├── ExternalAssetToolFunction.cs.meta
├── external_asset_tool_function.py
├── external_asset_tool_function.py.meta
├── version.txt
└── version.txt.meta
CS files are left in the tools folder. The asmdef is recommended to allow for dependency on MCPForUnity when MCP For Unity is installed:
asmdef example
{
"name": "CustomTool.MCPEnabler",
"rootNamespace": "MCPForUnity.Editor.Tools",
"references": [
"CustomTool",
"MCPForUnity.Editor"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
* Follow-up: address CodeRabbit feedback for #308 (<GetToolsFolderIdentifier was duplicated>)
* Follow-up: address CodeRabbit feedback for #308 – centralize GetToolsFolderIdentifier, fix tools copy dir, and limit scan scope
* Fixing so the MCP don't removes _skipDirs e.g. __pycache__
* skip empty folders with no py files
* Rabbit: "Fix identifier collision between different package roots."
* Update MCPForUnity/Editor/Helpers/ServerInstaller.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Rabbbit: Cleanup may delete server’s built-in tool subfolders — restrict to managed names.
* Fixed minor + missed onadding rabit change
* Revert "Fixed minor + missed onadding rabit change"
This reverts commit 571ca8c5de3d07da3791dad558677909a07e886d.
* refactor: remove Unity project tools copying and version tracking functionality
* refactor: consolidate module discovery logic into shared utility function
* Remove unused imports
* feat: add Python tool registry and sync system for MCP server integration
* feat: add auto-sync processor for Python tools with Unity editor integration
* feat: add menu item to reimport all Python files in project
Good to give users a manual option
* Fix infinite loop error
Don't react to PythonToolAsset changes - it only needs to react to Python file changes.
And we also batch asset edits to minimise the DB refreshes
* refactor: move Python tool sync menu items under Window/MCP For Unity/Tool Sync
* Update docs
* Remove duplicate header
* feat: add OnValidate handler to sync Python tools when asset is modified
This fixes the issue with deletions in the asset, now file removals are synced
* test: add unit tests for Python tools asset and sync services
* Update MCPForUnity/Editor/Helpers/PythonToolSyncProcessor.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* style: remove trailing whitespace from Python tool sync files
* test: remove incomplete unit tests from ToolSyncServiceTests
* perf: optimize Python file reimport by using AssetDatabase.FindAssets instead of GetAllAssetPaths
---------
Co-authored-by: Johan Holtby <72528418+JohanHoltby@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-18 12:18:25 +08:00
|
|
|
_toolSyncService = null;
|
2025-10-11 15:08:16 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|