hatch-xclam 0.7.0.dev13__tar.gz → 0.7.1.dev1__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 (107) hide show
  1. {hatch_xclam-0.7.0.dev13/hatch_xclam.egg-info → hatch_xclam-0.7.1.dev1}/PKG-INFO +4 -3
  2. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/README.md +3 -2
  3. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/cli_hatch.py +31 -0
  4. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/__init__.py +2 -2
  5. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/backup.py +1 -1
  6. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/models.py +32 -1
  7. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/strategies.py +96 -0
  8. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1/hatch_xclam.egg-info}/PKG-INFO +4 -3
  9. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch_xclam.egg-info/SOURCES.txt +18 -0
  10. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch_xclam.egg-info/top_level.txt +0 -1
  11. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/pyproject.toml +1 -1
  12. hatch_xclam-0.7.1.dev1/tests/integration/__init__.py +5 -0
  13. hatch_xclam-0.7.1.dev1/tests/integration/test_mcp_kiro_integration.py +153 -0
  14. hatch_xclam-0.7.1.dev1/tests/regression/__init__.py +5 -0
  15. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_backup_integration.py +241 -0
  16. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_cli_integration.py +141 -0
  17. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_decorator_registration.py +71 -0
  18. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_host_strategy.py +214 -0
  19. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_model_validation.py +116 -0
  20. hatch_xclam-0.7.1.dev1/tests/regression/test_mcp_kiro_omni_conversion.py +104 -0
  21. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data_utils.py +108 -0
  22. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/LICENSE +0 -0
  23. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/__init__.py +0 -0
  24. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/environment_manager.py +0 -0
  25. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/__init__.py +0 -0
  26. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/dependency_installation_orchestrator.py +0 -0
  27. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/docker_installer.py +0 -0
  28. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/hatch_installer.py +0 -0
  29. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/installation_context.py +0 -0
  30. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/installer_base.py +0 -0
  31. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/python_installer.py +0 -0
  32. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/registry.py +0 -0
  33. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/installers/system_installer.py +0 -0
  34. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/host_management.py +0 -0
  35. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/mcp_host_config/reporting.py +0 -0
  36. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/package_loader.py +0 -0
  37. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/python_environment_manager.py +0 -0
  38. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/registry_explorer.py +0 -0
  39. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/registry_retriever.py +0 -0
  40. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch/template_generator.py +0 -0
  41. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch_xclam.egg-info/dependency_links.txt +0 -0
  42. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch_xclam.egg-info/entry_points.txt +0 -0
  43. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/hatch_xclam.egg-info/requires.txt +0 -0
  44. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/setup.cfg +0 -0
  45. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/__init__.py +0 -0
  46. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/run_environment_tests.py +0 -0
  47. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_cli_version.py +0 -0
  48. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/base_pkg/hatch_mcp_server.py +0 -0
  49. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/base_pkg/mcp_server.py +0 -0
  50. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/base_pkg_v2/hatch_mcp_server.py +0 -0
  51. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/base_pkg_v2/mcp_server.py +0 -0
  52. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/utility_pkg/hatch_mcp_server.py +0 -0
  53. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/basic/utility_pkg/mcp_server.py +0 -0
  54. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/complex_dep_pkg/hatch_mcp_server.py +0 -0
  55. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/complex_dep_pkg/mcp_server.py +0 -0
  56. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/docker_dep_pkg/hatch_mcp_server.py +0 -0
  57. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/docker_dep_pkg/mcp_server.py +0 -0
  58. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/mixed_dep_pkg/hatch_mcp_server.py +0 -0
  59. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/mixed_dep_pkg/mcp_server.py +0 -0
  60. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/python_dep_pkg/hatch_mcp_server.py +0 -0
  61. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/python_dep_pkg/mcp_server.py +0 -0
  62. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/simple_dep_pkg/hatch_mcp_server.py +0 -0
  63. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/simple_dep_pkg/mcp_server.py +0 -0
  64. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/system_dep_pkg/hatch_mcp_server.py +0 -0
  65. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/dependencies/system_dep_pkg/mcp_server.py +0 -0
  66. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/circular_dep_pkg/hatch_mcp_server.py +0 -0
  67. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/circular_dep_pkg/mcp_server.py +0 -0
  68. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/circular_dep_pkg_b/hatch_mcp_server.py +0 -0
  69. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/circular_dep_pkg_b/mcp_server.py +0 -0
  70. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/invalid_dep_pkg/hatch_mcp_server.py +0 -0
  71. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/invalid_dep_pkg/mcp_server.py +0 -0
  72. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/version_conflict_pkg/hatch_mcp_server.py +0 -0
  73. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/error_scenarios/version_conflict_pkg/mcp_server.py +0 -0
  74. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/schema_versions/schema_v1_1_0_pkg/main.py +0 -0
  75. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/schema_versions/schema_v1_2_0_pkg/main.py +0 -0
  76. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/hatch_mcp_server.py +0 -0
  77. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_data/packages/schema_versions/schema_v1_2_1_pkg/mcp_server.py +0 -0
  78. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_dependency_orchestrator_consent.py +0 -0
  79. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_docker_installer.py +0 -0
  80. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_env_manip.py +0 -0
  81. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_hatch_installer.py +0 -0
  82. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_installer_base.py +0 -0
  83. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_atomic_operations.py +0 -0
  84. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_backup_integration.py +0 -0
  85. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_all_host_specific_args.py +0 -0
  86. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_backup_management.py +0 -0
  87. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_direct_management.py +0 -0
  88. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_discovery_listing.py +0 -0
  89. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_host_config_integration.py +0 -0
  90. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_package_management.py +0 -0
  91. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_cli_partial_updates.py +0 -0
  92. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_environment_integration.py +0 -0
  93. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_host_config_backup.py +0 -0
  94. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_host_configuration_manager.py +0 -0
  95. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_host_registry_decorator.py +0 -0
  96. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_pydantic_architecture_v4.py +0 -0
  97. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_server_config_models.py +0 -0
  98. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_server_config_type_field.py +0 -0
  99. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_sync_functionality.py +0 -0
  100. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_mcp_user_feedback_reporting.py +0 -0
  101. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_non_tty_integration.py +0 -0
  102. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_online_package_loader.py +0 -0
  103. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_python_environment_manager.py +0 -0
  104. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_python_installer.py +0 -0
  105. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_registry.py +0 -0
  106. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_registry_retriever.py +0 -0
  107. {hatch_xclam-0.7.0.dev13 → hatch_xclam-0.7.1.dev1}/tests/test_system_installer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hatch-xclam
3
- Version: 0.7.0.dev13
3
+ Version: 0.7.1.dev1
4
4
  Summary: Package manager for the Cracking Shells ecosystem
5
5
  Author: Cracking Shells Team
6
6
  Project-URL: Homepage, https://github.com/CrackingShells/Hatch
@@ -30,7 +30,7 @@ Dynamic: license-file
30
30
 
31
31
  ## Introduction
32
32
 
33
- Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, and other platforms with automatic dependency management.
33
+ Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, Kiro, and other platforms with automatic dependency management.
34
34
 
35
35
  The canonical documentation is at `docs/index.md` and published at <https://hatch.readthedocs.io/en/latest/>.
36
36
 
@@ -38,7 +38,7 @@ The canonical documentation is at `docs/index.md` and published at <https://hatc
38
38
 
39
39
  - **Environment Isolation** — Create separate, isolated workspaces for different projects without conflicts
40
40
  - **Multi-Type Dependency Resolution** — Automatically resolve and install system packages, Python packages, Docker containers, and Hatch packages
41
- - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, LM Studio, and Google Gemini CLI
41
+ - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, Kiro, LM Studio, and Google Gemini CLI
42
42
  - **Package Validation** — Ensure packages meet schema requirements before distribution
43
43
  - **Development-Focused** — Optimized for rapid development and testing of MCP server ecosystems
44
44
 
@@ -50,6 +50,7 @@ Hatch supports deployment to the following MCP host platforms:
50
50
  - **Claude Code** — Claude integration for VS Code with MCP capabilities
51
51
  - **VS Code** — Visual Studio Code with the MCP extension for tool integration
52
52
  - **Cursor** — AI-first code editor with built-in MCP server support
53
+ - **Kiro** — Kiro IDE with MCP support
53
54
  - **LM Studio** — Local LLM inference platform with MCP server integration
54
55
  - **Google Gemini CLI** — Command-line interface for Google's Gemini model with MCP support
55
56
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Introduction
6
6
 
7
- Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, and other platforms with automatic dependency management.
7
+ Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, Kiro, and other platforms with automatic dependency management.
8
8
 
9
9
  The canonical documentation is at `docs/index.md` and published at <https://hatch.readthedocs.io/en/latest/>.
10
10
 
@@ -12,7 +12,7 @@ The canonical documentation is at `docs/index.md` and published at <https://hatc
12
12
 
13
13
  - **Environment Isolation** — Create separate, isolated workspaces for different projects without conflicts
14
14
  - **Multi-Type Dependency Resolution** — Automatically resolve and install system packages, Python packages, Docker containers, and Hatch packages
15
- - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, LM Studio, and Google Gemini CLI
15
+ - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, Kiro, LM Studio, and Google Gemini CLI
16
16
  - **Package Validation** — Ensure packages meet schema requirements before distribution
17
17
  - **Development-Focused** — Optimized for rapid development and testing of MCP server ecosystems
18
18
 
@@ -24,6 +24,7 @@ Hatch supports deployment to the following MCP host platforms:
24
24
  - **Claude Code** — Claude integration for VS Code with MCP capabilities
25
25
  - **VS Code** — Visual Studio Code with the MCP extension for tool integration
26
26
  - **Cursor** — AI-first code editor with built-in MCP server support
27
+ - **Kiro** — Kiro IDE with MCP support
27
28
  - **LM Studio** — Local LLM inference platform with MCP server integration
28
29
  - **Google Gemini CLI** — Command-line interface for Google's Gemini model with MCP support
29
30
 
@@ -713,6 +713,9 @@ def handle_mcp_configure(
713
713
  include_tools: Optional[list] = None,
714
714
  exclude_tools: Optional[list] = None,
715
715
  input: Optional[list] = None,
716
+ disabled: Optional[bool] = None,
717
+ auto_approve_tools: Optional[list] = None,
718
+ disable_tools: Optional[list] = None,
716
719
  no_backup: bool = False,
717
720
  dry_run: bool = False,
718
721
  auto_approve: bool = False,
@@ -826,6 +829,14 @@ def handle_mcp_configure(
826
829
  if inputs_list is not None:
827
830
  omni_config_data["inputs"] = inputs_list
828
831
 
832
+ # Host-specific fields (Kiro)
833
+ if disabled is not None:
834
+ omni_config_data["disabled"] = disabled
835
+ if auto_approve_tools is not None:
836
+ omni_config_data["autoApprove"] = auto_approve_tools
837
+ if disable_tools is not None:
838
+ omni_config_data["disabledTools"] = disable_tools
839
+
829
840
  # Partial update merge logic
830
841
  if is_update:
831
842
  # Merge with existing configuration
@@ -1625,6 +1636,23 @@ def main():
1625
1636
  help="Input variable definitions in format: type,id,description[,password=true] (VS Code)",
1626
1637
  )
1627
1638
 
1639
+ # Host-specific arguments (Kiro)
1640
+ mcp_configure_parser.add_argument(
1641
+ "--disabled",
1642
+ action="store_true",
1643
+ help="Disable the MCP server (Kiro)"
1644
+ )
1645
+ mcp_configure_parser.add_argument(
1646
+ "--auto-approve-tools",
1647
+ action="append",
1648
+ help="Tool names to auto-approve without prompting (Kiro)"
1649
+ )
1650
+ mcp_configure_parser.add_argument(
1651
+ "--disable-tools",
1652
+ action="append",
1653
+ help="Tool names to disable (Kiro)"
1654
+ )
1655
+
1628
1656
  mcp_configure_parser.add_argument(
1629
1657
  "--no-backup",
1630
1658
  action="store_true",
@@ -2693,6 +2721,9 @@ def main():
2693
2721
  getattr(args, "include_tools", None),
2694
2722
  getattr(args, "exclude_tools", None),
2695
2723
  getattr(args, "input", None),
2724
+ getattr(args, "disabled", None),
2725
+ getattr(args, "auto_approve_tools", None),
2726
+ getattr(args, "disable_tools", None),
2696
2727
  args.no_backup,
2697
2728
  args.dry_run,
2698
2729
  args.auto_approve,
@@ -11,7 +11,7 @@ from .models import (
11
11
  PackageHostConfiguration, EnvironmentPackageEntry, ConfigurationResult, SyncResult,
12
12
  # Host-specific configuration models
13
13
  MCPServerConfigBase, MCPServerConfigGemini, MCPServerConfigVSCode,
14
- MCPServerConfigCursor, MCPServerConfigClaude, MCPServerConfigOmni,
14
+ MCPServerConfigCursor, MCPServerConfigClaude, MCPServerConfigKiro, MCPServerConfigOmni,
15
15
  HOST_MODEL_REGISTRY
16
16
  )
17
17
  from .host_management import (
@@ -30,7 +30,7 @@ __all__ = [
30
30
  'PackageHostConfiguration', 'EnvironmentPackageEntry', 'ConfigurationResult', 'SyncResult',
31
31
  # Host-specific configuration models
32
32
  'MCPServerConfigBase', 'MCPServerConfigGemini', 'MCPServerConfigVSCode',
33
- 'MCPServerConfigCursor', 'MCPServerConfigClaude', 'MCPServerConfigOmni',
33
+ 'MCPServerConfigCursor', 'MCPServerConfigClaude', 'MCPServerConfigKiro', 'MCPServerConfigOmni',
34
34
  'HOST_MODEL_REGISTRY',
35
35
  # User feedback reporting
36
36
  'FieldOperation', 'ConversionReport', 'generate_conversion_report', 'display_report',
@@ -37,7 +37,7 @@ class BackupInfo(BaseModel):
37
37
  """Validate hostname is supported."""
38
38
  supported_hosts = {
39
39
  'claude-desktop', 'claude-code', 'vscode',
40
- 'cursor', 'lmstudio', 'gemini'
40
+ 'cursor', 'lmstudio', 'gemini', 'kiro'
41
41
  }
42
42
  if v not in supported_hosts:
43
43
  raise ValueError(f"Unsupported hostname: {v}. Supported: {supported_hosts}")
@@ -24,6 +24,7 @@ class MCPHostType(str, Enum):
24
24
  CURSOR = "cursor"
25
25
  LMSTUDIO = "lmstudio"
26
26
  GEMINI = "gemini"
27
+ KIRO = "kiro"
27
28
 
28
29
 
29
30
  class MCPServerConfig(BaseModel):
@@ -192,7 +193,7 @@ class EnvironmentPackageEntry(BaseModel):
192
193
  """Validate host names are supported."""
193
194
  supported_hosts = {
194
195
  'claude-desktop', 'claude-code', 'vscode',
195
- 'cursor', 'lmstudio', 'gemini'
196
+ 'cursor', 'lmstudio', 'gemini', 'kiro'
196
197
  }
197
198
  for host_name in v.keys():
198
199
  if host_name not in supported_hosts:
@@ -538,6 +539,30 @@ class MCPServerConfigClaude(MCPServerConfigBase):
538
539
  return cls.model_validate(claude_data)
539
540
 
540
541
 
542
+ class MCPServerConfigKiro(MCPServerConfigBase):
543
+ """Kiro IDE-specific MCP server configuration.
544
+
545
+ Extends base model with Kiro-specific fields for server management
546
+ and tool control.
547
+ """
548
+
549
+ # Kiro-specific fields
550
+ disabled: Optional[bool] = Field(None, description="Whether server is disabled")
551
+ autoApprove: Optional[List[str]] = Field(None, description="Auto-approved tool names")
552
+ disabledTools: Optional[List[str]] = Field(None, description="Disabled tool names")
553
+
554
+ @classmethod
555
+ def from_omni(cls, omni: 'MCPServerConfigOmni') -> 'MCPServerConfigKiro':
556
+ """Convert Omni model to Kiro-specific model."""
557
+ # Get supported fields dynamically
558
+ supported_fields = set(cls.model_fields.keys())
559
+
560
+ # Single-call field filtering
561
+ kiro_data = omni.model_dump(include=supported_fields, exclude_unset=True)
562
+
563
+ return cls.model_validate(kiro_data)
564
+
565
+
541
566
  class MCPServerConfigOmni(BaseModel):
542
567
  """Omni configuration supporting all host-specific fields.
543
568
 
@@ -580,6 +605,11 @@ class MCPServerConfigOmni(BaseModel):
580
605
  # VS Code specific
581
606
  envFile: Optional[str] = None
582
607
  inputs: Optional[List[Dict]] = None
608
+
609
+ # Kiro specific
610
+ disabled: Optional[bool] = None
611
+ autoApprove: Optional[List[str]] = None
612
+ disabledTools: Optional[List[str]] = None
583
613
 
584
614
  @field_validator('url')
585
615
  @classmethod
@@ -599,4 +629,5 @@ HOST_MODEL_REGISTRY: Dict[MCPHostType, type[MCPServerConfigBase]] = {
599
629
  MCPHostType.VSCODE: MCPServerConfigVSCode,
600
630
  MCPHostType.CURSOR: MCPServerConfigCursor,
601
631
  MCPHostType.LMSTUDIO: MCPServerConfigCursor, # Same as CURSOR
632
+ MCPHostType.KIRO: MCPServerConfigKiro,
602
633
  }
@@ -14,6 +14,7 @@ import logging
14
14
 
15
15
  from .host_management import MCPHostStrategy, register_host_strategy
16
16
  from .models import MCPHostType, MCPServerConfig, HostConfiguration
17
+ from .backup import MCPHostConfigBackupManager, AtomicFileOperations
17
18
 
18
19
  logger = logging.getLogger(__name__)
19
20
 
@@ -409,6 +410,101 @@ class VSCodeHostStrategy(MCPHostStrategy):
409
410
  return False
410
411
 
411
412
 
413
+ @register_host_strategy(MCPHostType.KIRO)
414
+ class KiroHostStrategy(MCPHostStrategy):
415
+ """Configuration strategy for Kiro IDE."""
416
+
417
+ def get_config_path(self) -> Optional[Path]:
418
+ """Get Kiro configuration path (user-level only per constraint)."""
419
+ return Path.home() / ".kiro" / "settings" / "mcp.json"
420
+
421
+ def get_config_key(self) -> str:
422
+ """Kiro uses 'mcpServers' key."""
423
+ return "mcpServers"
424
+
425
+ def is_host_available(self) -> bool:
426
+ """Check if Kiro is available by checking for settings directory."""
427
+ kiro_dir = Path.home() / ".kiro" / "settings"
428
+ return kiro_dir.exists()
429
+
430
+ def validate_server_config(self, server_config: MCPServerConfig) -> bool:
431
+ """Kiro validation - supports both local and remote servers."""
432
+ return server_config.command is not None or server_config.url is not None
433
+
434
+ def read_configuration(self) -> HostConfiguration:
435
+ """Read Kiro configuration file."""
436
+ config_path_str = self.get_config_path()
437
+ if not config_path_str:
438
+ return HostConfiguration(servers={})
439
+
440
+ config_path = Path(config_path_str)
441
+ if not config_path.exists():
442
+ return HostConfiguration(servers={})
443
+
444
+ try:
445
+ with open(config_path, 'r', encoding='utf-8') as f:
446
+ data = json.load(f)
447
+
448
+ servers = {}
449
+ mcp_servers = data.get(self.get_config_key(), {})
450
+
451
+ for name, config in mcp_servers.items():
452
+ try:
453
+ servers[name] = MCPServerConfig(**config)
454
+ except Exception as e:
455
+ logger.warning(f"Invalid server config for {name}: {e}")
456
+ continue
457
+
458
+ return HostConfiguration(servers=servers)
459
+
460
+ except Exception as e:
461
+ logger.error(f"Failed to read Kiro configuration: {e}")
462
+ return HostConfiguration(servers={})
463
+
464
+ def write_configuration(self, config: HostConfiguration, no_backup: bool = False) -> bool:
465
+ """Write configuration to Kiro with backup support."""
466
+ config_path_str = self.get_config_path()
467
+ if not config_path_str:
468
+ return False
469
+
470
+ config_path = Path(config_path_str)
471
+
472
+ try:
473
+ # Ensure directory exists
474
+ config_path.parent.mkdir(parents=True, exist_ok=True)
475
+
476
+ # Read existing configuration to preserve other settings
477
+ existing_data = {}
478
+ if config_path.exists():
479
+ with open(config_path, 'r', encoding='utf-8') as f:
480
+ existing_data = json.load(f)
481
+
482
+ # Update MCP servers section
483
+ servers_data = {}
484
+ for name, server_config in config.servers.items():
485
+ servers_data[name] = server_config.model_dump(exclude_unset=True)
486
+
487
+ existing_data[self.get_config_key()] = servers_data
488
+
489
+ # Use atomic write with backup support
490
+ backup_manager = MCPHostConfigBackupManager()
491
+ atomic_ops = AtomicFileOperations()
492
+
493
+ atomic_ops.atomic_write_with_backup(
494
+ file_path=config_path,
495
+ data=existing_data,
496
+ backup_manager=backup_manager,
497
+ hostname="kiro",
498
+ skip_backup=no_backup
499
+ )
500
+
501
+ return True
502
+
503
+ except Exception as e:
504
+ logger.error(f"Failed to write Kiro configuration: {e}")
505
+ return False
506
+
507
+
412
508
  @register_host_strategy(MCPHostType.GEMINI)
413
509
  class GeminiHostStrategy(MCPHostStrategy):
414
510
  """Configuration strategy for Google Gemini CLI MCP integration."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hatch-xclam
3
- Version: 0.7.0.dev13
3
+ Version: 0.7.1.dev1
4
4
  Summary: Package manager for the Cracking Shells ecosystem
5
5
  Author: Cracking Shells Team
6
6
  Project-URL: Homepage, https://github.com/CrackingShells/Hatch
@@ -30,7 +30,7 @@ Dynamic: license-file
30
30
 
31
31
  ## Introduction
32
32
 
33
- Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, and other platforms with automatic dependency management.
33
+ Hatch is the package manager for managing Model Context Protocol (MCP) servers with environment isolation, multi-type dependency resolution, and multi-host deployment. Deploy MCP servers to Claude Desktop, VS Code, Cursor, Kiro, and other platforms with automatic dependency management.
34
34
 
35
35
  The canonical documentation is at `docs/index.md` and published at <https://hatch.readthedocs.io/en/latest/>.
36
36
 
@@ -38,7 +38,7 @@ The canonical documentation is at `docs/index.md` and published at <https://hatc
38
38
 
39
39
  - **Environment Isolation** — Create separate, isolated workspaces for different projects without conflicts
40
40
  - **Multi-Type Dependency Resolution** — Automatically resolve and install system packages, Python packages, Docker containers, and Hatch packages
41
- - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, LM Studio, and Google Gemini CLI
41
+ - **Multi-Host Deployment** — Deploy MCP servers to Claude Desktop, Claude Code, VS Code, Cursor, Kiro, LM Studio, and Google Gemini CLI
42
42
  - **Package Validation** — Ensure packages meet schema requirements before distribution
43
43
  - **Development-Focused** — Optimized for rapid development and testing of MCP server ecosystems
44
44
 
@@ -50,6 +50,7 @@ Hatch supports deployment to the following MCP host platforms:
50
50
  - **Claude Code** — Claude integration for VS Code with MCP capabilities
51
51
  - **VS Code** — Visual Studio Code with the MCP extension for tool integration
52
52
  - **Cursor** — AI-first code editor with built-in MCP server support
53
+ - **Kiro** — Kiro IDE with MCP support
53
54
  - **LM Studio** — Local LLM inference platform with MCP server integration
54
55
  - **Google Gemini CLI** — Command-line interface for Google's Gemini model with MCP support
55
56
 
@@ -58,6 +58,15 @@ pyproject.toml
58
58
  ./tests/test_registry.py
59
59
  ./tests/test_registry_retriever.py
60
60
  ./tests/test_system_installer.py
61
+ ./tests/integration/__init__.py
62
+ ./tests/integration/test_mcp_kiro_integration.py
63
+ ./tests/regression/__init__.py
64
+ ./tests/regression/test_mcp_kiro_backup_integration.py
65
+ ./tests/regression/test_mcp_kiro_cli_integration.py
66
+ ./tests/regression/test_mcp_kiro_decorator_registration.py
67
+ ./tests/regression/test_mcp_kiro_host_strategy.py
68
+ ./tests/regression/test_mcp_kiro_model_validation.py
69
+ ./tests/regression/test_mcp_kiro_omni_conversion.py
61
70
  ./tests/test_data/packages/basic/base_pkg/hatch_mcp_server.py
62
71
  ./tests/test_data/packages/basic/base_pkg/mcp_server.py
63
72
  ./tests/test_data/packages/basic/base_pkg_v2/hatch_mcp_server.py
@@ -151,6 +160,15 @@ tests/test_python_installer.py
151
160
  tests/test_registry.py
152
161
  tests/test_registry_retriever.py
153
162
  tests/test_system_installer.py
163
+ tests/integration/__init__.py
164
+ tests/integration/test_mcp_kiro_integration.py
165
+ tests/regression/__init__.py
166
+ tests/regression/test_mcp_kiro_backup_integration.py
167
+ tests/regression/test_mcp_kiro_cli_integration.py
168
+ tests/regression/test_mcp_kiro_decorator_registration.py
169
+ tests/regression/test_mcp_kiro_host_strategy.py
170
+ tests/regression/test_mcp_kiro_model_validation.py
171
+ tests/regression/test_mcp_kiro_omni_conversion.py
154
172
  tests/test_data/packages/basic/base_pkg/hatch_mcp_server.py
155
173
  tests/test_data/packages/basic/base_pkg/mcp_server.py
156
174
  tests/test_data/packages/basic/base_pkg_v2/hatch_mcp_server.py
@@ -1,4 +1,3 @@
1
- __temp__
2
1
  cracking-shells-playbook
3
2
  dist
4
3
  docs
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hatch-xclam"
7
- version = "0.7.0-dev.13"
7
+ version = "0.7.1-dev.1"
8
8
  description = "Package manager for the Cracking Shells ecosystem"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -0,0 +1,5 @@
1
+ """
2
+ Integration tests for Hatch MCP functionality.
3
+
4
+ These tests validate component interactions and end-to-end workflows.
5
+ """
@@ -0,0 +1,153 @@
1
+ """
2
+ Kiro MCP Integration Tests
3
+
4
+ End-to-end integration tests combining CLI, model conversion, and strategy operations.
5
+ """
6
+
7
+ import unittest
8
+ from unittest.mock import patch, MagicMock
9
+
10
+ from wobble.decorators import integration_test
11
+
12
+ from hatch.cli_hatch import handle_mcp_configure
13
+ from hatch.mcp_host_config.models import (
14
+ HOST_MODEL_REGISTRY,
15
+ MCPHostType,
16
+ MCPServerConfigKiro
17
+ )
18
+
19
+
20
+ class TestKiroIntegration(unittest.TestCase):
21
+ """Test suite for end-to-end Kiro integration."""
22
+
23
+ @integration_test(scope="component")
24
+ @patch('hatch.cli_hatch.MCPHostConfigurationManager')
25
+ def test_kiro_end_to_end_configuration(self, mock_manager_class):
26
+ """Test complete Kiro configuration workflow."""
27
+ # Setup mocks
28
+ mock_manager = MagicMock()
29
+ mock_manager_class.return_value = mock_manager
30
+
31
+ mock_result = MagicMock()
32
+ mock_result.success = True
33
+ mock_manager.configure_server.return_value = mock_result
34
+
35
+ # Execute CLI command with Kiro-specific arguments
36
+ result = handle_mcp_configure(
37
+ host='kiro',
38
+ server_name='augment-server',
39
+ command='auggie',
40
+ args=['--mcp', '-m', 'default'],
41
+ disabled=False,
42
+ auto_approve_tools=['codebase-retrieval', 'fetch'],
43
+ disable_tools=['dangerous-tool'],
44
+ auto_approve=True
45
+ )
46
+
47
+ # Verify success
48
+ self.assertEqual(result, 0)
49
+
50
+ # Verify configuration manager was called
51
+ mock_manager.configure_server.assert_called_once()
52
+
53
+ # Verify server configuration
54
+ call_args = mock_manager.configure_server.call_args
55
+ server_config = call_args.kwargs['server_config']
56
+
57
+ # Verify all Kiro-specific fields
58
+ self.assertFalse(server_config.disabled)
59
+ self.assertEqual(len(server_config.autoApprove), 2)
60
+ self.assertEqual(len(server_config.disabledTools), 1)
61
+ self.assertIn('codebase-retrieval', server_config.autoApprove)
62
+ self.assertIn('dangerous-tool', server_config.disabledTools)
63
+
64
+ @integration_test(scope="system")
65
+ def test_kiro_host_model_registry_integration(self):
66
+ """Test Kiro integration with HOST_MODEL_REGISTRY."""
67
+ # Verify Kiro is in registry
68
+ self.assertIn(MCPHostType.KIRO, HOST_MODEL_REGISTRY)
69
+
70
+ # Verify correct model class
71
+ model_class = HOST_MODEL_REGISTRY[MCPHostType.KIRO]
72
+ self.assertEqual(model_class.__name__, "MCPServerConfigKiro")
73
+
74
+ # Test model instantiation
75
+ model_instance = model_class(
76
+ name="test-server",
77
+ command="auggie",
78
+ disabled=True
79
+ )
80
+ self.assertTrue(model_instance.disabled)
81
+
82
+ @integration_test(scope="component")
83
+ def test_kiro_model_to_strategy_workflow(self):
84
+ """Test workflow from model creation to strategy operations."""
85
+ # Import to trigger registration
86
+ import hatch.mcp_host_config.strategies
87
+ from hatch.mcp_host_config.host_management import MCPHostRegistry
88
+
89
+ # Create Kiro model
90
+ kiro_model = MCPServerConfigKiro(
91
+ name="workflow-test",
92
+ command="auggie",
93
+ args=["--mcp"],
94
+ disabled=False,
95
+ autoApprove=["codebase-retrieval"]
96
+ )
97
+
98
+ # Get Kiro strategy
99
+ strategy = MCPHostRegistry.get_strategy(MCPHostType.KIRO)
100
+
101
+ # Verify strategy can validate the model
102
+ self.assertTrue(strategy.validate_server_config(kiro_model))
103
+
104
+ # Verify model fields are accessible
105
+ self.assertEqual(kiro_model.command, "auggie")
106
+ self.assertFalse(kiro_model.disabled)
107
+ self.assertIn("codebase-retrieval", kiro_model.autoApprove)
108
+
109
+ @integration_test(scope="end_to_end")
110
+ @patch('hatch.cli_hatch.MCPHostConfigurationManager')
111
+ def test_kiro_complete_lifecycle(self, mock_manager_class):
112
+ """Test complete Kiro server lifecycle: create, configure, validate."""
113
+ # Setup mocks
114
+ mock_manager = MagicMock()
115
+ mock_manager_class.return_value = mock_manager
116
+
117
+ mock_result = MagicMock()
118
+ mock_result.success = True
119
+ mock_manager.configure_server.return_value = mock_result
120
+
121
+ # Step 1: Configure server via CLI
122
+ result = handle_mcp_configure(
123
+ host='kiro',
124
+ server_name='lifecycle-test',
125
+ command='auggie',
126
+ args=['--mcp', '-w', '.'],
127
+ disabled=False,
128
+ auto_approve_tools=['codebase-retrieval'],
129
+ auto_approve=True
130
+ )
131
+
132
+ # Verify CLI success
133
+ self.assertEqual(result, 0)
134
+
135
+ # Step 2: Verify configuration manager interaction
136
+ mock_manager.configure_server.assert_called_once()
137
+ call_args = mock_manager.configure_server.call_args
138
+
139
+ # Step 3: Verify server configuration structure
140
+ server_config = call_args.kwargs['server_config']
141
+ self.assertEqual(server_config.name, 'lifecycle-test')
142
+ self.assertEqual(server_config.command, 'auggie')
143
+ self.assertIn('--mcp', server_config.args)
144
+ self.assertIn('-w', server_config.args)
145
+ self.assertFalse(server_config.disabled)
146
+ self.assertIn('codebase-retrieval', server_config.autoApprove)
147
+
148
+ # Step 4: Verify model type
149
+ self.assertIsInstance(server_config, MCPServerConfigKiro)
150
+
151
+
152
+ if __name__ == '__main__':
153
+ unittest.main()
@@ -0,0 +1,5 @@
1
+ """
2
+ Regression tests for Hatch MCP functionality.
3
+
4
+ These tests validate existing functionality to prevent breaking changes.
5
+ """