mcpforunityserver 9.3.0b20260129104751__tar.gz → 9.3.0b20260129121506__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/PKG-INFO +1 -1
  2. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/pyproject.toml +1 -1
  3. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/PKG-INFO +1 -1
  4. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_prefabs.py +35 -0
  5. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/LICENSE +0 -0
  6. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/README.md +0 -0
  7. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/setup.cfg +0 -0
  8. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/__init__.py +0 -0
  9. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/__init__.py +0 -0
  10. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/animation.py +0 -0
  11. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/asset.py +0 -0
  12. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/audio.py +0 -0
  13. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/batch.py +0 -0
  14. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/code.py +0 -0
  15. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/component.py +0 -0
  16. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/editor.py +0 -0
  17. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/gameobject.py +0 -0
  18. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/instance.py +0 -0
  19. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/lighting.py +0 -0
  20. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/material.py +0 -0
  21. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/prefab.py +0 -0
  22. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/scene.py +0 -0
  23. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/script.py +0 -0
  24. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/shader.py +0 -0
  25. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/texture.py +0 -0
  26. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/tool.py +0 -0
  27. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/ui.py +0 -0
  28. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/commands/vfx.py +0 -0
  29. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/main.py +0 -0
  30. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/__init__.py +0 -0
  31. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/config.py +0 -0
  32. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/confirmation.py +0 -0
  33. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/connection.py +0 -0
  34. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/constants.py +0 -0
  35. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/output.py +0 -0
  36. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/parsers.py +0 -0
  37. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/cli/utils/suggestions.py +0 -0
  38. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/core/__init__.py +0 -0
  39. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/core/config.py +0 -0
  40. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/core/logging_decorator.py +0 -0
  41. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/core/telemetry.py +0 -0
  42. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/core/telemetry_decorator.py +0 -0
  43. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/main.py +0 -0
  44. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/SOURCES.txt +0 -0
  45. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/dependency_links.txt +0 -0
  46. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/entry_points.txt +0 -0
  47. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/requires.txt +0 -0
  48. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/mcpforunityserver.egg-info/top_level.txt +0 -0
  49. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/models/__init__.py +0 -0
  50. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/models/models.py +0 -0
  51. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/models/unity_response.py +0 -0
  52. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/__init__.py +0 -0
  53. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/custom_tool_service.py +0 -0
  54. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/registry/__init__.py +0 -0
  55. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/registry/resource_registry.py +0 -0
  56. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/registry/tool_registry.py +0 -0
  57. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/__init__.py +0 -0
  58. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/active_tool.py +0 -0
  59. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/custom_tools.py +0 -0
  60. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/editor_state.py +0 -0
  61. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/gameobject.py +0 -0
  62. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/layers.py +0 -0
  63. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/menu_items.py +0 -0
  64. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/prefab.py +0 -0
  65. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/prefab_stage.py +0 -0
  66. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/project_info.py +0 -0
  67. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/selection.py +0 -0
  68. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/tags.py +0 -0
  69. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/tests.py +0 -0
  70. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/unity_instances.py +0 -0
  71. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/resources/windows.py +0 -0
  72. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/state/external_changes_scanner.py +0 -0
  73. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/__init__.py +0 -0
  74. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/batch_execute.py +0 -0
  75. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/debug_request_context.py +0 -0
  76. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/execute_custom_tool.py +0 -0
  77. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/execute_menu_item.py +0 -0
  78. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/find_gameobjects.py +0 -0
  79. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/find_in_file.py +0 -0
  80. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_asset.py +0 -0
  81. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_components.py +0 -0
  82. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_editor.py +0 -0
  83. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_gameobject.py +0 -0
  84. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_material.py +0 -0
  85. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_scene.py +0 -0
  86. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_script.py +0 -0
  87. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_scriptable_object.py +0 -0
  88. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_shader.py +0 -0
  89. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_texture.py +0 -0
  90. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/manage_vfx.py +0 -0
  91. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/preflight.py +0 -0
  92. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/read_console.py +0 -0
  93. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/refresh_unity.py +0 -0
  94. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/run_tests.py +0 -0
  95. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/script_apply_edits.py +0 -0
  96. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/set_active_instance.py +0 -0
  97. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/services/tools/utils.py +0 -0
  98. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/__init__.py +0 -0
  99. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/legacy/port_discovery.py +0 -0
  100. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/legacy/stdio_port_registry.py +0 -0
  101. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/legacy/unity_connection.py +0 -0
  102. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/models.py +0 -0
  103. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/plugin_hub.py +0 -0
  104. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/plugin_registry.py +0 -0
  105. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/unity_instance_middleware.py +0 -0
  106. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/transport/unity_transport.py +0 -0
  107. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/utils/focus_nudge.py +0 -0
  108. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/src/utils/module_discovery.py +0 -0
  109. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_cli.py +0 -0
  110. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_cli_commands_characterization.py +0 -0
  111. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_core_infrastructure_characterization.py +0 -0
  112. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_models_characterization.py +0 -0
  113. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_param_normalizer.py +0 -0
  114. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_transport_characterization.py +0 -0
  115. {mcpforunityserver-9.3.0b20260129104751 → mcpforunityserver-9.3.0b20260129121506}/tests/test_utilities_characterization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcpforunityserver
3
- Version: 9.3.0b20260129104751
3
+ Version: 9.3.0b20260129121506
4
4
  Summary: MCP for Unity Server: A Unity package for Unity Editor integration via the Model Context Protocol (MCP).
5
5
  Author-email: Marcus Sanatan <msanatan@gmail.com>, David Sarno <david.sarno@gmail.com>, Wu Shutong <martinwfire@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mcpforunityserver"
3
- version = "9.3.0b20260129104751"
3
+ version = "9.3.0b20260129121506"
4
4
  description = "MCP for Unity Server: A Unity package for Unity Editor integration via the Model Context Protocol (MCP)."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcpforunityserver
3
- Version: 9.3.0b20260129104751
3
+ Version: 9.3.0b20260129121506
4
4
  Summary: MCP for Unity Server: A Unity package for Unity Editor integration via the Model Context Protocol (MCP).
5
5
  Author-email: Marcus Sanatan <msanatan@gmail.com>, David Sarno <david.sarno@gmail.com>, Wu Shutong <martinwfire@gmail.com>
6
6
  License-Expression: MIT
@@ -25,6 +25,10 @@ REQUIRED_PARAMS = {
25
25
  "Manages Unity Prefab assets via headless operations (no UI, no prefab stages). "
26
26
  "Actions: get_info, get_hierarchy, create_from_gameobject, modify_contents. "
27
27
  "Use modify_contents for headless prefab editing - ideal for automated workflows. "
28
+ "Use create_child parameter with modify_contents to add child GameObjects to a prefab "
29
+ "(single object or array for batch creation in one save). "
30
+ "Example: create_child=[{\"name\": \"Child1\", \"primitive_type\": \"Sphere\", \"position\": [1,0,0]}, "
31
+ "{\"name\": \"Child2\", \"primitive_type\": \"Cube\", \"parent\": \"Child1\"}]. "
28
32
  "Use manage_asset action=search filterType=Prefab to list prefabs."
29
33
  ),
30
34
  annotations=ToolAnnotations(
@@ -59,6 +63,7 @@ async def manage_prefabs(
59
63
  parent: Annotated[str, "New parent object name/path within prefab for modify_contents."] | None = None,
60
64
  components_to_add: Annotated[list[str], "Component types to add in modify_contents."] | None = None,
61
65
  components_to_remove: Annotated[list[str], "Component types to remove in modify_contents."] | None = None,
66
+ create_child: Annotated[dict[str, Any] | list[dict[str, Any]], "Create child GameObject(s) in the prefab. Single object or array of objects, each with: name (required), parent (optional, defaults to target), primitive_type (optional: Cube, Sphere, Capsule, Cylinder, Plane, Quad), position, rotation, scale, components_to_add, tag, layer, set_active."] | None = None,
62
67
  ) -> dict[str, Any]:
63
68
  # Back-compat: map 'name' → 'target' for create_from_gameobject (Unity accepts both)
64
69
  if action == "create_from_gameobject" and target is None and name is not None:
@@ -143,6 +148,36 @@ async def manage_prefabs(
143
148
  params["componentsToAdd"] = components_to_add
144
149
  if components_to_remove is not None:
145
150
  params["componentsToRemove"] = components_to_remove
151
+ if create_child is not None:
152
+ # Normalize vector fields within create_child (handles single object or array)
153
+ def normalize_child_params(child: Any, index: int | None = None) -> tuple[dict | None, str | None]:
154
+ prefix = f"create_child[{index}]" if index is not None else "create_child"
155
+ if not isinstance(child, dict):
156
+ return None, f"{prefix} must be a dict with child properties (name, primitive_type, position, etc.), got {type(child).__name__}"
157
+ child_params = dict(child)
158
+ for vec_field in ("position", "rotation", "scale"):
159
+ if vec_field in child_params and child_params[vec_field] is not None:
160
+ vec_val, vec_err = normalize_vector3(child_params[vec_field], f"{prefix}.{vec_field}")
161
+ if vec_err:
162
+ return None, vec_err
163
+ child_params[vec_field] = vec_val
164
+ return child_params, None
165
+
166
+ if isinstance(create_child, list):
167
+ # Array of children
168
+ normalized_children = []
169
+ for i, child in enumerate(create_child):
170
+ child_params, err = normalize_child_params(child, i)
171
+ if err:
172
+ return {"success": False, "message": err}
173
+ normalized_children.append(child_params)
174
+ params["createChild"] = normalized_children
175
+ else:
176
+ # Single child object
177
+ child_params, err = normalize_child_params(create_child)
178
+ if err:
179
+ return {"success": False, "message": err}
180
+ params["createChild"] = child_params
146
181
 
147
182
  # Send command to Unity
148
183
  response = await send_with_unity_instance(