mcpforunityserver 10.0.2__tar.gz → 10.1.0__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.
- {mcpforunityserver-10.0.2/src/mcpforunityserver.egg-info → mcpforunityserver-10.1.0}/PKG-INFO +2 -2
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/README.md +1 -1
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/pyproject.toml +1 -1
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/asset_gen.py +44 -1
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0/src/mcpforunityserver.egg-info}/PKG-INFO +2 -2
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/SOURCES.txt +2 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/registry/tool_registry.py +1 -1
- mcpforunityserver-10.1.0/src/services/tools/generate_audio.py +79 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/generate_model.py +4 -1
- mcpforunityserver-10.1.0/tests/test_asset_gen_audio.py +145 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_asset_gen_model.py +10 -1
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/LICENSE +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/setup.cfg +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/animation.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/asset.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/audio.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/batch.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/build.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/camera.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/code.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/component.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/docs.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/editor.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/gameobject.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/graphics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/instance.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/lighting.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/material.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/packages.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/physics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/prefab.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/probuilder.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/profiler.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/reflect.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/scene.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/script.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/shader.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/texture.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/tool.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/ui.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/commands/vfx.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/main.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/config.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/confirmation.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/connection.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/constants.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/output.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/parsers.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/cli/utils/suggestions.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/config.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/constants.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/logging_decorator.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/telemetry.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/core/telemetry_decorator.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/main.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/dependency_links.txt +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/entry_points.txt +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/requires.txt +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/top_level.txt +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/models/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/models/models.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/models/unity_response.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/api_key_service.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/custom_tool_service.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/registry/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/registry/resource_registry.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/active_tool.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/cameras.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/custom_tools.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/editor_state.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/gameobject.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/layers.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/menu_items.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/prefab.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/prefab_stage.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/project_info.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/renderer_features.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/rendering_stats.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/selection.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/tags.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/tests.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/tool_groups.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/unity_instances.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/volumes.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/windows.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/state/external_changes_scanner.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/batch_execute.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/debug_request_context.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/execute_code.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/execute_custom_tool.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/execute_menu_item.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/find_gameobjects.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/find_in_file.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/generate_image.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/import_model.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/import_model_file.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_animation.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_asset.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_build.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_camera.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_components.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_editor.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_gameobject.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_graphics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_material.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_packages.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_physics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_prefabs.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_probuilder.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_profiler.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_scene.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_script.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_scriptable_object.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_shader.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_texture.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_tools.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_ui.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_vfx.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/preflight.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/read_console.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/refresh_unity.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/run_tests.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/script_apply_edits.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/set_active_instance.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/unity_docs.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/unity_reflect.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/utils.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/__init__.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/port_discovery.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/stdio_port_registry.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/unity_connection.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/models.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/plugin_hub.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/plugin_registry.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/unity_instance_middleware.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/unity_transport.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/utils/focus_nudge.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/utils/log_paths.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/utils/module_discovery.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_asset_gen_image.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_asset_gen_import.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_asset_gen_import_file.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_asset_gen_scaffold.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_cli.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_cli_commands_characterization.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_core_infrastructure_characterization.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_custom_tool_service_user_scope.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_execute_code.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_focus_nudge.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_log_paths.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_animation.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_build.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_camera.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_editor.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_graphics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_packages.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_physics.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_prefabs.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_probuilder.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_profiler.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_scene.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_manage_vfx_actions.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_models_characterization.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_param_normalizer.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_plugin_hub_wait_env.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_stdio_instance_resolution.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_tool_registry_metadata.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_tool_test_symmetry.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_transport_characterization.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_unity_docs.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_unity_reflect.py +0 -0
- {mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_utilities_characterization.py +0 -0
{mcpforunityserver-10.0.2/src/mcpforunityserver.egg-info → mcpforunityserver-10.1.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcpforunityserver
|
|
3
|
-
Version: 10.0
|
|
3
|
+
Version: 10.1.0
|
|
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
|
|
@@ -115,7 +115,7 @@ Use this to run the latest released version from the repository. Change the vers
|
|
|
115
115
|
"command": "uvx",
|
|
116
116
|
"args": [
|
|
117
117
|
"--from",
|
|
118
|
-
"git+https://github.com/CoplayDev/unity-mcp@v10.0
|
|
118
|
+
"git+https://github.com/CoplayDev/unity-mcp@v10.1.0#subdirectory=Server",
|
|
119
119
|
"mcp-for-unity",
|
|
120
120
|
"--transport",
|
|
121
121
|
"stdio"
|
|
@@ -71,7 +71,7 @@ Use this to run the latest released version from the repository. Change the vers
|
|
|
71
71
|
"command": "uvx",
|
|
72
72
|
"args": [
|
|
73
73
|
"--from",
|
|
74
|
-
"git+https://github.com/CoplayDev/unity-mcp@v10.0
|
|
74
|
+
"git+https://github.com/CoplayDev/unity-mcp@v10.1.0#subdirectory=Server",
|
|
75
75
|
"mcp-for-unity",
|
|
76
76
|
"--transport",
|
|
77
77
|
"stdio"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""AI asset generation CLI commands (3D model gen/import, 2D image gen).
|
|
1
|
+
"""AI asset generation CLI commands (3D model gen/import, 2D image gen, audio gen).
|
|
2
2
|
|
|
3
3
|
Thin pass-through to Unity over HTTP: these commands carry NO API keys and NO
|
|
4
4
|
file bytes. The C# side reads provider keys from the OS secure store, performs
|
|
@@ -38,6 +38,7 @@ def _emit(result, config, verb):
|
|
|
38
38
|
@click.option("--target-size", default=None, type=float, help="Normalize largest dimension (meters).")
|
|
39
39
|
@click.option("--texture/--no-texture", "texture", default=None, help="Generate textures.")
|
|
40
40
|
@click.option("--tier", default=None, help="Provider quality/cost tier.")
|
|
41
|
+
@click.option("--model", default=None, help="Provider model id/version (omit for the GUI-selected default).")
|
|
41
42
|
@click.option("--name", default=None, help="Base name for the imported asset.")
|
|
42
43
|
@click.option("--output-folder", default=None, help="Destination folder under Assets/.")
|
|
43
44
|
@handle_unity_errors
|
|
@@ -51,6 +52,7 @@ def generate_model(
|
|
|
51
52
|
target_size: Optional[float],
|
|
52
53
|
texture: Optional[bool],
|
|
53
54
|
tier: Optional[str],
|
|
55
|
+
model: Optional[str],
|
|
54
56
|
name: Optional[str],
|
|
55
57
|
output_folder: Optional[str],
|
|
56
58
|
):
|
|
@@ -74,6 +76,7 @@ def generate_model(
|
|
|
74
76
|
"targetSize": target_size,
|
|
75
77
|
"texture": texture,
|
|
76
78
|
"tier": tier,
|
|
79
|
+
"model": model,
|
|
77
80
|
"name": name,
|
|
78
81
|
"outputFolder": output_folder,
|
|
79
82
|
}
|
|
@@ -197,6 +200,46 @@ def generate_image(
|
|
|
197
200
|
_emit(result, config, "Generation")
|
|
198
201
|
|
|
199
202
|
|
|
203
|
+
@asset_gen.command("generate-audio")
|
|
204
|
+
@click.option("--provider", default=None, help="Provider id (fal).")
|
|
205
|
+
@click.option("--prompt", default=None, help="Text prompt describing the sound or music.")
|
|
206
|
+
@click.option("--model", default=None, help="fal model id (omit for the GUI-selected default).")
|
|
207
|
+
@click.option("--duration", default=None, type=float, help="Requested length in seconds (soft-clamped per model).")
|
|
208
|
+
@click.option("--name", default=None, help="Base name for the imported asset.")
|
|
209
|
+
@click.option("--output-folder", default=None, help="Destination folder under Assets/.")
|
|
210
|
+
@handle_unity_errors
|
|
211
|
+
def generate_audio(
|
|
212
|
+
provider: Optional[str],
|
|
213
|
+
prompt: Optional[str],
|
|
214
|
+
model: Optional[str],
|
|
215
|
+
duration: Optional[float],
|
|
216
|
+
name: Optional[str],
|
|
217
|
+
output_folder: Optional[str],
|
|
218
|
+
):
|
|
219
|
+
"""Generate audio (SFX / music) with a fal.ai model.
|
|
220
|
+
|
|
221
|
+
\b
|
|
222
|
+
Examples:
|
|
223
|
+
unity-mcp asset-gen generate-audio --provider fal --prompt "8-bit coin pickup"
|
|
224
|
+
unity-mcp asset-gen generate-audio --prompt "calm ambient loop" --duration 30
|
|
225
|
+
"""
|
|
226
|
+
config = get_config()
|
|
227
|
+
|
|
228
|
+
params: dict[str, Any] = {"action": "generate"}
|
|
229
|
+
optional = {
|
|
230
|
+
"provider": provider,
|
|
231
|
+
"prompt": prompt,
|
|
232
|
+
"model": model,
|
|
233
|
+
"duration": duration,
|
|
234
|
+
"name": name,
|
|
235
|
+
"outputFolder": output_folder,
|
|
236
|
+
}
|
|
237
|
+
params.update({k: v for k, v in optional.items() if v is not None})
|
|
238
|
+
|
|
239
|
+
result = run_command("generate_audio", params, config)
|
|
240
|
+
_emit(result, config, "Generation")
|
|
241
|
+
|
|
242
|
+
|
|
200
243
|
@asset_gen.command("status")
|
|
201
244
|
@click.option("--job-id", "job_id", required=True, help="Job id returned by a generate/import command.")
|
|
202
245
|
@handle_unity_errors
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0/src/mcpforunityserver.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcpforunityserver
|
|
3
|
-
Version: 10.0
|
|
3
|
+
Version: 10.1.0
|
|
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
|
|
@@ -115,7 +115,7 @@ Use this to run the latest released version from the repository. Change the vers
|
|
|
115
115
|
"command": "uvx",
|
|
116
116
|
"args": [
|
|
117
117
|
"--from",
|
|
118
|
-
"git+https://github.com/CoplayDev/unity-mcp@v10.0
|
|
118
|
+
"git+https://github.com/CoplayDev/unity-mcp@v10.1.0#subdirectory=Server",
|
|
119
119
|
"mcp-for-unity",
|
|
120
120
|
"--transport",
|
|
121
121
|
"stdio"
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/SOURCES.txt
RENAMED
|
@@ -92,6 +92,7 @@ src/services/tools/execute_custom_tool.py
|
|
|
92
92
|
src/services/tools/execute_menu_item.py
|
|
93
93
|
src/services/tools/find_gameobjects.py
|
|
94
94
|
src/services/tools/find_in_file.py
|
|
95
|
+
src/services/tools/generate_audio.py
|
|
95
96
|
src/services/tools/generate_image.py
|
|
96
97
|
src/services/tools/generate_model.py
|
|
97
98
|
src/services/tools/import_model.py
|
|
@@ -139,6 +140,7 @@ src/transport/legacy/unity_connection.py
|
|
|
139
140
|
src/utils/focus_nudge.py
|
|
140
141
|
src/utils/log_paths.py
|
|
141
142
|
src/utils/module_discovery.py
|
|
143
|
+
tests/test_asset_gen_audio.py
|
|
142
144
|
tests/test_asset_gen_image.py
|
|
143
145
|
tests/test_asset_gen_import.py
|
|
144
146
|
tests/test_asset_gen_import_file.py
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/registry/tool_registry.py
RENAMED
|
@@ -25,7 +25,7 @@ TOOL_GROUPS: dict[str, str] = {
|
|
|
25
25
|
"testing": "Test runner & async test jobs",
|
|
26
26
|
"probuilder": "ProBuilder 3D modeling – requires com.unity.probuilder package",
|
|
27
27
|
"profiling": "Unity Profiler session control, counters, memory snapshots & Frame Debugger",
|
|
28
|
-
"asset_gen": "AI asset generation – 3D model gen/import
|
|
28
|
+
"asset_gen": "AI asset generation – 3D model gen/import, 2D image gen & audio gen (bring-your-own-key)",
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
DEFAULT_ENABLED_GROUPS: set[str] = {"core"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines the generate_audio tool for AI audio (SFX / music) generation in Unity.
|
|
3
|
+
|
|
4
|
+
Thin pass-through: this tool carries NO API keys and NO file bytes. The C# side
|
|
5
|
+
reads the user's fal.ai key from the OS secure store, performs the provider
|
|
6
|
+
HTTPS call, downloads the result, and imports it as an AudioClip.
|
|
7
|
+
"""
|
|
8
|
+
from typing import Annotated, Any, Literal
|
|
9
|
+
|
|
10
|
+
from fastmcp import Context
|
|
11
|
+
from mcp.types import ToolAnnotations
|
|
12
|
+
|
|
13
|
+
from services.registry import mcp_for_unity_tool
|
|
14
|
+
from services.tools import get_unity_instance_from_context
|
|
15
|
+
from transport.unity_transport import send_with_unity_instance
|
|
16
|
+
from transport.legacy.unity_connection import async_send_command_with_retry
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@mcp_for_unity_tool(
|
|
20
|
+
group="asset_gen",
|
|
21
|
+
description=(
|
|
22
|
+
"Generate audio (sound effects and background music) with fal.ai models and import "
|
|
23
|
+
"them as AudioClips into the Unity project. Bring-your-own-key: the fal key lives in "
|
|
24
|
+
"the editor's secure store (shared with image generation) and never crosses the bridge.\n\n"
|
|
25
|
+
"MODELS (all via fal.ai): fal-ai/stable-audio-25/text-to-audio (music + SFX, <=190s), "
|
|
26
|
+
"cassetteai/sound-effects-generator (SFX, <=30s), cassetteai/music-generator (music), "
|
|
27
|
+
"fal-ai/lyria2 (music). Omit model to use the model selected in the "
|
|
28
|
+
"MCP for Unity -> Asset Generation tab.\n\n"
|
|
29
|
+
"ACTIONS:\n"
|
|
30
|
+
"- generate: Submit an audio job from a text prompt. Returns { job_id }; poll with the "
|
|
31
|
+
"status action. Params: provider (fal), prompt, model, duration (seconds), name, "
|
|
32
|
+
"output_folder.\n"
|
|
33
|
+
"- status: Poll an async job by job_id -> { state, progress, assetPath?, error? }.\n"
|
|
34
|
+
"- cancel: Cancel an in-flight job by job_id.\n"
|
|
35
|
+
"- list_providers: List configured audio providers and capabilities (no key values)."
|
|
36
|
+
),
|
|
37
|
+
annotations=ToolAnnotations(
|
|
38
|
+
title="Generate Audio",
|
|
39
|
+
destructiveHint=False,
|
|
40
|
+
),
|
|
41
|
+
)
|
|
42
|
+
async def generate_audio(
|
|
43
|
+
ctx: Context,
|
|
44
|
+
action: Annotated[Literal["generate", "status", "cancel", "list_providers"],
|
|
45
|
+
"Action to perform."],
|
|
46
|
+
|
|
47
|
+
provider: Annotated[str, "Provider id (fal)."] | None = None,
|
|
48
|
+
prompt: Annotated[str, "Text prompt describing the sound or music."] | None = None,
|
|
49
|
+
model: Annotated[str, "fal model id (e.g. fal-ai/stable-audio-25/text-to-audio). "
|
|
50
|
+
"Omit to use the GUI-selected default."] | None = None,
|
|
51
|
+
duration: Annotated[float, "Requested length in seconds (soft-clamped per model)."] | None = None,
|
|
52
|
+
name: Annotated[str, "Base name for the imported asset."] | None = None,
|
|
53
|
+
output_folder: Annotated[str, "Destination folder under Assets/ for the import."] | None = None,
|
|
54
|
+
job_id: Annotated[str, "Job id for status/cancel."] | None = None,
|
|
55
|
+
) -> dict[str, Any]:
|
|
56
|
+
unity_instance = await get_unity_instance_from_context(ctx)
|
|
57
|
+
|
|
58
|
+
params_dict = {
|
|
59
|
+
"action": action.lower(),
|
|
60
|
+
"provider": provider,
|
|
61
|
+
"prompt": prompt,
|
|
62
|
+
"model": model,
|
|
63
|
+
"duration": duration,
|
|
64
|
+
"name": name,
|
|
65
|
+
"outputFolder": output_folder,
|
|
66
|
+
"jobId": job_id,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# Remove None values
|
|
70
|
+
params_dict = {k: v for k, v in params_dict.items() if v is not None}
|
|
71
|
+
|
|
72
|
+
result = await send_with_unity_instance(
|
|
73
|
+
async_send_command_with_retry,
|
|
74
|
+
unity_instance,
|
|
75
|
+
"generate_audio",
|
|
76
|
+
params_dict,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return result if isinstance(result, dict) else {"success": False, "message": str(result)}
|
|
@@ -26,7 +26,7 @@ from transport.legacy.unity_connection import async_send_command_with_retry
|
|
|
26
26
|
"- generate: Submit a generation job (text->3D or image->3D). Returns { job_id } "
|
|
27
27
|
"immediately; poll with the status action. Params: provider, mode (text|image), "
|
|
28
28
|
"prompt, image_path|image_url, format (glb|fbx|obj|usdz), target_size, texture, "
|
|
29
|
-
"tier, name, output_folder.\n"
|
|
29
|
+
"tier, model, name, output_folder.\n"
|
|
30
30
|
"- status: Poll an async job by job_id -> { state, progress, assetPath?, error? }.\n"
|
|
31
31
|
"- cancel: Cancel an in-flight job by job_id.\n"
|
|
32
32
|
"- list_providers: List configured 3D providers and capabilities (no key values)."
|
|
@@ -50,6 +50,8 @@ async def generate_model(
|
|
|
50
50
|
target_size: Annotated[float, "Normalize the largest dimension to this size (meters)."] | None = None,
|
|
51
51
|
texture: Annotated[bool, "Whether to generate textures for the model."] | None = None,
|
|
52
52
|
tier: Annotated[str, "Provider quality/cost tier."] | None = None,
|
|
53
|
+
model: Annotated[str, "Provider model id/version (e.g. Tripo v3.1, Meshy meshy-6). "
|
|
54
|
+
"Omit for the GUI-selected default."] | None = None,
|
|
53
55
|
name: Annotated[str, "Base name for the imported asset."] | None = None,
|
|
54
56
|
output_folder: Annotated[str, "Destination folder under Assets/ for the import."] | None = None,
|
|
55
57
|
job_id: Annotated[str, "Job id for status/cancel."] | None = None,
|
|
@@ -67,6 +69,7 @@ async def generate_model(
|
|
|
67
69
|
"targetSize": target_size,
|
|
68
70
|
"texture": texture,
|
|
69
71
|
"tier": tier,
|
|
72
|
+
"model": model,
|
|
70
73
|
"name": name,
|
|
71
74
|
"outputFolder": output_folder,
|
|
72
75
|
"jobId": job_id,
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"""Tests for the generate_audio asset-gen tool and CLI command (fal.ai).
|
|
2
|
+
|
|
3
|
+
Pass-through tool: NO API keys, NO file bytes. Unity transport fully mocked.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import asyncio
|
|
7
|
+
import pytest
|
|
8
|
+
from unittest.mock import patch, MagicMock, AsyncMock
|
|
9
|
+
from click.testing import CliRunner
|
|
10
|
+
|
|
11
|
+
from cli.commands.asset_gen import asset_gen
|
|
12
|
+
from cli.utils.config import CLIConfig
|
|
13
|
+
from services.registry import get_registered_tools
|
|
14
|
+
|
|
15
|
+
from services.tools import generate_audio as generate_audio_module
|
|
16
|
+
from services.tools.generate_audio import generate_audio
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
COMMAND = "generate_audio"
|
|
20
|
+
ALLOWED_KEYS = {
|
|
21
|
+
"action", "provider", "prompt", "model", "duration", "name", "outputFolder", "jobId",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _call_tool(**kwargs):
|
|
26
|
+
ctx = MagicMock()
|
|
27
|
+
with patch.object(generate_audio_module, "get_unity_instance_from_context",
|
|
28
|
+
new=AsyncMock(return_value="unity-1")):
|
|
29
|
+
with patch.object(generate_audio_module, "send_with_unity_instance",
|
|
30
|
+
new=AsyncMock(return_value={"success": True, "data": {}})) as mock_send:
|
|
31
|
+
result = asyncio.run(generate_audio(ctx, **kwargs))
|
|
32
|
+
return result, mock_send.call_args.args
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _sent_command(sent_args):
|
|
36
|
+
return sent_args[2]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _sent_params(sent_args):
|
|
40
|
+
return sent_args[3]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@pytest.fixture
|
|
44
|
+
def runner():
|
|
45
|
+
return CliRunner()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@pytest.fixture
|
|
49
|
+
def mock_config():
|
|
50
|
+
return CLIConfig(host="127.0.0.1", port=8080, timeout=30, format="text", unity_instance=None)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@pytest.fixture
|
|
54
|
+
def cli_runner(runner, mock_config):
|
|
55
|
+
def _invoke(args):
|
|
56
|
+
with patch("cli.commands.asset_gen.get_config", return_value=mock_config):
|
|
57
|
+
with patch("cli.commands.asset_gen.run_command",
|
|
58
|
+
return_value={"success": True, "message": "OK", "data": {}}) as mock_run:
|
|
59
|
+
result = runner.invoke(asset_gen, args)
|
|
60
|
+
return result, mock_run
|
|
61
|
+
return _invoke
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class TestGenerateAudioRegistration:
|
|
65
|
+
def test_tool_registered_under_asset_gen_group(self):
|
|
66
|
+
tools = get_registered_tools()
|
|
67
|
+
tool = next((t for t in tools if t["name"] == "generate_audio"), None)
|
|
68
|
+
assert tool is not None
|
|
69
|
+
assert tool["group"] == "asset_gen"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class TestGenerateAudioRouting:
|
|
73
|
+
def test_generate_routes_to_command(self):
|
|
74
|
+
_, sent = _call_tool(action="generate", provider="fal", prompt="8-bit coin pickup")
|
|
75
|
+
assert _sent_command(sent) == COMMAND
|
|
76
|
+
assert _sent_params(sent)["action"] == "generate"
|
|
77
|
+
|
|
78
|
+
def test_status_and_job_id_mapping(self):
|
|
79
|
+
_, sent = _call_tool(action="status", job_id="j5")
|
|
80
|
+
assert _sent_params(sent) == {"action": "status", "jobId": "j5"}
|
|
81
|
+
|
|
82
|
+
def test_param_camelcase_mapping(self):
|
|
83
|
+
_, sent = _call_tool(
|
|
84
|
+
action="generate", provider="fal", prompt="rain", duration=30.0,
|
|
85
|
+
output_folder="Assets/Generated/Audio",
|
|
86
|
+
)
|
|
87
|
+
params = _sent_params(sent)
|
|
88
|
+
assert params["outputFolder"] == "Assets/Generated/Audio"
|
|
89
|
+
assert params["duration"] == 30.0
|
|
90
|
+
for snake in ("output_folder", "job_id"):
|
|
91
|
+
assert snake not in params
|
|
92
|
+
|
|
93
|
+
def test_action_is_lowercased(self):
|
|
94
|
+
_, sent = _call_tool(action="GENERATE", prompt="p")
|
|
95
|
+
assert _sent_params(sent)["action"] == "generate"
|
|
96
|
+
|
|
97
|
+
def test_omitting_model_drops_it(self):
|
|
98
|
+
# Load-bearing precondition for the GUI-selected default: an omitted model must NOT be
|
|
99
|
+
# sent, so the C# side falls back to the panel selection / catalog default.
|
|
100
|
+
_, sent = _call_tool(action="generate", provider="fal", prompt="p")
|
|
101
|
+
params = _sent_params(sent)
|
|
102
|
+
assert "model" not in params
|
|
103
|
+
assert params == {"action": "generate", "provider": "fal", "prompt": "p"}
|
|
104
|
+
|
|
105
|
+
def test_explicit_model_passes_through(self):
|
|
106
|
+
_, sent = _call_tool(action="generate", provider="fal", prompt="p",
|
|
107
|
+
model="cassetteai/sound-effects-generator")
|
|
108
|
+
assert _sent_params(sent)["model"] == "cassetteai/sound-effects-generator"
|
|
109
|
+
|
|
110
|
+
def test_no_secret_keys_in_payload(self):
|
|
111
|
+
_, sent = _call_tool(
|
|
112
|
+
action="generate", provider="fal", prompt="p",
|
|
113
|
+
model="fal-ai/stable-audio-25/text-to-audio", duration=12.5, name="Sfx",
|
|
114
|
+
output_folder="Assets/Generated/Audio", job_id="j",
|
|
115
|
+
)
|
|
116
|
+
params = _sent_params(sent)
|
|
117
|
+
assert set(params.keys()).issubset(ALLOWED_KEYS)
|
|
118
|
+
joined = " ".join(params.keys()).lower()
|
|
119
|
+
for forbidden in ("key", "secret", "token", "apikey", "password"):
|
|
120
|
+
assert forbidden not in joined
|
|
121
|
+
|
|
122
|
+
def test_non_dict_response_guarded(self):
|
|
123
|
+
ctx = MagicMock()
|
|
124
|
+
with patch.object(generate_audio_module, "get_unity_instance_from_context",
|
|
125
|
+
new=AsyncMock(return_value="u")):
|
|
126
|
+
with patch.object(generate_audio_module, "send_with_unity_instance",
|
|
127
|
+
new=AsyncMock(return_value=42)):
|
|
128
|
+
result = asyncio.run(generate_audio(ctx, action="status", job_id="j"))
|
|
129
|
+
assert result["success"] is False
|
|
130
|
+
assert "42" in result["message"]
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class TestGenerateAudioCLI:
|
|
134
|
+
def test_generate_audio_cli(self, cli_runner):
|
|
135
|
+
result, mock_run = cli_runner([
|
|
136
|
+
"generate-audio", "--provider", "fal", "--prompt", "ambient", "--duration", "30",
|
|
137
|
+
])
|
|
138
|
+
assert result.exit_code == 0
|
|
139
|
+
command = mock_run.call_args.args[0]
|
|
140
|
+
params = mock_run.call_args.args[1]
|
|
141
|
+
assert command == COMMAND
|
|
142
|
+
assert params["action"] == "generate"
|
|
143
|
+
assert params["provider"] == "fal"
|
|
144
|
+
assert params["duration"] == 30.0
|
|
145
|
+
assert set(params.keys()).issubset(ALLOWED_KEYS)
|
|
@@ -22,7 +22,7 @@ COMMAND = "generate_model"
|
|
|
22
22
|
# Every camelCase key the tool is allowed to send. Crucially, no key/secret param.
|
|
23
23
|
ALLOWED_KEYS = {
|
|
24
24
|
"action", "provider", "mode", "prompt", "imagePath", "imageUrl",
|
|
25
|
-
"format", "targetSize", "texture", "tier", "name", "outputFolder", "jobId",
|
|
25
|
+
"format", "targetSize", "texture", "tier", "model", "name", "outputFolder", "jobId",
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
|
|
@@ -130,6 +130,15 @@ class TestGenerateModelRouting:
|
|
|
130
130
|
for snake in ("image_path", "image_url", "target_size", "output_folder", "job_id"):
|
|
131
131
|
assert snake not in params
|
|
132
132
|
|
|
133
|
+
def test_model_param_passthrough(self):
|
|
134
|
+
_, sent = _call_tool(action="generate", provider="tripo", prompt="x", model="v3.1-20260211")
|
|
135
|
+
params = _sent_params(sent)
|
|
136
|
+
assert params["model"] == "v3.1-20260211"
|
|
137
|
+
|
|
138
|
+
def test_model_omitted_is_dropped(self):
|
|
139
|
+
_, sent = _call_tool(action="generate", provider="tripo", prompt="x")
|
|
140
|
+
assert "model" not in _sent_params(sent)
|
|
141
|
+
|
|
133
142
|
def test_none_values_stripped(self):
|
|
134
143
|
_, sent = _call_tool(action="generate", provider="tripo", prompt="x")
|
|
135
144
|
params = _sent_params(sent)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/requires.txt
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/mcpforunityserver.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/registry/resource_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/custom_tools.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/editor_state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/prefab_stage.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/project_info.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/renderer_features.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/rendering_stats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/resources/unity_instances.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/state/external_changes_scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/debug_request_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/execute_custom_tool.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/execute_menu_item.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/find_gameobjects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/import_model_file.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_animation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_components.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_gameobject.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_probuilder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/manage_scriptable_object.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/script_apply_edits.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/services/tools/set_active_instance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/port_discovery.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/stdio_port_registry.py
RENAMED
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/legacy/unity_connection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/src/transport/unity_instance_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_cli_commands_characterization.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_custom_tool_service_user_scope.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_stdio_instance_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_transport_characterization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcpforunityserver-10.0.2 → mcpforunityserver-10.1.0}/tests/test_utilities_characterization.py
RENAMED
|
File without changes
|